脚本进阶

 

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型

postman怎么携带response postman response body_postman

注:从上面的运行结果可以看出
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()));

postman怎么携带response postman response body_脚本_02

注:
对比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)

postman怎么携带response postman response body_json_03

 

 

检查响应体的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测试");
});

postman怎么携带response postman response body_json_04

注:由上面的代码可以看出
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]);

postman怎么携带response postman response body_postman_05

 

 

获取环境变量

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));

postman怎么携带response postman response body_postman_06

 

 

分支和循环

1、一般来说,一个集合中包含多个请求,当运行一个集合时,Postman默认按照一定的顺序(请求在集合中的顺序)来执行所包含的请求。只是大多时候,可能需要改变API接口请求的发送顺序。因此这个时候就需要使用到Postman.setNextRequest("requestName")

2、设置下一步要执行的请求:Postman.setNextRequest("requestName")

3、停止工作流程:Postman.setNextRequest(null)

4、通常情况下,我们可以使用if判断来控制流程跳转, 比如:通过判断A请求是否成功来分别跳转到D请求或B请求

例:
1、正常执行集合中的请求

postman怎么携带response postman response body_JSON_07

 

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

postman怎么携带response postman response body_postman_08

 

 

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怎么携带response postman response body_脚本_09

 

动态变量

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对请求及响应数据的一种处理方法,跟前面说的方法应该没什么区别