Postman实现接口测试流程
- 数据库初始化
- 请求脚本
- 添加断言(业务、数据)
- 参数化
- 运行测试
Postman发送请求
Get方法发送请求
Post数据提交方式
- Get方法访问接口时,运用?连接参数,多个参数之间使用&连接
- Get方法请求参数写入Params,会自动同步到接口地址中
Get请求练习Demo01
使用GET方法访问百度首页
接口地址:http://www.baidu.com
请求方法:get
参数:无
返回格式:text/html
预期包含文本:百度一下,你就知道
请求wa_test / Get请求方法 / 访问百度首页接口
响应
- Pretty 可以让JSON和XML的响应内容显示的更美观规整
- Raw 显示的是最原始的数据
- Preview 把HTML页面自动解析显示出来
- Visuallze 可视化,需要在tests中编码

响应头
Get请求练习Demo2
接口名称: ui-login无参接口
接口地址:http://接口服务器IP/apitest/ui-login/
请求参数:无
响应类型:text/html
预期包含文本:<td align=right>用户名<td><input type="text" name="username" size=20
maxlength=18>

Get请求练习Demo3
get访问有参接口
接口功能:根据用户id查询用户名
接口地址:http://接口服务器IP/apitest/one-param/
请求方法:get
参数:id(含义:用户编号)
数据库和表:用户信息存储在wa_test数据库的users表中
响应类型:text/html
预期返回:显示用户名、显示用户信息不存在
设计测试用例方法: 场景法
基本流: 根据ID信息查询内容 1 2 3
备选流: ID信息不存在 非1 2 3
ID信息为空

Post方法发送请求
- 参数需要在Body部分填写
- form-data 一般用于上传文件
- x-www-form-urlencoded 默认使用类型
- raw中JSON
- bianry
- 发送二进制数据,只能上传一个文件

Post练习Demo1
post发送表单数据
接口功能:判断登录是否成功
接口地址:http://接口服务器IP/apitest/text-login/
请求方法:post
请求类型:form表单
参数:username、password
数据库表:wa_test.users
响应类型:text/html
预期包含文本:用户**登录验证成功

Post练习Demo2
接口功能:验证账号和密码是否正确
接口地址:http://接口服务器IP/apitest/login/
请求方式:post
请求参数类型:form表单
请求参数说明:
username:账号
password:密码
数据库表:wa_test.users
返回格式:json
返回值形如:{"Status": 1000, "Result": "Usercheck ok", "Message": "登录验证成功"}

uponefile接口
接口功能:上传一个文件
接口地址:http://接口服务器IP/apitest/upload-file/uponefile/
请求方法:post
请求参数:file
文件名:尽量不用汉字
响应类型:text/html
预期:包含文本“文件上传成功”
注意:
查看文件是否成功上传到服务器
切换目录: cd 目录名称
cd /home/wa_test/apitest/upload-file/upload/
查看当前目录中的文件和目录:ls

upfiles接口
接口功能:上传多个文件
接口地址:http://接口服务器IP/apitest/upload-file/upfiles/
请求方法:post
请求参数:名称自定义
响应类型:text/html
预期:包含文本“上传成功”

signup接口
接口功能:接收用户名、密码、确认密码和姓名,实现注册用户的功能
接口地址:http://接口服务器IP/apitest/signup/
请求方式:post
请求参数类型:json字符串
请求参数:username、password、confirm、name
数据库表:wa_test.users、wa_test.info
返回格式:json
返回值形如:{"Status": 1000, "Result": "Success", "Message": "注册成功"}

send-json接口
接口功能:对json字符串的键进行排序
接口地址:http://接口服务器IP/apitest/send-json/
发送数据类型:json字符串
json字符串:{"name":"张三","age":23, "isMarried":false, "child":null }
响应类型:json
响应结果:{"age":23, "child":null, "isMarried":false, "name":"张三" }

x-form-urlencoded 类型
- 将表单数据转换为key=value的形式,放入请求体中
Raw
- 可以发送任意格式的接口数据,如text、json、xml、html、javascript
form-data
- 将表单数据处理为一条信息,可上传键值对,也可以上传一个或多个文件
- 通常用于上传文件
Postman脚本执行顺序
点击send后执行顺序
- pre-requests script请求前脚本
- 请求
- tests请求后脚本
Pre-requests Script
- 在发送测试请求之前所要执行的代码
- 常用于设置域名、IP、保存多个请求供用户的数据等
Environment
环境变量
- 实质是局部变量,理论上只能在某个请求中使用
- 使用代码添加当前环境变量
pm.environment.set("环境变量名",变量值);
- 变量名必须添加引号
- 此类环境变量只能用于当前请求
- 通常放在Pre-requests Script、Tests中
- 使用代码添加全局变量
pm.globals.set("全局变量名",变量值);
- 此类变量可以用于所有请求
- 通常放在Pre-requests Script中
- 使用环境变量和全局变量
pm.environment.get("环境变量名")
pm.globals.get("全局变量名")
练习demo1
# 向console终端中输出数据
console.log("要打印的内容")
# 查看数据类型
typeof(数据/变量)

tests
- 用于发送请求之后执行的代码,一般用于断言(判断接口返回值是否正确)

练习demo2
接口功能:验证账号和密码是否正确
接口地址:http://接口服务器IP/apitest/login/
请求方式:post
请求参数类型:form表单
请求参数说明:
username:账号
password:密码
数据库表:wa_test.users
返回格式:json
返回值形式如:{"status":1000,"Result":"Usercheck ok","Message":"登录验证成功"}
添加断言、判断响应结果是否正确

断言方式
tests['断言消息']=responseBody.has("预期文本")
- 用于判断响应正文中是否包含预期文本,用于部分断言
- 如果响应正文中包含预期文本,则测试结果为PASS,否则为FAIL
- = 用于设置测试结果
- == 表示相等,用于整体断言
- 如果实际结果完全等于预期结果,则结果为PASS通过,否则为FAIL
Demo1
text-login登录断言
接口功能:判断登录是否成功
接口地址:http://IP/apitest/text-login/
请求方法:post
请求类型:form表单
参数:username、password
数据库表:wa_test.users
响应类型:text/html
预期包含文本:登录验证成功

Demo2
地址:http://服务器IP/apitest/login/
方法:post
post数据类型:form表单
参数:username、password
数据库表:wa_test.users
响应类型:json
预期:
{"Status": 1000, "Result": "Usercheck ok", "Message": "登录验证成功"}

部分断言
JSON断言
- 可以使用 == 进行部分断言
- 可以使用 == 进行整体断言
actual = JSON.parse(responseBody)
JSON部分断言
注意
- 相应字符串空格个数补丁,预期字符串如果使用==,必须完全匹配
- 将JSON对象转型为统一格式的字符串
- 序列化后,键与值之间的空格,键值对之间的空格会被自动删除
- 不能用toString()
has与==区别?
- has是一种模糊匹配,部分数据正确即可,一般用txt/html断言
- ==是一种精确匹配,数据必须完全一致,一般用JSON断言
运行测试
调试
- 通过send发送数据,查看请求和响应的内容以及断言结果。常用于调试请求
- 便于发现请求方法、URL、参数、请求头设置等错误
- 便于发现前置代码块(Pre-requests Script)和后置代码块(Teses)中的错误
- 主要查看输出的日志信息,便于调试
- 请求头,请求体,响应头,响应体
- 重点关注:请求方法、URL、请求头、响应体
参数化
- 参数化也称为数据驱动测试
- 参数化就是把用例中的数据存到变量/参数中,通过参数驱动整个测试,也称为数据驱动测试
- 用于执行大量用例
- 每一条用例都创建一个请求不现实,工作量大
- 可以把用例保存在文件中
- Postman支持读取文件数据,将数据作为参数传递给请求
- 参数只要写一次,可以很多次传入数据,这个过程就是参数化
Postman参数化的特点
- 只支持txt,csv,json文件格式
- csv和txt文件,第一行必须是列名,以逗号间隔各列数据
- JSON文件要求,必须是[],键值对涉及到双引号的使用
使用参数化文件
{{文件列名}}
字符串需要加引号"{{文件列名}}"
- 一个集合只能指定一个文件
- 选择csv文件后,自动将行数识别为迭代次数
- txt类型必须手动输入迭代次数,第一行是列名
Demo1
请求地址:http://接口服务器IP/apitest/multi-params/
方法:get
参数:id、username


接口关联
- 一个接口返回的数据,这些数据被下一个接口使用,这两个接口就是关联接口
- 混合场景测试
Demo1
被测接口:http://服务器 IP/apitest/refer/info/
接口功能:查询信息接口
请求方法:get 方法
参数:无参
关联接口:http://服务器 IP/apitest/refer/login/
接口功能:登录验证
请求方法:post 方法
请求类型:form 表单
请求参数:username、password
数据库表:apitest.users
postman可以实现登录方面的自动关联
手动关联
- 禁止缓存cookie


数据库初始化
- 测试时需要使用的测试数据,需要在测试代码执行前准备好,可以写入数据库,可以从数据库中删除数据,也可以修改数据
- 需要实现准备测试数据的过程,就称为初始化数据库,也些公司也称为造数
- 准备的数据应该与自己编写的用例中使用的数据保持一致,还要注意不要与同事的数据产生冲突
- 在执行测试之前要将数据库数据准备好
落库检查
- 也称为验库
- 断言时关注两个方面,一方面是接口的返回值,另一方面是数据库数据(行)
xmysql
- node提供的工具,xmysql提供了很多restful接口,实现对数据库进行的增删改查操作
xmysql的使用步骤
启动xmysql服务
#在安装好postman 及 xmysql的计算机上启动
#启动命令行窗口,输入
xmysql -h 数据库服务器地址 -u 数据库用户名 -p 数据库密码 -d 数据库名 -p d
xmysql -h 39.106.148.204 -u root -p 123456 -d wa_test

添加数据
向user表中插入1行数据
参数:
id = 4
username = test01
password = 123456

删除数据
delete方法
地址:http://localhost:3000/api/表名/主键值
查询数据
查询行
get方法
http://localhost:3000/api/表名?_where=(列名1,eq,值1)~and(列名2,eq,值2)
#查询users表中test01用户的信息
http://localhost:3000/api/users/?_where=(id,eq,62)
命令执行测试
- 可以同时运行多个测试
- 命令行运行测试可以生成测试报告(命令行报告,HTML报告)
命令行运行测试的步骤
运行测试
newman run 测试集合文件.json -d 参数化文件.csv -r cli,html --reporter-html-export 报告文件名.html & newman run 测试集合文件.json -d 参数化文件.csv -r cli,html --reporter-html-export 报告文件名.html
newman run login接口查询数据.postman_collection.json -d 查询.csv & newman run login接口添加数据.postman_collection.json -d 添加数据.csv & newman run login登录接口测试.postman_collection.json -d 接口参数化.csv -r cli,html --reporter-html-export 登录接口报告文档.html
#cli:表示生成command line/命令行测试报告
#html:表示生成html测试报告
#注意:只能运行一个测试集合
- -d 表示指向参数化文件
- -r 生成测试报告
- & 表示运行完左边的命令,继续运行右边的命令
- && 表示左边的命令执行完成,再执行右边的命令