【接口工具ApiPost】断言详解(6)-阅读本章需要编程基础(最好是JavaScript)

使用流程

  1. 定义测试用例
  2. 验证测试用例

以示例接口 新闻列表为例,新闻列表返回响应数据如下:

{
	"code": 10000,
	"msg": "success",
	"data": {
		"cur_page": "1",
		"last_page": 2,
		"page_size": "20",
		"total": 30,
		"list": [
			{
				"id": 3,
				"title": "前后仅用了4分钟,16枚洲际导弹应声而出,美航母也不敢轻举妄动",
				"author": "烽火杂志",
				"url": "https://open.apipost.cn/",
				"content": "世界上哪个国家可与美军抗衡?国际社会上关于这一问题的答案千奇百怪,但有一个国家用行动让美军闭嘴,短短4分钟连续发射16枚洲际导弹,场面十分壮观,让西方国家畏惧不已,即便是美航母也不敢轻举妄动。"
			}
		]
	}
}

在这里插入图片描述

一、定义测试用例

定义入口在后执行脚本里;

特别注意:每个测试用例是一行,不能换行。

通用和常用的测试用例定义如下:

apt.assert('response.raw.responseText=="test"');
apt.assert('response.raw.status==200');
apt.assert('response.raw.type=="json"');
apt.assert('response.raw.responseTime>=100');
apt.assert('response.json.errcode==1');
apt.assert('response.json.errcode!=1');
apt.assert('response.json.errcode>=1');
apt.assert('response.json.errcode==null');
apt.assert('response.json.errcode!=null');
apt.assert('response.headers["server"] == "nginx"');
apt.assert('response.headers["content-encoding"] == "gzip"');
apt.globals.set("key", "value");
apt.globals.get("key");
apt.globals.delete("key");
apt.globals.clear();
apt.variables.set("key", "value");
apt.variables.get("key");
apt.variables.delete("key");
apt.variables.clear();
$.ajax({
	"url":"https://echo.apipost.cn/token.php",
	"method":"POST",
	"async":false,
	"content-type":"appicateion-json",
	"data":JSON.stringify({
		"email":"admin@admin.com", 
		"password":"密码"
	}),
	"success":function(response){
		response = typeof response == "object" ? response : JSON.parse(response);
		console.log(response);
		apt.variables.set("token", response.token);
	}
});

在这里插入图片描述
针对新闻列表这个接口测试用例定义如下:

apt.assert('response.raw.status==200');
apt.assert('response.raw.type=="json"');
apt.assert('response.raw.responseTime>=100');
apt.assert('response.json.code==10000');
apt.assert('response.json.msg=="success"');

apt.assert('response.raw.responseText.indexOf("data") > -1');  // 检查响应文本是否含有data字符串
apt.assert('response.json.hasOwnProperty("data")'); // 检测返回json对象的是否含有data字段

apt.assert('response.json.data.cur_page=="1"');
apt.assert('response.json.data.last_page==2');
apt.assert('response.json.data.page_size=="20"');
apt.assert('response.json.data.total==30');

下图为运行效果图
在这里插入图片描述

二、验证测试用例

绿色表示测试通过,红色表示测试不通过
再加一个明显不通过的定义:apt.assert(‘response.raw.responseText==“test”’);

apt.assert('response.raw.responseText=="test"');

apt.assert('response.raw.status==200');
apt.assert('response.raw.type=="json"');
apt.assert('response.raw.responseTime>=100');
apt.assert('response.json.code==10000');
apt.assert('response.json.msg=="success"');

apt.assert('response.raw.responseText.indexOf("data") > -1');  // 检查响应文本是否含有data字符串
apt.assert('response.json.hasOwnProperty("data")'); // 检测返回json对象的是否含有data字段

apt.assert('response.json.data.cur_page=="1"');
apt.assert('response.json.data.last_page==2');
apt.assert('response.json.data.page_size=="20"');
apt.assert('response.json.data.total==30');

结果如图:
在这里插入图片描述

三、集合(list)验证(官网里并没有这个示例,笔者是结合js语法特点然后一点点调试出来的,如有不足请谅解)

定义如下:

//验证集合list测试用例定义;  
// 笔者暂时还没有找到添加断言业务描述的参数方法,一般断言有断言描述和断言表达式。但这个语法上好像不支持。
// 后期如果找到一并补充上
if(response.json.hasOwnProperty("data")){
    // apt.assert('response.raw.responseText=="test"');
    if(response.json.data.hasOwnProperty("list")
        && response.json.data.list.length>0){
        //  apt.assert('response.raw.responseText=="test"');
         for(var i=0;i<response.json.data.list.length;i++){
            apt.assert(true,"i="+i);
            var item=response.json.data.list[i];
            response.json.data.item=item;
            apt.assert('response.json.data.item.hasOwnProperty("id")');
            apt.assert('response.json.data.item.hasOwnProperty("title")');
            apt.assert('response.json.data.item.hasOwnProperty("author")');
            apt.assert('response.json.data.item.hasOwnProperty("url")');
            apt.assert('response.json.data.item.hasOwnProperty("content")');
         }
    }
}

结果见下图:
在这里插入图片描述

笔者暂时还没有找到添加断言业务描述的参数方法,一般断言有断言描述和断言表达式。但这个语法上好像不支持。后期如果找到一并补充上

四、断言扩展体会

示例接口由于是动态环境,所以数据值会发生变化,不利于进行原始数据与后期接口获取的数据进行数据文件上的验证。
如不理解没有关系,这个属于业务数据驱动接口测试的一种测试理念。一般在大型且各种资源比较充沛的团队才进行这样的从服务环境、数据库、业务数据添加,修改,删除等一系列流程上完全被定义可预测且能验证的整体可测的测试设计。
不过笔者搞开发十多年也没有见过这样的大手笔。可能大厂有吧!一般几十刚过百人的研发团队就算了。没那必要性。
不过如果是支撑大流量且需要在高速奔跑火车上换换轮子的极端情况,搞这么一个十个人左右的小的数据驱动一切可测设计的测试团队还是有比较可观的收益的。这样可评估线上生产环境的风险范围以及当前研发团队的研发质量和风险意识。
期待扩展出使用json等格式文件进行数据断言的版本

五、番外

搞开发这些年见过很多给开发打绩效的方案:
比如:按代码量的,按工时的,按编码时长的,按提交数量的等等方式。只能说有比没有好吧!在表面搞搞人力绩效还是很能让老板满意的,于是各种加班996,007就出现了。
其实开发质量是可以从API接口测试里体现出来的能兼容的场景参数越多,服务越稳定。技术当然会比较好。当然笔者的观点估计不好理解和接受。这种用单元测试来衡量开发质量的还得是开发自己人来搞。不过接口工具的出现到提供了非开发人员来量化开发人员质量,也许是不错的方式。
以上言论纯属个人观念。如认同请点个赞,如不认同也不必留言反驳,因为留言也不一定被通过哈!

产品推荐

推荐理由

postman在国内使用已经越来越困难:
1、登录问题严重
2、Mock功能服务基本没法使用
3、版本更新功能已很匮乏
4、某些外力因素导致postman以后能否使用风险较大
出于以上考虑因此笔者自己开发了一款api调试开发工具SmartApi,满足基本日常开发调试api需求

简介

历时一年半多开发终于smartApi-v1.0.0版本在2023-09-15晚十点正式上线
smartApi是一款对标国外的postman的api调试开发工具,由于开发人力就作者一个所以人力有限,因此v1.0.0版本功能进行精简,大功能项有:

  • api参数填写
  • api请求响应数据展示
  • PDF形式的分享文档
  • Mock本地化解决方案
  • api列表数据本地化处理
  • 再加上UI方面的打磨

下面是一段smartApi使用介绍:
在这里插入图片描述

下载地址:

https://pan.baidu.com/s/1kFAGbsFIk3dDR64NwM5y2A?pwd=csdn

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lichong951

你的鼓励决定更新的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值