postman 详细使用 (2):预处理脚本、断言

postman 预处理脚本、断言

 

postman 为每一个 HTTP 请求提供了 pre-request script 用于存放在该请求进行之前执行的脚本,tests 用于存放在该请求获取响应之后执行的脚本,一般用于根据响应信息进行断言测试;

这里需要注意的是,postman 分为 native app、 chrome app 两个版本,native app 中的部分对象 chrome app 中是不可使用的,chrome app 中所有的对象语法,native app 中都兼容,特别是 native app 的 pre-request script 、tests 中的 snappets 中的自动生成示例代码,这些代码基本在 chrome app 中是无法运行的;

 

 

全局、环境变量设置

获取变量

//通用语法
postman.getGlobalVariable("key");       //获取全局变量
postman.getEnvironmentVariable("key");  //获取环境变量  

//postman native app 特有语法 
pm.globals.get("key");                //获取全局变量
pm.environment.get("key");            //获取环境变量  

设置变量

//通用语法
postman.setGlobalVariable("key","value");       //设置全局变量
postman.setEnvironmentVariable("key","value");  //设置环境变量  

//postman native app 特有语法 
pm.globals.get("key","value");                //设置全局变量
pm.environment.get("key","value");            //设置环境变量  

清除变量

//通用语法
postman.clearGlobalVariable("key");       //清除全局变量
postman.clearEnvironmentVariable("key");  //清除环境变量  

//postman native app 特有语法 
pm.globals.unset("key");                //清除全局变量
pm.environment.unset("key");            //清除环境变量  

将数组,嵌套对象储存到全局变量、环境变量中

有时候,我们要将数组,嵌套对象,json 对象储存到环境变量,全局变量,可以使用 postman 提供的 JSON 工具类,将其储存为 json 格式的字符串,如下:

//将数组储存到环境变量中
var array = [1, 2, 3, 4];
postman.setEnvironmentVariable("array", JSON.stringify(array));

//将嵌套对象储存到环境变量中
var obj = { a: [1, 2, 3, 4], b: { c: 'val' } };
postman.setEnvironmentVariable("obj", JSON.stringify(obj));

//从环境变量中获取数组对象
var array = JSON.parse(postman.getEnvironmentVariable("array"));

//从环境变量中获取嵌套对象/json对象
var obj = JSON.parse(postman.getEnvironmentVariable("obj"));

 

断言语法

postman 为请求提供了断言脚本,编写在请求的 tests 中,在运行该HTTP请求获取响应后,会自动执行 tests 脚本的内容,其中的断言结果会显示在 Test Results 面板中;

postman 提供的断言语法十分简单,为 tests["断言名称"] = 判断表达式,如下:

//判断响应正文是否式一个字符串
tests["Body is correct"] = responseBody === "response_body_string";

//判断响应时间是否小于200ms
tests["Response time is less than 200ms"] = responseTime < 200;

同时 postman 还对响应的各个常用部分封装为对象,可以直接调用;

responseCode 响应状态
responseHeaders 响应头
responseBody 响应正文
responseTime 发出请求到接收响应的时间(单位:ms)

一些常用示例如下:

响应状态校验

//验证响应码为 200
tests["Status code is 200"] = responseCode.code === 200;

//校验响应状态代码包含某个值
tests["Status code name has string"] = responseCode.name.has("OK");

响应头校验

//获取响应头的属性,以 “Pragma” 属性为例:
var pragmaVal = postman.getResponseHeader("Pragma");
var paramVal =responseHeaders.Pragma;

//验证响应头是否存在某个属性
tests["Content-Type is present"] = postman.getResponseHeader("Content-Type");           //不区分大小写
tests["Content-Type is present"] = responseHeaders.hasOwnProperty("Content-Type");      //区分大小写

//验证响应头 Pragma 属性是否为 “no-cache”
tests["Pragma is no-cache"] = postman.getResponseHeader("Pragma") === "no-cache"
tests["Pragma is no-cache"] = responseHeaders.Pragma === "no-cache"

响应正文校验

//将 json 格式的响应正文转化为 json 对象,并检查 json 值;
var data = JSON.parse(responseBody);
tests["Your test name"] = data.value === 100;

//将 xml 格式的响应正文转化为 json 对象,并检查 json 值;
var jsonObject = xml2Json(responseBody);
tests["Your test name"] = data.value === 100;

//检查响应正文中是否包含某个字符串
tests["Body matches string"] = responseBody.has("string_you_want_to_search");

响应时间校验

//校验响应时间小于200ms 
tests["Response time is less than 200ms"] = responseTime < 200;

//校验响应时间在一个特定的范围内(包括下限和上限)
tests["Response time is acceptable"] = _.inRange(responseTime, 100, 1001); 
tests["Response time is acceptable"] = responseTime >= 100 && responseTime <= 1001;  //或者直接这样

 

更多详见官方文档:https://www.getpostman.com/docs/v6/postman/scripts/test_examples

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章