接口-测试用例、断言

1、接口测试用例文档:测试接口、用例标题、请求方式、预置条件、操作步骤、输入数据、预期结果(状态、业务)、优先级、用例说明、测试结果、结果说明

2、接口测试工具、postman介绍

接口测试工具:postman、jmeter、soapui(测试webservice协议)、apipost、fiddler、charles

3、postman:是一款功能强大的网页调试与发送HTTP请求的谷歌插件,专为接口而生

newman专为postman而生

postman界面:

菜单栏

工具栏:

新建请求、收藏夹、环境、API文档、模拟接口服务、监视器、接口,导入接口,运行所有的接口

工作区域、团队协作,登录

请求历史、项目收藏夹(包)、APIs新出来的接口

接口请求区:点击“+”号,生成一个请求,环境

请求方式、请求地址、发送请求、保存请求

请求参数、鉴权、请求头、发送post请求时的选项

没有参数、键值对、键值对、json格式数据、二进制文件

下面是响应

4、今天学习postman的使用,新建一个收藏夹,然后在下面建一个文件夹,这个文件夹是用于对用例进行分类的,然后新建一个get请求,get是以?方式进行传参,多个请求间用&进行分割,参数会自动填写到params。

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

appid:wx6b11b3efd1cdc290 密钥:106a9c6157c4db5f6029918738f9529d

 发送

把请求加到收藏夹

5、使用get请求获得access_token接口

6.创建标签

https://api.weixin.qq.com/cgi-bin/tags/create?access_token=43_SbG3j89IzNFB-jzrCsn7mivWGIZ6KYU6K1Zv7etKawoGkjLYrSQFX32KqCnGwy2apD7E1ld6a5ImTgHeXAwByZ3_BMUo-ZguARrvVg93S6bBT4iGZaQhKNpPRjgrdzeMGf3Qwrdr7hw83Y8IKHNhAIAPMS

7.获取公众号已创建的标签

8.编辑标签

9.删除标签

10、.postman内置的动态参数

企业当中做接口的时候会出现接口不能把参数写死

时间戳{{$timestamp}}

生成0-1000随机的整数{{$randomint}}

生成一个GUID的字符串{{$guid}}很长的一个字符串

11.postman环境变量和全局变量

开发、测试、线上、预发布环境

环境、globals是全局变量,不是局部变量

12.接口关联

JSON提取器

//1.加上.access_token获取token的值

var jsValue = JSON.parse(responseBody)

console.log(jsValue.access_token)

//2.把提取到的值保存到全局变量

pm.globals.set("access_token", jsValue.access_token);

设置环境

断言

console.log(responseBody);

//打印返回的字符串

设置变量{{ip}}

var jsValue = JSON.parse(responseBody)

console.log(jsValue)

//把返回的字符串转换为json格式并打印,发现结果是键值对的形式

//1.加上.access_token获取token的值

var jsValue = JSON.parse(responseBody)

console.log(jsValue.access_token)

//2.把提取到的值保存到全局变量 set a global variable设置一个全局变量

//pm.globals.set("variable_key", "variable_value");

运行后就多了一个全局变量

之后需要使用到token的接口全部都可以直接取全局变量

需要优化id,实现闭环关联

//使用正则表达式,match表示匹配,.+?表示匹配的是前面和后面中间的这个值

var flag_id = responseBody.match(new RegExp('"id":(.+?),'))[1]

console.log(flag_id)

正则表达式提取器

//1.使用正则表达式,match表示匹配,.+?表示匹配的是前面和后面中间的这个值

var flag_id = responseBody.match(new RegExp('"id":(.+?),'))[1]

console.log(flag_id)

//2.得到id后,把它设置到全局变量里面

pm.globals.set("flag_id", flag_id);

Cookie提取器

9.环境、全局相关

1)获取一个环境变量的值

2)获得一个全局变量的值

3)获取一个变量

4)设置一个环境变量

5)设置一个全局变量

6)清空一个环境变量

7)清空一个全局变量

8)发送一个请求

//八种断言方式,八大元素定位

//1.断言返回码为200

pm.test("Status code is 200", function () {

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

});

//2.断言返回的结果中包含有一个指定的字符串

pm.test("Body matches string", function () {

    pm.expect(pm.response.text()).to.include("tags");

});

//3.对返回的结果做json字段检查

pm.test("Your test name", function () {

    var jsonData = pm.response.json();

    pm.expect(jsonData.tags[0].id).to.eql(2);

});

//4.断言返回的结果等于一个字符串

pm.test("Body is correct", function () {

    pm.response.to.have.body("response_body_string");

});

//5.断言响应头中包含有指定的响应头-检查响应头

pm.test("Content-Type is present", function () {

    pm.response.to.have.header("Content-Type");

});

//6.断言接口请求时间少于200毫秒

pm.test("Response time is less than 200ms", function () {

    pm.expect(pm.response.responseTime).to.be.below(230);

});

//7.断言一个post请求返回的状态码是否在指定范围

pm.test("Successful POST request", function () {

    pm.expect(pm.response.code).to.be.oneOf([200, 202]);

});

//8.断言返回的状态码信息里包含指定的字符串

pm.test("Status code name has string", function () {

    pm.response.to.have.status("OK");

});

13、//1.断言返回码为200  状态断言

pm.test("Status code is 200", function () {

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

});

//2.断言返回的结果中包含有一个指定的字符串  业务断言

pm.test("Body matches string", function () {

    pm.expect(pm.response.text()).to.include("tags");

});

//3.对返回的结果做json字段检查 业务断言

pm.test("Your test name", function () {

    var jsonData = pm.response.json();

    pm.expect(jsonData.tags[0].id).to.eql(2);

});

//4.断言返回的结果等于一个字符串 业务断言

pm.test("Body is correct", function () {

    pm.response.to.have.body("response_body_string");

});

//5.断言响应头中包含有指定的响应头-检查响应头

pm.test("Content-Type is present", function () {

    pm.response.to.have.header("Content-Type");

});

//6.断言接口请求时间少于200毫秒 性能断言

pm.test("Response time is less than 200ms", function () {

    pm.expect(pm.response.responseTime).to.be.below(230);

});

//7.断言一个post请求返回的状态码是否在指定范围

pm.test("Successful POST request", function () {

    pm.expect(pm.response.code).to.be.oneOf([200, 202]);

});

//8.断言返回的状态码信息里包含指定的字符串

pm.test("Status code name has string", function () {

    pm.response.to.have.status("OK");

});

//1.加上.access_token获取token的值

var jsValue = JSON.parse(responseBody)

console.log(jsValue.access_token)

//2.把提取到的值保存到全局变量

pm.globals.set("access_token", jsValue.access_token);

//----------------

//状态断言

pm.test("Status code is 200", function () {

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

});

//业务断言

pm.test("Body matches string", function () {

    pm.expect(pm.response.text()).to.include("access_token");

});

//1.使用正则表达式,match表示匹配,.+?表示匹配的是前面和后面中间的这个值

var flag_id = responseBody.match(new RegExp('"id":(.+?),'))[1]

console.log(flag_id)

//2.得到id后,把它设置到全局变量里面

pm.globals.set("flag_id", flag_id);

//----------------

//状态断言

pm.test("Status code is 200", function () {

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

});

//业务断言

pm.test("Body matches string", function () {

    pm.expect(pm.response.text()).to.include("id");

});

//----------------

//状态断言

pm.test("Status code is 200", function () {

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

});

//业务断言

pm.test("Your test name", function () {

    var jsonData = pm.response.json();

    pm.expect(jsonData.errcode).to.eql(0);

});

//----------------

//状态断言

pm.test("Status code is 200", function () {

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

});

//业务断言

pm.test("Your test name", function () {

    var jsonData = pm.response.json();

    pm.expect(jsonData.errcode).to.eql(0);

});

//获取当前时间戳

var times =Date.now()

console.log(times)

pm.globals.set("times", times);

//使用自己生成的时间戳变量

{

    "tag": {

        "name": "关东人VIP{{times}}"

    }

}

精确断言-前置脚本中定义一个全局变量

//获取当前时间戳

var times =Date.now()

console.log(times)

pm.globals.set("times", times);

参考:

https://www.bilibili.com/video/BV17p4y1B77x?from=search&seid=16095959831877891857

你可能感兴趣的:(接口-测试用例、断言)