1. 接口测试概念
1.1 接口概念
接口是前后端沟通的桥梁,数据传输的通道。如前端页面用户的请求,会发送给后端处理,处理后再通过接口响应回前端,实现用户的交互。
倘若理解的比较抽象可以参考这篇图文详解博客:http://t.csdnimg.cn/qZvPi。
1.2 接口分类
接口又分为内部接口和外部接口:
内部接口为自己公司开发,分为上层服务接口、下层服务接口、同层接口。
外部接口为第三方接口,例如购物平台支付的支付宝支付、微信支付、银行卡支付。
1.3 接口测试
接口测试是根据提供的接口进行测试,确定对应的数据正确以及逻辑正确的过程,属于功能测试和灰盒测试,其实现的方式主要有两种:
使用接口工具来实现:Postman、Jmeter。
编写代码来实现:Python+Requests+开源框架。
2. HTTP协议
2.1 HTTP和TCP/IP协议
HTTP协议和TCP/IP协议的定义:
HTTP(HyperText Transfer Protoco)为超文本传输协议,可传输文字、图片、音频、视频等。
TCP/IP(Transmission Control Protocol/Internet Protocol)为传输控制协议/网际协议,规定了通信的标准和方法,是保证网络数据完整传输的两个重要协议。
HTTP和TCP/IP协议的工作流程:
用户浏览网页时,浏览器发起HTTP请求,该请求经TCP封装成数据包。
IP协议指引数据包到达服务器。
服务器响应后,TCP/IP协议栈将HTTP响应数据传回浏览器,浏览器解析HTML并展示给用户。
2.2 HTTP协议和HTTPS协议的区别
对比项 | HTTP | HTTPS |
数据加密与安全性 | 不加密,安全性较低 | 通过SSL/TLS加密,提供更高安全性 |
端口使用 | 默认80端口 | 默认443端口 |
证书与资源消耗 | 无需证书,资源消耗较低 | 需要证书管理,资源消耗较高(因加密处理) |
3. HTTP协议-请求
3.1 请求的组成
请求行:请求方法(如GET、POST)、请求的URL和HTTP协议版本。
请求头:一般由开发或服务器定义,数据不能更改。请求头中的Content-Type、Cookie数据非常重要。
请求体:请求体包含要发送到服务器的数据,具体的数据类型取决于请求头中的Content_Type。
3.2 请求方法
请求方法在HTTP协议中,定义了客户端与服务器之间交互的方式,HTTP/1.1协议中共定义了八种方法,常用的是GET和POST。
请求方法在面试中经常出现,所以最好是弄明白并理解,也可以看http://t.csdnimg.cn/rjHkt这篇博客,写请求方法写的很详细。
序号 | 方法 | 用途 |
1 | GET | 从指定的资源请求数据 |
2 | POST | 向指定资源提交数据进行处理 |
3 | PUT | 向指定资源上传内容以更新资源 |
4 | DELETE | 请求服务器删除指定的页面或资源 |
5 | HEAD | 类似于GET,但仅返回响应头 |
6 | OPTIONS | 返回服务器针对特定资源所支持的HTTP请求方法 |
7 | TRACE | 回显服务器收到的请求,用于测试或诊断 |
8 | CONNECT | 保留给代理服务器,用于将连接改为管道方式 |
3.3 GET和POST的区别
对比项 | GET | POST |
数据传输方式 | URL传递参数 | HTTP消息的主体传输参数 |
安全性 | 参数暴露在URL中,安全性较低 | 参数不会暴露在URL中,相对更安全 |
数据大小限制 | URL长度的限制,数据量相对较小 | 理论上没有数据大小的限制,但实际限制取决于服务器和客户端的配置 |
缓存性 | 可以被缓存 | 默认不会缓存 |
3.4 POST请求参数的传递方式
POST请求的参数在body中传递,有多种传值方式,需要根据头部参数的Content-Type的值来确定选择哪种方式传值。
Content-Type 取值 | Body 选择格式 | 入参值的格式 |
application/x-www-form-urlencoded | x-www-form-urlencoded | 键值对 |
multipart/form-data | form-data | 键值对,文件格式 |
application/json | raw-json | json格式 |
application/xml | raw-xml | xml格式 |
application/javascript | raw-javascript | js格式 |
text/plain | raw-text | 文本格式 |
text/html | raw-html | html格式 |
4. HTTP协议-响应
4.1 响应的组成
状态行:HTTP协议的版本、状态码(200表示成功)、状态消息。
响应头:响应头包含了多个字段,如
Content-Type
、Content-Length
、Date
等。(请求头和响应头都包含Content-Type,请求中Content-Type是告诉服务器参数的请求数据类型,响应中Content-Type是告诉客户端返回的数据的类型)。响应正文:响应正文是响应消息的实际内容,它可以是HTML文档、图片、视频文件、JSON数据等,具体取决于请求的资源和响应头中指定的
Content-Type
。
4.2 常见的状态码
状态代码(HTTP Status code)由三位数字组成,第一个数字定义了响应的类别,共分五种类别:
分类 | 分类描述 |
1** | 信息,服务器收到请求,需要请求者继续执行操作 |
2** | 成功,操作被成功接收并处理 |
3** | 重定向,需要进一步的操作以完成请求 |
4** | 客户端错误,请求包含语法错误或无法完成请求 |
5** | 服务器错误,服务器在处理请求的过程中发生了错误 |
更多状态码详解可以看博客http://t.csdnimg.cn/uf30t,以下是一些常见的状态码:
状态码 | 描述 | 状态码 | 描述 |
200 | 响应成功 | 204 | No Content(无内容) |
301 | 资源(网页等)被永久转移到其它URL | 302 | Found(临时移动) |
404 | 请求的资源(网页等)不存在 | 403 | Forbidden(拒绝请求) |
500 | 内部服务器错误 | 503 | Service Unavailable(服务不可用) |
5. cookie、session、token
Cookie 是服务器在浏览器端存储的一小段数据,用于识别用户身份或存储用户信息。
Session 是一种服务器端存储机制,用于跟踪用户的会话信息。
Token 是一种服务器生成的加密字符串,用于验证用户的身份或权限。
Session和Cookie的区别:
对比项 | Session | Cookie |
数据存放位置 | 存储在服务器上 | 存储在浏览器本地 |
用户安全程度 | 相对更安全,因为数据存储在服务器上 | 存在被窃取的风险,因为数据存储在浏览器本地 |
性能影响 | 访问量增加时,会占用服务器的性能资源 | 不会直接影响服务器性能,因为数据存储在客户端 |
数据存储大小 | 依赖于服务器的大小 | 单个Cookie保存的数据大小有限制(一般不超过4K) |
Token和Session的区别:
对比项 | Token | Session |
来源与定义 | 开发者自定义的加密字符串 | HTTP协议规定的一种会话管理机制 |
存储位置 | 不一定存储在服务器上(可存储在任何地方,只要服务器能验证) | 总是存储在服务器上 |
跨域能力 | 可以跨域使用,因为与域名无直接关联 | 与特定域名绑定,不可跨域使用 |
6. 接口测试流程
接口测试也属于功能测试,对应的测试流程如下:
分析接口测试文档
编写接口测试用例
准备接口测试数据
执行接口测试用例-通过工具去执行
得到测试结果-输出测试报告-工具自动生成
7. Postman工具安装
Postman安装官网:Download Postman | Get Started for Free
Postman安装教程参考:http://t.csdnimg.cn/7GUvB
Postman界面介绍:http://t.csdnimg.cn/tdInW
8. Postman断言
Postman断言就是通过编写JavaScript脚本来检验返回的响应数据是否符合预期。
Postman断言的脚本代码可以看博客:http://t.csdnimg.cn/oNOsv、http://t.csdnimg.cn/wIrgy
9. Postman接口测试的导入导出
Postman接口测试的导入:
Postman接口测试的导出:
10. Postman实现变量参数化
10.1 环境变量
环境变量有开发环境、测试环境、预生产环境,生产环境等。
不同的环境有不同的值,主要体现在请求协议以及请求域名不一样,因此我们可以使用环境变量来管理不同的值。
例如:http://shop-xo.hctestedu.com/index.php?s=api/user/login&application=app&application_client_type=weixin;生产环境为了安全可能将协议更改为https、shop-xo.hctestedu.com域名也会和测试环境不同;其余部分index.php?s=api/user/login&application=app&application_client_type=weixin都和测试环境一样。
为什么会产生差异呢?因为他们维护在不同的服务器或主机上,比如测试时就放在本地主机,正式环境就放在服务器上。
设置环境变量方法一
设置环境变量方法二
引用环境变量
10.2 全局变量和局部变量
全局变量:可以供Postman所有的工程使用,即所有接口都可以调用全局变量。
局部变量:在Collection中去设置,即当前的测试集可以使用该变量,当和全局变量的变量名相同时,优先局部变量。
设置全局变量
设置局部变量
引用变量的方法一致,在请求地址输入中添加{{}},括号内填写变量名,即可引用成功。
11. Postman实现文档参数化
为什么需要文档参数化? 一个接口有多个组合情况,比如登录接口:要验证用户名正确,用户名错误,密码错误,密码为空等等,这就需要文档参数化。
Postman支持Json文档,txt文档,CSV文档。
文档参数化可以批量管理数据(输入的数据,预期结果),批量测试。
准备数据(一般添加数据后另存为txt、csv文件)
引用文档
打开Runner窗口,点击Data旁边的Select File按钮,导入准备好的参数化文件,点击Preview按钮,检查数据正确
查看执行结