案例实践:APP出现闪退问题,接口测试怎么做?(二)

上一篇 / 下一篇  2023-08-04 17:13:35 / 个人分类:接口测试

Postman实现接口功能测试

新增货品接口实战

1、填写接口请求4要素:

由于货品新增接口文档找不到接口请求4要素中的:请求方法、请求地址和请求头,故,使用Fiddler抓包获取,获取结果如下:

1)请求方法:POST

2)请求地址:

https://open.jackyun.com/open-platform/developer/intercept/testtool/buildparamandrequest

3)请求头:

截图如下:

文本内容如下:

Content-Type:application/x-www-form-urlencoded;charset=UTF-8

Cookie:53revisit=1680485326445;_ati=688404030667;Hm_lvt_4293e6f16d3e0252d48cf7a1252f995f=1687759229;Qs_lvt_352880=1680485326%2C1683769042%2C1687759230;Qs_pv_352880=902333099737909600%2C3189451156430100000%2C3125342331411176400%2C2032507965245106700%2C3752838942850185700;jkusername=88888;yhusername=visitor;SESSION=7a4b3cf3-93ae-4d07-8f6e-c0cb494d3529;acw_tc=276aedc116893045482562737e7f9c70f5f6f059169db2675c8cde81387755;openplatfrom=jackyunweb?

备注:此次的

4)请求体:

请求体内容包括:method、appkey、version、contenttype、bizcontent,通过“API测试工具”的获取的请求参数,截图如下:

2、接口断言

断言内容包括:状态码断言、响应体断言(返回结果中outSkuCode(唯一性));截图如下:

3、Postman工具使用

1)在Postman工具中填写请求4要素并进行断言,截图如下:

2)断言内容:

json断言介绍:

断言内容有3个,分别如下:

4、接口脚本优化

由于货品新增接口中字段:货品编码、货品外部编码、货品规格具有唯一性,每次执行货品新增接口时需要修改这3个字段值,为了解决请求参数不断修改的问题,优化脚本如下:

1)global环境添加变量:

2)pre-requsts script的js脚本实现:

outSkuCode等4个参数参数化数据的规则(来源订单编号规则):前缀(test)+年月日+后缀(编号);

用js脚本实现如下:

3)请求参数引用global变量:

请求体的参数化脚本:

{

"skuImageUrl":"http://wdgjtest.oss-cn-hangzhou.aliyuncs.com/45/341960689798062080.jpg?Expires=4677564907&OSSAccessKeyId=LTAI2P5paDiiYDCJ&Signature=7gKXbqG2QWeG7sUByBk8J9ummno%3D",

"goodsNameEn":"",

"isPeriodManage":0,

"rightGoodsUrl":"http://wdgjtest.oss-cn-hangzhou.aliyuncs.com/45/341960689798062080.jpg?Expires=4677564907&OSSAccessKeyId=LTAI2P5paDiiYDCJ&Signature=7gKXbqG2QWeG7sUByBk8J9ummno%3D",

"isDoorService":0,

"isProxySale":0,

"skuHeight":"",

"shelfLiftUnit":"年",

"goodsName":"{{outskuno}}",

"goodsField8":"货品属性B",

"goodsField9":"货品属性B",

"goodsField10":"货品属性B",

"goodsField4":"+货品属性B",

"goodsField11":"货品属性B",

"goodsField5":"货品属性B",

"goodsField12":"货品属性B",

"goodsField6":"货品属性B",

"goodsField13":"货品属性B",

"goodsField7":"货品属性B",

"goodsField14":"货品属性B",

"goodsField15":"货品属性B",

"mainGoodsUrl":"http://wdgjtest.oss-cn-hangzhou.aliyuncs.com/45/341960689798062080.jpg?Expires=4677564907&OSSAccessKeyId=LTAI2P5paDiiYDCJ&Signature=7gKXbqG2QWeG7sUByBk8J9ummno%3D",

"goodsField16":"货品属性B",

"goodsField17":"货品属性B",

"goodsField18":"货品属性B",

"goodsField19":"货品属性B",

"cateCode":"0101",

"moduleContent":[{

"type":1,

"showOder":"1",

"title":"标题",

"content":"这是描述"

}],

"skuNo":"{{outskuno}}",

"goodsField1":"货品属性B",

"goodsField2":"货品属性B",

"goodsField3":"货品属性B",

"descript":"<p>这是很好的书!</p>+<p><img+src=\"http://jkyun.oss-cn-hangzhou.aliyuncs.com/longterm/45/system/erp/445554288029867136/1204140161368877696.jpg?Expires=4780344693&OSSAccessKeyId=LTAIh08vjrfC7HV0&Signature=Rb2zTo8%2BRXnWUx8uoBmMMJ3pgfs%3D#O1CN01vPRtFX1CP18G9GBqN-101450072.jpg\"+alt=\"\"+/></p>+<p></p>",

"belowGoodsUrl":"http://wdgjtest.oss-cn-hangzhou.aliyuncs.com/45/341960689798062080.jpg?Expires=4677564907&OSSAccessKeyId=LTAI2P5paDiiYDCJ&Signature=7gKXbqG2QWeG7sUByBk8J9ummno%3D",

"ownerCode":"34343",

"isCustomizProduction":0,

"isSyncToItem":"0",

"goodsAlias":"",

"shelfLife":3,

"platCateId":"110201",

"goodsAttr":1,

"isSerialManagement":0,

"skuBarcode":"123fee",

"materialImgUrl":"http://wdgjtest.oss-cn-hangzhou.aliyuncs.com/45/341960689798062080.jpg?Expires=4677564907&OSSAccessKeyId=LTAI2P5paDiiYDCJ&Signature=7gKXbqG2QWeG7sUByBk8J9ummno%3D",

"sellInfo":"商品卖点",

"topGoodsUrl":"http://wdgjtest.oss-cn-hangzhou.aliyuncs.com/45/341960689798062080.jpg?Expires=4677564907&OSSAccessKeyId=LTAI2P5paDiiYDCJ&Signature=7gKXbqG2QWeG7sUByBk8J9ummno%3D",

"skuField29":"A",

"skuField9":"A",

"skuField8":"A",

"skuField25":"A",

"skuField7":"A",

"skuField26":"A",

"skuField6":"A",

"skuField27":"A",

"skuField5":"A",

"skuField28":"A",

"skuField4":"A",

"skuField3":"A",

"skuField2":"A",

"skuField1":"A",

"cateName":"笔记本",

"outSkuCode":"{{outskuno}}",

"skuField30":"A",

"skuField18":"A",

"skuField19":"A",

"brandName":"",

"unitName":"件",

"skuField14":"A",

"skuField15":"A",

"skuField16":"A",

"skuField17":"A",

"isPickupCard":0,

"goodsMemo":"",

"skuWidth":"",

"volume":0,

"skuField21":"A",

"leftGoodsUrl":"http://wdgjtest.oss-cn-hangzhou.aliyuncs.com/45/341960689798062080.jpg?Expires=4677564907&OSSAccessKeyId=LTAI2P5paDiiYDCJ&Signature=7gKXbqG2QWeG7sUByBk8J9ummno%3D",

"skuField22":"A",

"isProsaleProduct":0,

"goodsVideoUrl":"http://wdgjtest.oss-cn-hangzhou.aliyuncs.com/45/341960689798062080.jpg?Expires=4677564907&OSSAccessKeyId=LTAI2P5paDiiYDCJ&Signature=7gKXbqG2QWeG7sUByBk8J9ummno%3D",

"skuField23":"A",

"isProductionMaterials":0,

"skuField24":"A",

"fixPrice":1.20,

"skuWeight":"",

"skuField20":"A",

"goodsField20":"货品属性B",

"isBatchManagement":0,

"goodsField21":"货品属性B",

"goodsField22":"货品属性B",

"goodsField23":"货品属性B",

"goodsField24":"货品属性B",

"goodsField25":"货品属性B",

"costValuationMethod":0,

"goodsField26":"货品属性B",

"goodsField27":"货品属性B",

"goodsField28":"货品属性B",

"goodsField29":"货品属性B",

"warehouseCode":"C0001",

"skuName":"规格1",

"skuField10":"A",

"skuField11":"A",

"mainBarcode":"CODE0001",

"skuField12":"A",

"abcCate":"A类",

"skuField13":"A",

"goodsNo":"{{outskuno}}",

"goodsField30":"货品属性B",

"skuLength":"",

"isPaidService":0

}

4)断言内容参数化

断言内容所在路径:jsondata.result.data.apiResponse.result

断言脚本的参数化:

5、接口测试结果

1)Cookie过期的执行结果:

2)更新最新cookie后,执行成功:

内容4:货品查询接口功能测试

货品查询接口介绍

货品查询接口实战

1、货品查询接口4要素

1)请求方法:post

2)请求地址:

https://open.jackyun.com/open-platform/developer/intercept/testtool/buildparamandrequest

3)请求头:

Content-Type:application/x-www-form-urlencoded;charset=UTF-8

Cookie:53revisit=1680485326445;_ati=688404030667;Hm_lvt_4293e6f16d3e0252d48cf7a1252f995f=1687759229;Qs_lvt_352880=1680485326%2C1683769042%2C1687759230;Qs_pv_352880=902333099737909600%2C3189451156430100000%2C3125342331411176400%2C2032507965245106700%2C3752838942850185700;jkusername=88888;yhusername=visitor;SESSION=7a4b3cf3-93ae-4d07-8f6e-c0cb494d3529;acw_tc=276aede416893201598032765e502850bfa2405f4607b11856f9ed57a765be;openplatfrom=jackyunweb?

4)请求体

解码后请求体为:

appkey=28773818&method=erp.storage.goodslist&contenttype=JSON&version=v1.0&pageIndex=0&pageSize=1&startDate=&skuName=&isBlockup=&startDateModifiedGoods=&goodsNo=test&endDateModifiedSku=&endDate=&cateName=&abcCate=&isPackageGood=&skuIsBlockup=&skuBarcode=&goodsName=&assistBarcode=&endDateModifiedGoods=&startDateModifiedSku=&bizcontent={"pageIndex":"0","pageSize":"1","startDate":"","skuName":"","isBlockup":"","startDateModifiedGoods":"","goodsNo":"test","endDateModifiedSku":"","endDate":"","cateName":"","abcCate":"","isPackageGood":"","skuIsBlockup":"","skuBarcode":"","goodsName":"","assistBarcode":"","endDateModifiedGoods":"","startDateModifiedSku":""}?

2、货品查询接口断言

1)断言内容包括:

1、状态码断言;

2、接口响应结果断言:

根据货品编码查询结果有且只能有1条数据,故,断言内容为:total为1;

2)断言脚本分析:

(1)响应体断言内容的分析

响应体断言内容所在路径:jsondata.result.data.apiResponse.result。

3)断言脚本:

////获取global的值

//var sku01=pm.globals.get("outskuno");

////状态码断言

pm.test("状态码断言",function(){

pm.response.to.have.status(200);

});

//json断言,断言信息的参数化

//实际项目中,断言内容:\"total\":1

pm.test("json断言",function(){

var jsonData=pm.response.json();

pm.expect(jsonData.result.data.apiResponse.result).to.include("\"total\":1");

});?

3、货品查询接口执行结果

1)cookie过期执行结果:

2)更新最新的cookie后的执行结果:

内容5:货品新增接口与货品查询接口关联

货品查询接口引用货品新增接口的参数

请求体参数化为(引用global参数):

appkey=28773818&method=erp.storage.goodslist&contenttype=JSON&version=v1.0&pageIndex=0&pageSize=1&startDate=&skuName=&isBlockup=&startDateModifiedGoods=&goodsNo={{outskuno}}&endDateModifiedSku=&endDate=&cateName=&abcCate=&isPackageGood=&skuIsBlockup=&skuBarcode=&goodsName=&assistBarcode=&endDateModifiedGoods=&startDateModifiedSku=&bizcontent={"pageIndex":"0","pageSize":"1","startDate":"","skuName":"","isBlockup":"","startDateModifiedGoods":"","goodsNo":"{{outskuno}}","endDateModifiedSku":"","endDate":"","cateName":"","abcCate":"","isPackageGood":"","skuIsBlockup":"","skuBarcode":"","goodsName":"","assistBarcode":"","endDateModifiedGoods":"","startDateModifiedSku":""}

断言内容

断言脚本:

////获取global的值

//var sku01=pm.globals.get("outskuno");

////状态码断言

pm.test("状态码断言",function(){

pm.response.to.have.status(200);

});

//json断言,断言信息的参数化

//实际项目中,断言内容:\"total\":1

pm.test("json断言",function(){

var jsonData=pm.response.json();

pm.expect(jsonData.result.data.apiResponse.result).to.include("\"total\":1");

});

接口执行结果

1批量执行器执行接口测试

使用runner实现两个货品新增接口和货品查询接口同时执行,截图如下:

1)Runner执行界面:

2)runner执行结果

2无人值守的接口测试--持续集成

吉客云地址:https://open.jackyun.com/developer/apidocinfo.html?from=self&value=null&id=erp-baseinfo.flag.getflagid&name=true

newman的介绍

1作用:newman:中介作用,执行Postman脚本并输出报告;

2定义:newman是基于nodejs开发的一款工具,意思新的男人,是指在某一领域或某个方面,技高一筹;

3操作命令:Newman run参数操作;

Jenkins集成

准备工作:

1)Postman脚本

2)newman脚本

3)Jenkins环境

Postman脚本准备

newman脚本

执行成功的newman脚本,如下:

newman run'/home/Desktop/****电商erp.postman_collection.json'-g'/home/Desktop/MyWorkspace.postman_globals.json'?

Jenkins运行Postman脚本的步骤

Jenkins地址:http://192.168.**.**:8888

Jenkins功能介绍:

1 build:填写newman的命令:

2 build trigger:填写触发周期的公式;

Jenkins执行结果

整体执行结果:

某次具体的输出结果:

企业项目中对于触发器构建常用场景介绍

1触发器触发条件介绍:

触发器触发条件公式:由5颗星组成

*****

分别代表:分钟(0-59)小时(0-23)日期(1-31)月份(1-12)星期(0-6)

2企业项目中常用场景介绍

场景1:接口脚本部分测试通过,部分还在进行,回归测试脚本执行频率高

间隔2/5分钟执行一次:

H/5****

场景2:接口脚本基本稳定,开发修改bug,回归测试脚本执行频率稍微低

每天下午18定时构建一次

H 18***

场景3:上一个版本的接口脚本基本稳定,开发做新需求,回归测试脚本执行频率低

每周1/5构建一次

H H**5

备注:H表示hash值可以理解随机值;

最后:

添加微信:atstudy-js  或者扫描下方二维码,备注“博客”邀请你进入

TAG:

 

评分:0

我来说两句