一、postman强大的脚本功能
Postman包含一个基于Node.js的强大功能,可以让您在发出请前后添加动态行为。这样,您就可以编写测试套件、构建可以包含动态参数的请求、在请求之间传递数据等等。
Pre-request:请求前进行相应参数的设置(或进行前置数据处理)
Test:对请求后的Response结果进行断言(主要是响应status、响应Header及响应Body)
二、脚本的执行顺序
在Postman中,单个请求的脚本执行顺序如下:
1、与请求关联的预请求脚本(Pre-request Script)将在发送请求之前执行
2、发送请求
3、发送请求后,将执行与请求关联的测试(test)脚本
三、 pre-requests的使用
在请求发送之前可以进行的操作,我们以下面两个小案例说明:
1、可以为请求获取请求标头中的时间戳,使用从函数返回的值设置环境变量(也可以直接对环境变量进行获取及修改)
然后,您可以 通过Postman的header标签中添加 timestampHeader变量{{timestampHeader}},发送请求后,将执行您的请求前脚本,并发送timestampHeader的值代替{{timestampHeader}}。
《2021测试开发各大机构最新全套教程》:https://pan.baidu.com/s/17jkyGn-Wm-zC6QQLkWjrsw
提取码:o94n
2、在发送请求之前先发送另外一个请求
案例一:以信互协同系统为例
前面文章中已经使用过,分别做了登录接口及文件上传接口的请求,文件上传接口必须要使用登录的cookies信息才能实现。
参见前面两篇文章:
捉虫布道人:【Postman】4 Postman发送post请求-x-www-from-urlencoded使用zhuanlan.zhihu.com捉虫布道人:【Postman】5 Postman 发送post请求-form data格式(文件上传)zhuanlan.zhihu.com
此处我们就可以在上传文件接口请求的pre-request script中添加脚本,实现发送请求的功能,该登录请求的content-type为x-www-form-urlencoded,具体实现见下图:
var paramLogin = {
"url":"http://10.9.21.207:8088/xinhu/index.php?a=check&m=login&d=&ajaxbool=true&rnd=81328",
"method":"POST",
"body":{
"mode":"urlencoded",
"urlencoded":"rempass=0&jmpass=false&device=1620374519746<ype=0&adminuser=YWRtaW4:&adminpass=YTg5ODM5ODM:&yanzm="
}
}
//一个HTTP请求的报文已经打包好了
//现在要通过sendRequest方法把请求发出去、并获得返回的响应结果
pm.sendRequest(paramLogin, function (err, response) {
console.log(response.json());
});
案例二:也可以发送请求头字段content-type为application/json的HTTP请求。
可以参考这篇文章,实现请求数据为json格式的实现。
捉虫布道人:【Postman】6 Postman 发送post请求-Json格式zhuanlan.zhihu.com
var paraZhu = {
url:"https://b.zhulogic.com/designer_api/account/login_quick",
method:"POST",
header:"Content-Type:application/json",
body:{
mode:"raw",
raw:JSON.stringify({
"channel": "zhulogic",
"code": "1233456",
"key": "980400ef-29fb-4a73-9260-63ad20cd5c8b",
"messageType": 3,
"phone": "",
"registration_type": 1,
"unionid": ""
}
)
}
}
//一个HTTP请求的报文已经打包好了
//现在要通过sendRequest方法把请求发出去、并获得返回的响应结果
pm.sendRequest(paraZhu, function (err, response) {
console.log(response.json());
});
此处仅仅抛砖引玉,pre-request script是一个很强大的功能,大家可以慢慢挖掘,但是作为一个测试工程师,一般使用前面讲到的两种场景就可以啦。