Postman高级技巧:Pre-Request-Script & Tests-Script

概述

身为一个接口自动化测试工具,具备在运行中的动态行为不足为奇,Postman集成了一个强大的,基于NodeJS的Script引擎,利用它可以为请求以及响应添加一些动态的行为:

1)在发送请求之前,编写Pre-Request-Script,为请求参数进行加密处理、参数化等。

2)接收到请求响应后,编写Tests-Script,制定响应断言、处理返回的数据等。

大致的流程如下图:
Postman高级技巧:Pre-Request-Script & Tests-Script

实战

现有两个接口,分别为获取Token和获取用户信息,获取Token接口参数需要计算Sign签名,该接口的返回值将成为获取用户信息接口的参数。

环境变量

为了方便的在测试环境以及开发环境中无缝切换,将相关的信息配置为两套环境变量

Postman高级技巧:Pre-Request-Script & Tests-Script

Postman高级技巧:Pre-Request-Script & Tests-Script

OpenAccountApi.getUserToken

接口地址http://{{host}}/api2/OpenAccountApi.getUserToken
请求方式POST
请求参数?_app_key=[]&_time=[]&_sign=[]
请求正文{"account":"账号信息"}
响应正文{"result": { "token": "","user_id": ?},"status": 0}

按照接口约定,配置相关的Postman请求:
Postman高级技巧:Pre-Request-Script & Tests-Script

Postman高级技巧:Pre-Request-Script & Tests-Script
上图上中的{{_time}}、{{_sign}}变量目前还取不到值,因为在环境变量中还没有相关定义,
现在开始编写相关的Pre-Request-Script脚本:
Postman高级技巧:Pre-Request-Script & Tests-Script

// 前置处理器:计算请求签名
var _app_secret = pm.environment.get("provider_app_secret");
var _time = (new Date()).valueOf();
var _pre_sign = 'requestBody=' + pm.request.body.raw + ',time=' + _time + ',appSecret=' + _app_secret;
var _sign = CryptoJS.MD5(_pre_sign).toString();
pm.environment.set("_time", _time);
pm.environment.set("_sign", _sign);

console.log('[Pre]OpenAccountApi.getUserToken _pre_sign='+_pre_sign+',_sign=' + _sign);

该脚本完成后,之前参数中使用{{_sign}}的就能动态的获取到值了。

请求发送成功后,需要提取响应正文的token作为下一个接口的参数,取出来放入Postman环境变量中即可。
编写相关的Tests-Script脚本:
Postman高级技巧:Pre-Request-Script & Tests-Script

// 响应断言
pm.test("Body matches token", function () {
    pm.expect(pm.response.text()).to.include("\"token\":");
    
    // 提取Token
    var result = pm.response.json().result;
    pm.environment.set("_userid", result.user_id);
    pm.environment.set("_token", result.token);
    console.log('[Tests]OpenAccountApi.getUserToken _token=' + result.token + ',user_id=' + result.user_id);
});

OpenUserApi.findById

接口地址http://{{host}}/api2/OpenAccountApi.getUserToken
请求方式POST
请求参数?_token=[]
请求正文{"id":用户Id}
响应正文{"result": {用户信息},"status": 0}

Postman高级技巧:Pre-Request-Script & Tests-Script

Postman高级技巧:Pre-Request-Script & Tests-Script
第二个接口没有什么特殊处理,写了个简单的响应断言,若响应正文中包含"status":0,则表明请求成功了。

console.log('[Tests]OpenUserApi.findById, requestBody=' + pm.request.body.raw);

pm.test("Body matches status", function () {
    pm.expect(pm.response.json().status).to.eql(0);
});

最终的测试效果

按Ctrl + Shift + I 可以弹出开发者面板,查看到打印的相关日志。

Postman高级技巧:Pre-Request-Script & Tests-Script

Postman高级技巧:Pre-Request-Script & Tests-Script

Collection Runner

Postman高级技巧:Pre-Request-Script & Tests-Script

Postman高级技巧:Pre-Request-Script & Tests-Script

最后附上相关的运行日志:
Postman高级技巧:Pre-Request-Script & Tests-Script

相关推荐