脚本进阶
responseBody
1、responseBody:响应体,类型为String
2、可以利用方法JSON.parse(responseBody)将其转化为对象
例1:
var Response = responseBody;//这步可以省略,只是将responseBody再赋值给一个变量
console.log("响应的字符串型响应体为:",Response)//使用了中间变量
console.log("响应体的类型为:",typeof(responseBody))//直接使用responseBody,没用中间变量了
var ResponseJson = JSON.parse(Response)
console.log("响应的JSON型响应体为:",ResponseJson)
console.log("响应体的类型为:",typeof(ResponseJson))
console.log("响应的JSON型响应体为:",JSON.parse(responseBody))//直接将响应体转为json型
注:从上面的运行结果可以看出
1、responseBody表示响应体,默认类型为类型为String,可以使用JSON.parse(responseBody)将其转化为对象
2、感觉就是:Postman内部将请求的响应体直接赋值给了变量responseBody(responseBody就是请求的响应体),至于需不需要将responseBody再赋值给其他变量有用户决定
3、关系为:请求的响应体=responseBody=其他变量,前一步有Postman完成,后面一步由用户决定,且可以省略
pm.response
1、pm.response用于返回所有的响应信息(responseBody只表示响应体)
2、响应信息包括:Body、Code、Status、Cookies、Headers等
3、使用pm.response.json()方法可以将响应信息中的JSON字符串转为对象
例2:
var Response = pm.response;//将响应信息赋值给一个变量
console.log("请求的响应信息为",Response);
console.log("请求的响应信息类型为",typeof(Response));
var ResponseJson = Response.json();//将响应信息中的JSON字符串转为对象
//也可以这样写:var ResponseJson = pm.response.json()
console.log("响应信息的JSON格式为:",ResponseJson);
console.log("响应信息的JSON格式类型为",typeof(pm.response.json()));
注:
对比responseBody和pm.response的用法和输出,可以看出:responseBody用于返回响应体,而pm.response用于返回全部响应信息
例3:
var body = responseBody;
console.log("字符串型的响应体",body)
var jsonbody = JSON.parse(responseBody);
console.log("JSON型的响应体",jsonbody)
var response = pm.response;
console.log("响应信息",response)
var jsonresponse = pm.response.json();
console.log("json格式的响应信息",jsonresponse)
检查响应体的JSON值
1、可以使用reponseBody或pm.response返回的响应体(响应信息)来进行断言测试
2、在使用reponseBody或pm.response进行断言测试时需要先将响应体转为对象
例3:
//检查最外层的json值
pm.test("检查响应最外层的JSON值",function(){
var responsejson = pm.response.json();
pm.expect(responsejson.errorCode).to.eql(0);
});
//检查内层的json值
pm.test("检查响应内层的JSON值",function(){
var responsejson = pm.response.json();
console.log("通过pm.response获取响应体",responsejson);
pm.expect(responsejson.translateResult[0][0].src).to.eql("心有猛虎,细嗅蔷薇");
});
//检查内层的json值_补充
pm.test("检查响应内层的JSON值_补充",function(){
var ResponseJson = JSON.parse(responseBody);
console.log("通过responseBody获取响应体",JSON.parse(responseBody));
pm.expect(ResponseJson.translateResult[0][0].tgt).to.eql("The heart has the tiger, fine smell rose测试");
});
注:由上面的代码可以看出
1、在对json对象最外层的键值对进行判断时:只需要使用对象名.键名(使用键名来找键对应的值)
2、在对json对象内层的键值对进行判断时,稍微有点区别:需要根据数据特点一层一层的找到需要测试的键
如果键是字典的话就使用:.键名;如果是列表的话就使用使用:列表的索引
"translateResult": [
[
{
"src": "心有猛虎,细嗅蔷薇",
"tgt": "The heart has the tiger, fine smell rose"
}
]
]
设置环境变量
1、在tests选项卡下,我们可以由脚本自定义设置环境变量,也可以将请求的响应中部分内容设为环境变量等
2、变量不就可以时单个值,也可以是嵌套对象
例4:
//自定义环境变量
var array = [1,2,3,4];
pm.environment.set("array",JSON.stringify(array,null,2));
//方法语法:JSON.stringify(value[, replacer[, space]])
var obj = {a:[1,2,3,4],b:{c:"value"}};
pm.environment.set("obj",JSON.stringify(obj));
//由响应体设置环境变量
var ResponseJson = JSON.parse(responseBody);
pm.environment.set("响应变量",ResponseJson.elapsedTime);
pm.environment.set("响应变量补充",pm.response.json().translateResult[0][0]);
获取环境变量
1、可以通过脚本获取一个环境变量(其值是一个stringify对象)
例5:使用在例4中建立的环境变量
var array = pm.environment.get("array");
console.log("直接获取变量",array);
console.log("直接获取变量的类型",typeof(array));
//如果数据来自一个未知源,那么这些语句应该封装在try-catch块中
var array_stringify = JSON.parse(pm.environment.get("array"));
console.log("获取stringify对象变量",array_stringify);
console.log("获取stringify对象变量的类型",typeof(array_stringify));
分支和循环
1、一般来说,一个集合中包含多个请求,当运行一个集合时,Postman默认按照一定的顺序(请求在集合中的顺序)来执行所包含的请求。只是大多时候,可能需要改变API接口请求的发送顺序。因此这个时候就需要使用到Postman.setNextRequest("requestName")
2、设置下一步要执行的请求:Postman.setNextRequest("requestName")
3、停止工作流程:Postman.setNextRequest(null)
4、通常情况下,我们可以使用if判断来控制流程跳转, 比如:通过判断A请求是否成功来分别跳转到D请求或B请求
例:
1、正常执行集合中的请求

2、根据请求执行情况来修改请求的执行顺序

Postman沙盒
Postman Sandbox是一个JavaScript执行环境,您可以在编写预请求脚本和测试脚本(在Postman和Newman中)时可用。在这个沙箱中执行您在预请求/测试脚本部分中写入的代码
环境和全局变量
方法 | 描述 |
postman.setEnvironmentVariable(variableName, variableValue) | 设置一个环境变量“variableName”,并为其分配字符串“variableValue”。您必须为此方法选择一个环境才能工作。 注意:只能存储字符串。存储其他类型的数据将导致意外的行为 |
postman.getEnvironmentVariable(variableName) | 返回环境变量“variableName”的值,用于预请求和测试脚本。必须为此方法选择一个环境才能工作 |
postman.setGlobalVariable(variableName, variableValue) | 设置一个全局变量“variableName”,并为其分配字符串“variableValue”。 注意:只能存储字符串。存储其他类型的数据将导致意外的行为 |
postman.getGlobalVariable(variableName) | 返回全局变量“variableName”的值,用于预请求和测试脚本 |
postman.clearEnvironmentVariable(variableName) | 清除名为“variableName”的环境变量。必须为此方法选择一个环境才能工作 |
postman.clearGlobalVariable(variableName) | 清除名为“variableName”的全局变量 |
postman.clearEnvironmentVariables() | 清除所有环境变量。必须为此方法选择一个环境才能工作 |
postman.clearGlobalVariables() | 清除所有全局变量 |
environment | 当前环境中的变量字典。使用environment["foo"]访问“foo”的环境变量的值。 注意:这只能用来读取变量。使用setEnvironmentVariable()设置值 |
globals | 全局变量字典使用globals["bar"]访问“栏中的”全局变量的值。 注意:这只能用来读取变量。使用setGlobalVariable()设置值 |
注:
在设置、获取、清除环境变量时必须选择一个工作环境(环境变量集)。只有字符串可以储存,储存其他类型的数据时可能会导致意外的行为

动态变量
Postman还有一些动态变量可以在请求中使用。需要注意的是:在沙箱中不能使用动态变量。只能以{{..}}这样的格式在请求URL、headers、body中使用
1、{{$guid}}:添加v4风格的guid
2、{{$timestamp}}:添加当前时间戳。
3、{{$randomInt}}:添加0到1000之间的随机整数
Cookies
1、responseCookies:获取域对应的所有Cookies,结果是一个Array,需要启用拦截器才能工作
2、postman.getResponseCookie(cookieName):获取具有给定名称的响应cookie。需要启用拦截器才能工作
请求/响应相关属性
1、request{object}:用户可以调用Postman的请求对象。该对象是只读的。更改此对象的属性将不起作用。注意:变量不会在请求对象中解析。请求对象由以下内容组成:
⑴data对象:请求的表单数据的字典。使用方法为:request.data[“key”]==”value”
⑵Headers对象:请求头的字典。使用方法为:request.headers[“key”]==”value”
⑶method字符串:值是GET、POST、PUT等
⑷url字符串: 请求的url
2、responseHeaders对象:已弃用,只能应用于Tests中
3、responseBody对象:只能应用于Tests中,它是一个包含原始响应主体文本的字符串。可以将其用作JSON.parse或xml2Json的输入
4、responseTime数值类型:只能应用于Tests中,响应时间,以毫秒为单位
5、responseCode对象类型:只能应用于Tests中,包含三个属性:
⑴code数值类型:响应代码(200为OK,404为未找到等)
⑵name字符串类型:状态码文本
⑶detail字符串类型:响应代码的解释
6、tests对象:仅测试,用户可以向其添加测试对象,Postman将把此对象的每个属性作为布尔值测试(这个就是前面说的轻量级验证器?)
7、iteration数值类型:仅在Collection Runner和Newman中可用。表示当前的测试运行索引。从0开始。
注:
对于沙箱,我现在的理解就是:也是Postman对请求及响应数据的一种处理方法,跟前面说的方法应该没什么区别
















