Postman实现接口测试流程

  • 数据库初始化
  • 请求脚本
  • 添加断言(业务、数据)
  • 参数化
  • 运行测试

Postman发送请求

Get方法发送请求

Post数据提交方式

  • Get方法访问接口时,运用?连接参数,多个参数之间使用&连接
  • Get方法请求参数写入Params,会自动同步到接口地址中

Get请求练习Demo01

使用GET方法访问百度首页
接口地址:http://www.baidu.com
请求方法:get
参数:无
返回格式:text/html
预期包含文本:百度一下,你就知道

请求wa_test / Get请求方法 / 访问百度首页接口接口自动化测试_JSON

响应

  • body响应体、响应正文
  • Pretty 可以让JSON和XML的响应内容显示的更美观规整
  • Raw 显示的是最原始的数据
  • Preview 把HTML页面自动解析显示出来
  • Visuallze 可视化,需要在tests中编码接口自动化测试_数据_02

响应头

Get请求练习Demo2

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

接口自动化测试_html_03

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信息为空

接口自动化测试_html_04

Post方法发送请求

  • 参数需要在Body部分填写
  • form-data 一般用于上传文件
  • x-www-form-urlencoded 默认使用类型
  • raw中JSON
  • bianry
  • 发送二进制数据,只能上传一个文件接口自动化测试_html_05

Post练习Demo1

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

接口自动化测试_数据_06

Post练习Demo2

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

接口自动化测试_JSON_07

uponefile接口

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

接口自动化测试_html_08

upfiles接口

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

接口自动化测试_数据_09

signup接口

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

接口自动化测试_数据_10

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":"张三" }

接口自动化测试_JSON_11

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(数据/变量)

接口自动化测试_html_12

tests

  • 用于发送请求之后执行的代码,一般用于断言(判断接口返回值是否正确)接口自动化测试_数据_13

练习demo2

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

接口自动化测试_html_14

断言方式

tests['断言消息']=responseBody.has("预期文本")
  • 用于判断响应正文中是否包含预期文本,用于部分断言
  • 如果响应正文中包含预期文本,则测试结果为PASS,否则为FAIL
  • = 用于设置测试结果
  • == 表示相等,用于整体断言
  • 如果实际结果完全等于预期结果,则结果为PASS通过,否则为FAIL

Demo1

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

接口自动化测试_JSON_15

Demo2

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

接口自动化测试_数据_16

部分断言

JSON断言

  • json响应正文的类型是字符串类型
  • 可以使用 == 进行部分断言
  • 可以使用 == 进行整体断言
  • 需要将响应正文转为JSON类型
  • 转换数据格式为JSON对象
actual = JSON.parse(responseBody)

JSON部分断言

actual['键名'] 或 actual.键名

注意

  • 响应正文字符串不能直接使用==进行判断是否相等
  • 相应字符串空格个数补丁,预期字符串如果使用==,必须完全匹配
  • JSON对象不能直接使用==进行判断是否相等
  • postman中的JSON对象不支持==
  • JSON对象序列化后可以使用==进行比对
JSON.stringify(JSON对象)
  • 将JSON对象转型为统一格式的字符串
  • 序列化后,键与值之间的空格,键值对之间的空格会被自动删除
  • 不能用toString()

has与==区别?

  • has是一种模糊匹配,部分数据正确即可,一般用txt/html断言
  • ==是一种精确匹配,数据必须完全一致,一般用JSON断言

运行测试

调试

  • 通过send发送数据,查看请求和响应的内容以及断言结果。常用于调试请求
  • 便于发现请求方法、URL、参数、请求头设置等错误
  • 便于发现前置代码块(Pre-requests Script)和后置代码块(Teses)中的错误
  • 查看控制台输出
  • 主要查看输出的日志信息,便于调试
  • 请求头,请求体,响应头,响应体
  • 重点关注:请求方法、URL、请求头、响应体

参数化

  • 参数化也称为数据驱动测试
  • 参数化就是把用例中的数据存到变量/参数中,通过参数驱动整个测试,也称为数据驱动测试
  • 用于执行大量用例
  • 每一条用例都创建一个请求不现实,工作量大
  • 可以把用例保存在文件中
  • Postman支持读取文件数据,将数据作为参数传递给请求
  • 参数只要写一次,可以很多次传入数据,这个过程就是参数化

Postman参数化的特点

  • 只支持txt,csv,json文件格式
  • csv和txt文件,第一行必须是列名,以逗号间隔各列数据
  • JSON文件要求,必须是[],键值对涉及到双引号的使用

使用参数化文件

  • 代码之外直接使用
{{文件列名}}
字符串需要加引号"{{文件列名}}"
  • 代码中使用找文件中的
data.文件列名
  • 指定参数化文件
  • 一个集合只能指定一个文件
  • 选择csv文件后,自动将行数识别为迭代次数
  • txt类型必须手动输入迭代次数,第一行是列名

Demo1

请求地址:http://接口服务器IP/apitest/multi-params/
方法:get
参数:id、username

接口自动化测试_html_17接口自动化测试_html_18

接口关联

  • 一个接口返回的数据,这些数据被下一个接口使用,这两个接口就是关联接口
  • 混合场景测试

Demo1

被测接口:http://服务器 IP/apitest/refer/info/
接口功能:查询信息接口
请求方法:get 方法
参数:无参
关联接口:http://服务器 IP/apitest/refer/login/
接口功能:登录验证
请求方法:post 方法
请求类型:form 表单
请求参数:username、password
数据库表:apitest.users

postman可以实现登录方面的自动关联接口自动化测试_数据_19

手动关联

  • 禁止缓存cookie接口自动化测试_数据_20接口自动化测试_JSON_21

数据库初始化

  • 测试时需要使用的测试数据,需要在测试代码执行前准备好,可以写入数据库,可以从数据库中删除数据,也可以修改数据
  • 需要实现准备测试数据的过程,就称为初始化数据库,也些公司也称为造数
  • 准备的数据应该与自己编写的用例中使用的数据保持一致,还要注意不要与同事的数据产生冲突
  • 在执行测试之前要将数据库数据准备好

落库检查

  • 也称为验库
  • 断言时关注两个方面,一方面是接口的返回值,另一方面是数据库数据(行)

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

接口自动化测试_数据_22

添加数据

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

接口自动化测试_html_23

删除数据

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
  • 运行测试

运行测试

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 生成测试报告
  • & 表示运行完左边的命令,继续运行右边的命令
  • && 表示左边的命令执行完成,再执行右边的命令