测试断言Tests
在Tests中如果没有断言,则测试结果(Test Results)会显示没有测试
用于处理响应结果(响应头、响应体/响应正文)、进行断言(判断接口的返回结果是否符合预期)
调试脚本的相关代码
a)console.log(数据);
向控制台输出数据
console:控制台(用于显示日志的一个窗口)
log:日志
b)var 变量名=数据;
定义一个变量(内存中的一个位置,里面存储了=号右边的数据),变量可以在后面反复使用(不用重复去写复杂的数据)
var:variable,变量
c)typeof 数据或变量
查看数据或变量中存储的数据的类型,以决定后面如何处理数据
type:类型
of:的,谁的
响应断言
(1) 就是比对测试结果是否正确
(2) 方法
① 菜单操作/模板
② 代码
获得响应
状态码
responseCode.code:固定写法,必须严格按大小写用
response:响应,表示服务器发来的数据
code:代码
比如200、301、302、403、404、500等都是响应状态码
查看响应状态码:var ztm=responseCode.code;
响应正文
responseBody:固定写法,必须严格按大小写用
body:正文,主体
注意:不论是响应类型是html格式(网页<html>、<table>)、json格式({ })、xml格式,还可以是别的类型,一般响应正文都被改变成了字符串类型
对响应结果的处理
a)text/html格式(纯字符串或者html网页代码格式)
有很多处理方式,比如split是其中之一
字符串.split("分割符"):表示对字符串按照分隔符拆成多个字符串
b)json格式
注意:响应正文本身是字符串,即便响应类型是json格式,结果也是字符串,所以必须将字符串转成json字典类型
JSON.parse(responseBody):把响应正文转成json字典(注意响应正文必须是带{ }格式的才可以转)
parse:转换类型
{
"a":"zhsan",
"b":{
"c":20
}
}
看a的值:
JSON.parse(responseBody).a
JSON.parse(resposneBody)["a"]
引号不能省略,单引号也可以
看c的值:
JSON.parse(responseBody).b.c
JSON.parse(resposneBody)["b"]["c"]
引号不能省略,单引号也可以
断言代码写法
tests['断言消息']=responseBody.has('预期文本')
① tests是关键字
② has表示包含、有
③ 如果包含预期文本,则测试结果为Pass,否则结果为Fail
测试login接口(需求查看exam项目需求)
接口需求:
地址:http://IP/exam/login/
方法:post
参数:username、password
数据库表:exam.user
返回值:text/html
预期包含文本(假设测试登录成功的情况):登录验证成功
添加测试数据:
用户名 test01,密码 123456
insert into exam.user(id,username,password) values(2,'test01','123456');
测试signup接口(需求查看exam项目需求)
接口需求:
地址:http://IP/exam/signup/
方法:post
参数:username、password、confirm、name
数据库表:exam.user
返回值:json
预期包含文本(假设测试成功注册):Success
注意删除数据:
delete from exam.user where id>1;
tests['断言消息']=实际结果===预期结果
① === 表示相等
② = 表示赋值
③ 对比
1) has断言是一种模糊匹配,部分数据正确即可,has一般用于text/html类型的断言
2) ===是一种精确匹配,数据必须完全一致,一般用于json断言
测试登录接口(需求查看exam项目需求)
接口需求:
地址:http://IP/exam/login/
方法:post
参数:username、password
数据库表:exam.user
返回值:text/html
预期包含文本(假设测试登录成功的情况):登录验证成功
添加测试数据:
用户名 test01,密码 123456
要求使用===对登录接口进行断言
测试signup接口(需求查看exam项目需求)
接口需求:
地址:http://IP/exam/signup/
方法:post
参数:username、password、confirm、name
数据库表:exam.user
返回值:json
预期包含文本(假设测试成功注册):Success
注意删除数据:
delete from exam.user where id>1;
要求使用===对注册接口进行断言
响应断言类型
has断言
响应正文:相当于实际结果
has断言是判断实际结果中包含预期结果(字符串)
json断言
支持has断言(当对实际结果中的汉字断言时,较难)
使用===对json进行部分断言、整体断言
1)将响应正文()转为json字符串格式
actual =JSON.parse(responseBody)//将实际结果转换为json字典形式
2)JSON部分数据断言
actual['键名']或actual.键名可以获得实际结果中的某个键的值,对于汉字,正常显示
嵌套json:actual['键名1']['键名2']
3)json整体断言
对json字符串进行格式化(统一格式)
postman中不支持json字符串1===json字符串2
json字符串格式化方式:JSON.stringify(json字符串)
键、字符串数据、日期等全都加双引号定界,数值数据不变
键与值之间的空格、键值对之间的空格会被自动删除
测试重复注册,添加JSON部分断言
接口需求:
地址:http://接口服务器IP地址/exam/signup/
方法:post
参数:username、password、confirm、name
预期:{'Status':1003, 'Result':'Username is taken', 'Message':'用户名已被占用'}
注意:数据库中准备数据
insert into exam.user(id,username,password,name) values(2,'test01','123456','测试01');
测试用户重复注册时,验证返回的JSON字符串整体是否正确
接口需求:
地址:http://接口服务器IP地址/exam/signup/
方法:post
参数:username、password、confirm、name
预期:{'Status':1003, 'Result':'Username is taken', 'Message':'用户名已被占用'}
注意:数据库中准备数据
insert into exam.user(id,username,password,name) values(2,'test01','123456','测试01');