- 在之前的文章中介绍过postman中的两个脚本——pre-request script或test script。
(pre-request script详细介绍、Test script详细介绍)- 在这两个位置不仅仅是可以对请求参数或是返回结果进行处理,甚至可以在这两个位置请求接口,并使用返回值。
- 这是个非常好用的功能。比如请求购买前需要先通过登录接口获取token,这种情况下可以直接在pre-request script请求登录接口,并将返回值中的token设置为接口请求参数
文章目录
一、pm.sendRequest() 方法
- postman的脚本中,使用pm.sendRequest()方法进行接口请求,格式如下:
pm.sendRequest("https://postman-echo.com/get", function (err, response) { console.log(response.json()); });
- pm.sendRequest() 总共传入两个参数:
- 第一个是接口请求参数,可以直接是URL(这种情况默认发送get请求),也可以使用JSON格式提供完整的请求配置,包括标头、方法、正文等
- 第二个参数是接口返回结果,可以在控制台打印出需要的数据,也可以在此对返回值进行处理。
- pm.sendRequest() 总共传入两个参数:
- 发送请求之后,脚本内的请求也会在console中打印,颜色为稍浅的灰色。
(之间专栏也有介绍过控制台,文章地址:console控制台)
- 与正常的接口请求的日志放在一起可以看到明显的颜色区分
二、在脚本中进行GET请求
- 如果只需要使用到URL进行get请求,可以直接使用填入URL,可以直接使用上述的示例
- 将"https://postman-echo.com/get" 替换为需要请求的接口URL即可:
pm.sendRequest("https://postman-echo.com/get", function (err, response) { console.log(response.json()); });
- 如果需要用的header,则可以将请求参数填入json,如下:
- 定义一个const变量,按格式填入参数
const getRequest = { url: 'https://postman-echo.com/get', method: 'GET', header: { 'Content-Type': 'application/json', 'X-Foo': 'bar' }, };
- 再将参数代入pm.sendRequest() 方法中,完整代码:
const getRequest = { url: 'https://postman-echo.com/get', method: 'GET', header: { 'Content-Type': 'application/json', 'X-Foo': 'bar' }, }; pm.sendRequest(getRequest, function (err, response){ console.log(response.json()); });
- 发送请求后可以从console中看到脚本中的请求带有getRequest 变量中设置的请求头。
三、在脚本中进行POST请求
- POST请求与GET相比更复杂一些。不仅需要传body,body的模式也需要设置
1. body为raw模式
- 同样也是将参数填入const变量中
- body中设置 mode设置为raw,并且raw参数需要使用字符串上传
const postRequest = {
url: 'https://postman-echo.com/post',
method: 'POST',
header: {
'Content-Type': 'application/json',
'X-Foo': 'bar'
},
body: {
mode: 'raw',
raw: JSON.stringify({
key: 'this is json' })
}
};
pm.sendRequest(postRequest, function (err, response){
console.log(response.json());
});
- 请求之后可以从console中看到,脚本中发送了post请求,并带有postRequest 变量中设置的body
2. body为x-www-form-urlencoded模式
- body中设置 mode设置为“urlencoded”,并且参数需要以urlencoded格式上传
const postRequest = { url: 'https://postman-echo.com/post', method: 'POST', header: "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", body: { mode: 'urlencoded', urlencoded: "key=this is key&key2=this is key2" } }; pm.sendRequest(postRequest, function (err, response) { console.log(response.json()); })
- 点击发送接口请求
- 从console中查看结果,可以看到在当前接口请求之前,运行pre-request script时发送了post请求,并带有postRequest 变量中设置的body
3. body为form-data模式
- body中设置 mode设置为“formdata”
- 并且formdata参数的格式需要以如下格式填写:
[{ key: "key1",value: "value1"},{ key: "key2",value: "value2"}]
- 完整代码如下:
const postRequest = { url: 'https://postman-echo.com/post', method: 'POST', header: "Content-Type: multipart/form-data", body: { mode: 'formdata', formdata: [{ key: "key1",value: "value1"},{ key: "key2",value: "value2"}] } }; pm.sendRequest(postRequest, function (err, response) { console.log(response.json()); })
- 发送接口后,从console中查看结果,脚本中请求的参数使用了代码里设置的变量
4. body为xml模式
- body中设置 mode设置为“raw”,并且raw参数内上传xml的代码,但需要转为字符串形式。
- 完整代码如下:
const postRequest = { url: 'https://postman-echo.com/post', method: 'POST', header: "Content-Type: application/xml", body: { mode: 'raw', raw: '<xml>value</xml>' } }; pm.sendRequest(postRequest, function (err, response) { console.log(response.json()); })
- 发送接口之后,同样可以从console中查看结果
四、将脚本中接口返回值设置为变量
- 文章的上半部分都在介绍如何在脚本中发送请求
- 现在来介绍,请求结果返回之后如何使用
- 在专栏之前的文章中介绍过postman中的变量,变量配合脚本使用,可以实现接口之间的参数传递
(postman中的变量-详细介绍) - 这里通过参数传递来实现脚本中请求接口的运用
- 在之前的例子中,脚本中请求接口只有,只是单纯的将返回值打印在console控制台:
const postRequest = { url: 'https://postman-echo.com/post', method: 'POST', header: "Content-Type: multipart/form-data", body: { mode: 'formdata', formdata: [{ key: "key",value: "test_value"}] } }; pm.sendRequest(postRequest, function (err, response) { console.log(response.json()); // 将返回值打印在console控制台 })
- 可以将接口返回值设置为全局变量或是环境变量,然后在接口请求中引用变量。
- 以创建全局变量举例,使用pm.globals.set(“variable_key”, “variable_value”)方法创建全局变量。
- 修改脚本代码如下:
const postRequest = { url: 'https://postman-echo.com/post', method: 'POST', header: "Content-Type: multipart/form-data", body: { mode: 'formdata', formdata: [{ key: "key",value: "test_value"}] } }; pm.sendRequest(postRequest, function (err, response) { console.log(response.json()); pm.globals.set("test", response.json()["form"]["key"]); })
- 修改点:在接口请求之后,将请求值设置为一个全局变量,变量的key为“test”
pm.globals.set("test", response.json()["form"]["key"]);
- 修改点:在接口请求之后,将请求值设置为一个全局变量,变量的key为“test”
- 请求头中引用变量“test”
- 发送接口
- 因为脚本写在pre-request script标签页下,所以脚本中的接口会先请求
- 根据脚本中的返回值,“response.json()[“form”][“key”]”最后等于"test_value"
- 之后,发起当前的接口请求
- 可以看到请求头中的“test”参数的值为"test_value",证明脚本运行成功了
附录:postman系列文章目录
—————————————————————————————————
postman系列文章内所使用的示例文件已经上传到了本人运营公众号【软件测试必备技能】
有需要可点击文章下发二维码,前往领取~