PostMan执行接口测试

一、请求页签

        Params:get请求传参

        Authorization:鉴权

        Headers:请求头

        Body:post请求传参

                        form-data:既可以传递键值对参数也可以传文件

                        x-www-form-urlencoded:只可以传递键值对参数

                        raw:json,text、xml、html、Javascript

                        binary:将文件以二进制的方式进行传参

        Scripts:请求前后

                        Pre-request:请求之前的脚本

                        Pre-response:请求之后的断言

        Cookies:管理Cookies信息


二、响应页签

        Body:接口返回的数据

                        Pretty:以json,text、xml、html等不同格式查看返回的数据

                        Raw:以文本的方式查看返回的数据

                        Priview:以网页的方式查看返回的数据

                        Visualize:

        Cookies:响应的Cookies信息

        Headers:响应头

        Test-Results:断言的结果


三、Postman的环境变量以及全局变量

        环境变量:接口域名或IP地址

                        场景:频繁切换环境需要改每个接口的环境,非常麻烦;而定义环境变量,在每次切换环境时只需要改一下环境变量,可省去大量无脑工作。

        全局变量:作用域为整个postman的变量,可在任何接口里面访问

                        场景:在测试接口时需要变动测试用户身份;在测试过程中用户身份的value使用全局变量,则在改变用户身份的时候,直接更改全局变量的value即可。

        获取环境变量或全局变量的值通过:{ { 变量名 } }


四、接口关联

        1、使用json提取器实现接口关联        

第一个接口:
console.log(responseBody);
//使用json提取器提取access_token的值
//把返回的字符串格式的数据转换成对象的形式
var result = JSON.parse(responseBody);
console.log(result.access_token);
//把access_token设置为全局变量
pm.globals.set("access_token", result.access_token);

第二个接口:
{{access_token}}

   2、使用正则表达式提取器实现接口关联 

第一个接口:
//使用正则表达式提取器实现接口关联;
var result=responseBody.match(new RegExp('"access_token":"(.*?)"'));
console.log(result[1]);
//设置为全局变量
pm.globals.set("access_token", result[1]);
第二个接口:
{{access_token}}

//match 匹配;
//RegExp() 正则表达式;

 五、Postman内置动态参数以及自定义动态参数

        1、Postman内置动态参数

                { { $ timestamp } } :生成当前时间的时间戳

                { { $ randomint } } :生成0-1000之间的随机数

                { { $ guid } } :          生成随机GUID字符串

                局限性:并不是万能的,无法做断言

        2、自定义动态参数

Pre-request Script:
//手动获得时间戳
var times=Date.now();
//设置为全局变量
pm.globals.set("times", times);

使用时使用: {{times}}

六、测试其他接口

七、Postman断言

        1、常规断言

        Status code:Code is 200  :检查返回的状态码是否为200

        Response body:Contains string  :检查响应中包括指定的字符串

        Response body: json value check  :检查响应中其他json的值

        Response body:is equal to a string  :检查响应等于一个字符串

        Response headers: Content-Type header check  :检查是否包含响应头Content-Type

        Response time is less than 200ms  :检查请求耗时小于200ms

        Response body:Convert XML body to JSON Object  :

        Status code:Suessful POST request  :

         Status code:Code name has string  :

Status code:Code is 200  :检查返回的状态码是否为200
//状态断言(一般只有一个)
pm.test("检查返回状态码为200", function () {
    pm.response.to.have.status(200);
});

Response body:Contains string  :检查响应中包括指定的字符串
//业务断言(可有多个)
pm.test("检查是否含字符串errcode与errmsg", function () {
    pm.expect(pm.response.text()).to.include('{"errcode":0,"errmsg":"ok"}');
});

Response body: json value check  :检查响应中其他json的值
pm.test("检查errcode为0", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.errcode).to.eql(0);
});

Response body:is equal to a string  :检查响应等于一个字符串
pm.test("检查是否含字符串errcode与errmsg", function () {
    pm.response.to.have.body('{"errcode":0,"errmsg":"ok"}');
});

Response headers: Content-Type header check  :检查是否包含响应头Content-Type
pm.test("检查响应头中是否含有Content-Type响应头", function () {
    pm.response.to.have.header("Content-Type");
});

Response time is less than 200ms  :检查请求耗时小于200ms
pm.test("检查接口响应时间少于200ms", function () {
    pm.expect(pm.response.responseTime).to.be.below(200);
});

        2、在断言中获取自定义动态参数(全局变量)

1、
    pm.globals.get("times")
2、
    globals["times"]
3、
    globals.times

        3、全局断言

                一般为状态断言,在整个项目中编辑设置断言

八、Postman数据驱动-使用csv与json文件(以获取接口统一鉴权码token接口为例)

        1、设置参数

                在Params中将参数值设置为:{{xxx}}

        2、分析可能存在错误境况并编写文件

                可能存在某一参数为空

CSV文件:
grant_type,appid,secret,assert_value
client_credential,wx76a49d374a490be7,3ab344597f5c85214de178aefd238659,access_token
,wx76a49d374a490be7,3ab344597f5c85214de178aefd238659,40002
client_credential,,3ab344597f5c85214de178aefd238659,41002
client_credential,wx76a49d374a490be7,,41004

JSON文件:
[
	{"grant_type":"client_credential","appid":"wx76a49d374a490be7","secret":"3ab344597f5c85214de178aefd238659","assert_value":"access_token"},
	{"grant_type":"","appid":"wx76a49d374a490be7","secret":"3ab344597f5c85214de178aefd238659","assert_value":"40002"},
	{"grant_type":"client_credential","appid":"","secret":"3ab344597f5c85214de178aefd238659","assert_value":"41002"},
	{"grant_type":"client_credential","appid":"wx76a49d374a490be7","secret":"","assert_value":"41004"}
]

        3、选择文件运行

        4、查看报告

九、必须带请求头接口

        1、常见请求头

                Host:请求主机地址

                Connection:连接方式

                Referer:来源

                Accept:客户端收到的数据格式

                X-Requested-With:异步请求

                User-Agent:客户端用户类型

                Cookie:Cookie信息

                Content-Type:请求内容格式

十、Postman之Mock Server服务器

        Mock Server:模拟服务器,一般用于后端接口还未开发完毕,前端业务需要调用后端接口。

        示例:https://753d4ada-a6c3-4bbd-bf4e-6c3f013e4c84.mock.pstmn.io

                

十一、Postman之Cookie鉴权与Token鉴权

        1、Cookie鉴权

                定义:cookie是在服务器产生的存储在客户端的一小段文本信息,格式为(key=value)即键值对。

                原理:当客户第一次访问服务器时,服务器会产生cookie并通过相应头的方式在set-cookie传输到客户端。而客户端从第2到第N次访问都会带上这些cookie。

                分类:Session(会话级):保存内容,当浏览器关闭就会丢失。
                           日期型(持久化):保存硬盘,只有当失效时间到了才会被清除。

2、token鉴权

        原理:当一个用户登录之后,就给他发送一个token令牌,下一次用户再次请求的时候,只要带上这个令牌。token可以通过抓包抓取(http)。token保存在文件中或是保存在数据库中。

        分类:access_token:有时间期限,限制在15分钟
                   refresh_token:一般15天

        加密:对称加密(des、aes)、 双钥加密(RSA)、只加密不解密(md5、SHA)

3、以“phpwind论坛”为例

        在Postman中新建phpwind论坛项目;

        创建“访问phpwind论坛首页接口”,发送查看返回的Cookie:

请求方式:GET
URL:http://47.107.116.139/phpwind/

        将其中csrf_token使用正则表达式提取并设置为全局变量:

var result=responseBody.match(new RegExp('name="csrf_token" value="(.*?)"'));
//console.log(result);
pm.globals.set("csrf_token", result[1]);

        创建“登录接口”,需带上请求头:

请求方式:POST
URL:http://47.107.116.139/phpwind/index.php?m=u&c=login&a=dorun

//Header请求头:
Accept:application/json,text/javascript,/;q=0.01
X-Requested-With:XMLHttpRequest

//Body输入参数:
username:(具体用户名)
password:(具体密码)
csrf_token:{{csrf_token}}//设置为全局变量
backurl:http://47.107.116.139/phpwind/
invite://邀请,可不填

//具体用户名与密码可通过网址注册:http://47.107.116.139/phpwind/

先后调用“访问phpwind论坛首页接口”与“登录接口”发送后查看控制台,“state”为“success”即调用成功:

接口测试中的问题

问题1       多种环境:开发、测试、生成环境

                解决:环境变量与全局变量

问题2       接口关联:需要手动关联

                解决:使用json提取器;使用正则表达式提取器

问题3       参数需要手动修改

                解决:内置动态参数;自定义动态参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值