九、接口测试
一)接口测试的概念
1)接口测试
通过数据包的方式观察客户端向服务器发送了什么请求,模拟这些请求的过程
接口测试是测试系统组件间数据交互的一种方式。
接口测试是通过测试不同情况下的输入参数和与之对应的输出结果来判断接口是否符合或满足相应 的功能性、安全性要求。
简单来说,接口测试就是代替前端或第三方,来验证后端实现是否符合接口规范。
2)作用:
- 通过接口测试,测试接口的正确性和稳定性,能快速定位bug,提高测试效率
- 能为项目平台带来高效的缺陷检测和质量监督的能力
- 平台越复杂,系统越庞大,接口测试的效果越明显(提高测试效率,提升用户体验,降低研发成本)
3)原理:
模拟客户端向服务端发送请求报文,服务器接收请求报文后对想要相应的报文做处理,并向客户端返回应答,客户端接收响应数据后并进行判断请求是否正确,默认请求成功返回200,加入请求错误返回400,404,500等状态码,检查:返回数据的正确性与完整性、安全性:接口一般不会暴露在网上任意被调用,需要做一些限制,比如必须登录或者请求次数,频率限制。
4)学习目标:
- 理解协议和接口的概念
- 熟悉常见的网络协议
- 熟悉常见接口定义格式和文档
- 熟悉接口测试用例设计和书写
- 熟悉常见抓包工具的使用
- 熟悉利用Python完成接口测试的方法
- 熟悉常见接口工具的应用
接口其实就是在服务器定义的一堆函数或者是方法的集合,接口调用即调用这堆函数或者方法。
由于接口是在两台电脑之间远程去调用这些方法,所以不能直接通过函数名来进行调用,不同电脑之间如果要进行通讯,必须通过特定的网络协议来实现,所以接口调用必须借助于网络协议来进行调用,所以学习接口测试必须先熟悉网络协议。(通讯双方使用同种协议)
5)什么是协议
网络协议是通信计算机双方必须共同遵从的一组约定。如怎样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。它最终体现为在网络上传输的数据包的格式。
协议往往分成几个层次进行定义,分层定义是为了使某一层协议的改变不影响其他层次的协议。
6)分层协议体系:
网络七层协议与网络四层协议_网络,七四-CSDN博客
重点关注应用层的协议。应用层的协议包括telnet协议、FTP协议、HTTP协议、SMTP协议等,重点学习HTTP协议
二)HTTP协议
概念:
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。是基于TCP/IP模型的应用层协议。
为什么叫超文本?
不但可以传输文本数据,还可以传输音频、视频、超链接、图片等内容。
HTTPS:HTTP+SSL
http://www.baidu.com:80/adv_search?kw=py&order=false#tag
1)HTTP请求模型
HTTP由请求和响应构成,是一个标准的客户端服务器模型(B/S架构)
HTTP协议永远都是客户端发起请求,服务器回送响应
2)HTTP请求过程
一次http操作称为一个事务
- 浏览器输入
- dns域名解析:域名和ip的映射
- 建立tcp连接
- 发送http request:请求信息
- web服务器接收请求
- 应用服务器处理业务逻辑
- 关闭TCP连接:请求响应完成。如果浏览器在其头部信息中加入connection:keep-alive,则tcp连接仍然保持打开状态
- 浏览器:渲染响应页面
详细分享:
HTTP协议请求过程_浏览器如何跟踪地址-CSDN博客
https://yuanzhicun.blog.csdn.net/article/details/109405311
HTTPS:HTTPS请求的整个过程的详细分析-CSDN博客
3)HTTP协议特性
HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方法,适用于分布式超媒体信息系统。
HTTP协议的主要特点可概括如下:
1. 支持客户/服务器模式
2. 简单快速:客户向服务器请求服务时,只需要传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
3. 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
4. 无连接:其含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开链接。采用这种方式可以节省传输时间。
5. 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺点:缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。优点:在服务器不需要先前信息时,它的应答就较快。
4)HTTP协议请求类型
HTTP协议中共定义了八种方法或者叫“动作”来表明对Request-URI指定的资源的不同操作方式,具体介绍如下:
- OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送'*'的请求来测试服务器的功能性。
- HEAD:向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。
- GET:向特定的资源发出请求。
- POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的创建和/或已有资源的修改。
- PUT:向指定资源位置上传其最新内容。
- DELETE:请求服务器删除Request-URI所标识的资源。
- TRACE:回显服务器收到的请求,主要用于测试或诊断。
GET和POST请求的区别:
GET请求一般用于向服务器请求一个资源,没有副作用,一般会在客户端做缓存。POST请求一般用于向服务器提交数据并让其去完成一件事,所以这个操作由副作用,不回在客户端做缓存。
GET请求发送数据的时候,一般会将请求数据放在URL字符串中发送给服务器,所以从安全性角度来看相对没有POST请求安全性高,所以GET请求一般不会用于比较隐私数据的传输。而POST请求是将请求数据放在请求体body里面,所以一般用于表单数据、登陆数据等数据传输。
HTTP协议GET和POST请求的区别 - Y~forward - 博客园
5)HTTP状态码
http请求部分:ULR地址,请求参数(可选),请求头,请求体(仅限POST请求)
对于相应内容部分,主要关注两个点:
- 响应状态码
- 响应内容
-
状态码
- 1**:临时响应并需要请求者继续执行操作。
- 2**:请求成功。操作被成功接收并处理。
- 3**:重定向代码,用于已经移动的文件并且在头信息中指定新的地址信息。
- 4**:客户端错误,请求包含语法错误或者无法完成请求。
- 5**:服务器错误,服务器在处理请求的过程中发生了错误。
1.1 http状态返回代码 1xx(临时响应)
表示临时响应并需要请求者继续执行操作的状态代码。
- 100 (继续)请求者应当继续提出请求。服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。
- 101 (切换协议)请求者已要求服务器切换协议,服务器已确认并准备切换。
1.2 http状态返回代码 2xx (成功)
表示成功处理了请求的状态代码。
- 200 (成功) 服务器已成功处理了请求。通常,这表示服务器提供了请求的网页。
- 201 (已创建) 请求成功并且服务器创建了新的资源。
- 202 (已接受) 服务器已接受请求,但尚未处理。
- 203 (非授权信息) 服务器已成功处理了请求,但返回的信息可能来自另一来源。
- 204 (无内容) 服务器成功处理了请求,但没有返回任何内容。
- 205 (重置内容)服务器成功处理了请求,但没有返回任何内容。
- 206 (部分内容) 服务器成功处理了部分 GET 请求。
1.3 http状态返回代码 3xx (重定向)
表示要完成请求,需要进一步操作。通常,这些状态代码用来重定向。
- 300 (多种选择) 针对请求,服务器可执行多种操作。服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。
- 301 (永久移动) 请求的网页已永久移动到新位置。服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
- 302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
- 303 (查看其他位置)请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。
- 304 (未修改)自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。
- 305 (使用代理)请求者只能使用代理访问请求的网页。如果服务器返回此响应,还表示请求者应使用代理。
- 307 (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
比如url地址更新换代了,会提示重定向的地址。eg:京东以前的地址。
重定向的URL:
重定向到该url地址后,又发生了临时重定向
定向后请求成功:
1.4 http状态返回代码 4xx(请求错误)
这些状态代码表示请求可能出错,妨碍了服务器的处理。(一般是资源不存在或错误地址。一般是客户端发送的请求错误,如请求地址或请求参数错了)
- 400 (错误请求)服务器不理解请求的语法。
- 401 (未授权)请求要求身份验证。对于需要登录的网页,服务器可能返回此响应。
- 403 (禁止)服务器拒绝请求。
- 404 (未找到)服务器找不到请求的网页。
- 405 (方法禁用)禁用请求中指定的方法。
- 406 (不接受)无法使用请求的内容特性响应请求的网页。
- 407 (需要代理授权)此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。
- 408 (请求超时) 服务器等候请求时发生超时。
- 409 (冲突) 服务器在完成请求时发生冲突。服务器必须在响应中包含有关冲突的信息。
- 410 (已删除) 如果请求的资源已永久删除,服务器就会返回此响应。
- 411 (需要有效长度)服务器不接受不含有效内容长度标头字段的请求。
- 412 (未满足前提条件)服务器未满足请求者在请求中设置的其中一个前提条件。
- 413 (请求实体过大)服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。
- 414 (请求的 URI 过长)请求的 URI(通常为网址)过长,服务器无法处理。
- 415 (不支持的媒体类型)请求的格式不受请求页面的支持。
- 416 (请求范围不符合要求)如果页面无法提供请求的范围,则服务器会返回此状态代码。
- 417 (未满足期望值)服务器未满足"期望"请求标头字段的要求。
1.5 http状态返回代码 5xx(服务器错误)
这些状态代码表示服务器在尝试处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求出错。(有可能参数错误,或者服务器本身问题)
- 500 (服务器内部错误) 服务器遇到错误,无法完成请求。
- 501 (尚未实施)服务器不具备完成请求的功能。例如,服务器无法识别请求方法时可能会返回此代码。
- 502 (错误网关)服务器作为网关或代理,从上游服务器收到无效响应。
- 503 (服务不可用)服务器目前无法使用(由于超载或停机维护)。通常,这只是暂时状态。
- 504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。
- 505 (HTTP 版本不受支持)服务器不支持请求中所用的 HTTP 协议版本。
一些常见的http状态返回代码为:
200 - 服务器成功返回网页
404 - 请求的网页不存在
503 - 服务不可用
原文链接:HTTP响应码大全_响应码216833-CSDN博客
-
响应内容
在大多数应用中,响应内容一般有两种格式,一种是json格式,一种是html格式。而我们在进行接口测试的时候需要从响应内容中提取响应的字段或者文字内容来进行断言,所有必须掌握服务器返回不同格式响应时的内容提取方法。
- json格式:直接使用requests库的response对象自身的json方法将响应内容转化为json对象后再提取
- HTML格式:
- 利用lxml库以xpath方式提取
- 用正则表达式提取
三)chrome抓包操作
软件测试重点看的:
如果不设