Postman:在不同接口之间传递数据——Pre-request Script(四)
postman提供了Pre-request Script和Tests,在这两个标签中可以编写js代码辅助测试。先前博文已经介绍了Tests标签如何添加断言以及postman中的环境变量,该篇博文主要介绍如何在Pre-request Script和Tests标签中添加合适的脚本提取我们需要的数据。
场景一:假设需要测试两个接口,接口A负责生成任务信息,且返回一个任务号;接口B负责删除任务,且就是根据任务号来删除,并且删除后该任务号便无法再次使用。
为解决以上场景可以考虑每次在测试接口B之前都会先调用接口A来生成一条任务号,然后把数据传给B,这样即使更换数据库也可能灵活进行测试,不需要再提前准备数据。
1.提取接口A生成的任务号。
首先该请求的响应内容如下,为响应为json格式的字符串。
在Tests标签中编写如下脚本:
var JsonData = JSON.parse(responseBody); //定义一个变量,并且将请求返回的内容赋给该变量
pm.environment.set("task_id", JsonData.task_id); //定义一个环境变量task_id,且把响应内容中的task_id值赋值给该变量
console.log(JsonData.task_id); //利用postman的console.log()来查看环境变量的值
postman的输出控制台,可以在这里查看脚本运行情况,进行调试。发送这个请求,可以在console中查看运行情况。
2.在接口B中调用环境变量task_id。
如上,只要每次在执行接口B前先执行接口A则不必需要担心地址流水号会失效,达到任务号参数化的目的。
场景二:假设需要测试三个接口,接口A负责生成任务信息,且返回一个任务号;接口B负责删除任务,且就是根据任务号来删除,并且删除后该任务号便无法再次使用;接口C负责查询任务信息,且也是根据任务号来进行查询。
为解决以上场景,我们可以在执行接口B和接口C之前,各自先调用一下接口A,生成任务号仅供自己使用。
1.切换到Pre-request Script标签,在右侧代码片段中可以找到一个Send a request,这是postman提供的发送请求的代码片段。
postman封装的sendRequest()方法默认发送的是get请求。若需要发送post请求需要修改如下:
var data ={//定义接口A的body};
const echoPostRequest = {
url:'http://XXX.XXX.XXX', //请求url
method:'POST', //请求方法的POST
//header:'',定制请求头信息(要传json格式的数据这里定义请求头为Content-Type:application/json)
body:{ //post请求的body参数,有则传,无则不用传
mode:'raw',
raw:JSON.stringify(data) //如果有body参数的话,把data传进来,JSON.stringify() 方法是将一个JavaScript值(对象或者数组)转换为一个JSON字符串,若参数类型是application/x-www-form-urlencode,传值例如:raw: 'id=123&code=28'
}
};
pm.sendRequest(echoPostRequest, function (err, response) {
console.log(response.json());
pm.environment.set("select_id", response.json().task_id); //定义一个环境变量del_id,并将前置请求响应中的task_id赋给它
console.log(response.json().task_id); //打印前置请求生成的任务号
});
发送这个请求,可以在console中查看运行情况:
2.在接口C中调用环境变量select_id。
上面介绍的即是经常讲到的参数化过程,掌握了这些技巧,基本上便可以用postman很好地完成接口测试。
上一篇: postman自动化接口测试~
下一篇: 谈 postman自动化接口测试