[TOC]
<br>
### Scripts 脚本介绍
在Postman中,有个叫“Sandbox”的运行环境,是一个JavaScript执行环境,所以我们可以编写javaScript脚本来扩展我们的业务需求行为。最常用的实现包括但不限于:
- 构造动态参数
- 请求间数据传递
- 断言
在Postman接口测试过程中,有两个位置我们可以添加自己的脚本,分别是
- pre-request script
作用于请求之前,一般用于数据初始化
- test script
作用于获得响应之后,主要用于断言(解析响应内容,与预期值进行对比)
![](https://box.kancloud.cn/4e5819b18948cb73d6f533abcb57da9a_826x179.jpg)
*注意:Collection、Folder、Request 这三个组件中都可以添加pre-request script 和 test script,只是他们的作用范围和顺序稍有不同而已*
![](https://box.kancloud.cn/acf6791030b458fd2cfb1ddeee3df8a3_1315x458.jpg)
### 通过控制台调试脚本
这里用一个简单的日志打印脚本语句`console.log()`,分别在Pre-request Script 和 Tests 两个Tab下打印一句话,然后在控制台中查看打印结果
![](https://box.kancloud.cn/7312ac14cafb34ea3ec396aa5b96bf89_818x146.jpg)
![](https://box.kancloud.cn/559dfe8c3f88fdf44c7126a0e5b33aab_817x151.jpg)
打开控制台
![](https://box.kancloud.cn/268a208f9b4984966fe777c9a7d66fab_1110x438.jpg)
点击"Send"发送请求后,即可在控制台中显示打印结果
![](https://box.kancloud.cn/5c3e32b4ce60d07168cd937c4eda7033_989x240.jpg)
### Script 代码片段介绍
#### 变量操作
##### 环境变量
```javascript
// 设置环境变量
pm.environment.set("timestampsParam",new Date());
// 获取环境变量
pm.environment.get("timestampsParam");
// 删除环境变量
pm.environment.unset("timestampsParam");
```
##### 全局变量
```javascript
// 设置全局变量
pm.globals.set("variable_key", "variable_value");
// 获取全局变量
pm.globals.get("variable_key");
// 删除全局变量
pm.globals.unset("variable_key");
```
##### 变量
```javascript
// 在全局变量和活动环境中搜索变量。
pm.variables.get("variable_key");
```
##### Data 变量
Data变量,只有在Collection运行中使用,所有的Data变量会存储在`data`对象内,假如存在变量value,则data.value可获得当前迭代时的value变量值。
```javascript
var jsonData = JSON.parse(responseBody);
tests['Response has data value'] = jsonData.form.foo === data.value
```
#### JSON对象与字符串转换
##### 将JSON对象(对象或数组)转JSON字符串
```javascript
var array = [1, 2, 3, 4];
var jsonString = JSON.stringify(array)
```
##### 将JSON字符串转JSON对象Object
```javascript
var array = "[1, 2, 3, 4]";
var jsonObject = JSON.parse(array);
```
##### XML字符串转JSON对象Object
```javascript
var jsonObject = xml2Json(XMLString);
```
#### 请求/响应相关属性
##### 请求属性
**request:** 对象类型, *只读*
```javascript
console.log("request中的form-data对象:",request.data);
console.log("request中的headers对象:",request.headers);
console.log("request中的meth字符串:",request.method);
console.log("request中的url字符串:",request.url);
```
![](https://box.kancloud.cn/09515ebe6d22112e5a5c04bdbe1591d7_879x582.jpg)
##### 响应属性
响应属性,只能在Tests Script中使用
**responseBody:** 响应body的原始字符串
**responseTime:** 响应时间,毫秒
**responseCode:** 响应码对象类型
**tests:** 检查点对象类型,需要我们自动填充检查点
```javascript
console.log("body字符串:",responseBody);
console.log("响应时间:",responseTime);
console.log("响应码对象:",responseCode);
tests["响应时间小于1000毫秒"]=responseTime<1000;
console.log("检查点对象:",tests)
```
检查点运行结果显示如下:
![](https://box.kancloud.cn/6f940d3055293fd2a76dfa39d68749fb_461x140.jpg)
控制台信息输出如下:
![](https://box.kancloud.cn/8cfddadd97ee32c67056d4b12e9192b2_788x672.jpg)
#### 响应结果解析
Postman的请求响应信息,会保存在`pm.response`对象中。
##### 将响应内容转成JSON对象
```javascript
pm.response.json()
```
##### 将响应内容转成text字符串
```javascript
pm.response.text()
```
#### 发送异步HTTP请求
```javascript
pm.sendRequest("http://postman-echo.com/get", function (err, response) {
console.log(response.json());
});
```
### 断言
断言(检查点)的写法有多种,但是实质上都是往一个叫`tests`的字典对象中填充内容,包含“检查点名称”与“检查点结果”,检查点名称是一个描述字符串,而检查点结果则是一个布尔值(表达式),
#### 断言的两种原生写法
**方法一:**
```javascript
tests["响应时间小于1000毫秒"]=responseTime<1000; // 检查点结果是一个表达式
```
运行后,检查点结果在“Test Results”中显示如下
![](https://box.kancloud.cn/45892945e83c6836dd6409a37da8ae73_452x142.jpg)
**方法二:**
```javascript
pm.test("检查点名称",function(){ // 检查点结果是一个回调函数(这个回调函数的返回值也将会是一个布尔值)
pm.expect(...);
});
```
#### 响应Body为字符串时,断言包含特定字符串
```javascript
pm.test("Body matches string", function () {
pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});
```
#### 响应Body为字符串时,断言完全匹配特定字符串
```javascript
pm.test("Body is correct", function () {
pm.response.to.have.body("response_body_string");
});
```
#### 响应Body为JSON格式时,断言具体值
```javascript
pm.test("Your test name", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.value).to.eql(100);
});
```
#### 断言响应时间
```javascript
pm.test("Response time is less than 200ms", function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});
```
#### 断言响应码
```javascript
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
```
### 全局函数 pm.* 详解
pm对象,包含正在执行的脚本的所有信息。
- 异步发送HTTP/HTTPS请求。
pm.sendRequest:Function
```javascript
// 发送一个GET请求
pm.sendRequest('https://postman-echo.com/get?foo1=bar1&foo2=bar2', function (err, res) {
if (err) {
console.log(err);
} else {
console.log(res.text());
}
});;
// 发送一个带参数的POST请求
const echoPostRequest = {
url: 'https://postman-echo.com/post',
method: 'POST',
header: 'headername1:value1',
body: {
mode: 'raw',
raw: JSON.stringify({ key: 'this is json' })
}
};
pm.sendRequest(echoPostRequest, function (err, res) {
console.log(err ? err : res.json());
});
```
- 判断全局变量是否存在
pm.globals.has(variableName:String):function → Boolean
- 获取全局变量
pm.globals.get(variableName:String):function → *
- 设置全局变量
pm.globals.set(variableName:String, variableValue:String):function
- 删除某个全局变量
pm.globals.unset(variableName:String):function
- 清空所有全局变量
pm.globals.clear():function
- 判断环境变量是否存在
pm.environment.has(variableName:String):function → Boolean
- 获取环境变量
pm.environment.get(variableName:String):function → *
- 设置环境变量
pm.environment.set(variableName:String, variableValue:String):function
- 删除某环境变量
pm.environment.unset(variableName:String):function
- 清空环境变量
pm.environment.clear():function
- 获取某变量
pm.variables.get(variableName:String):function → *
- 返回请求url
pm.request.url:Url
- 返回请求header 列表
pm.request.headers:HeaderList
- 返回响应码,如 200
pm.response.code:Number
- 返回响应消息,如“OK”
pm.response.reason():Function → String
- 返回响应头headers列表
pm.response.headers:HeaderList
- 返回响应时间,毫秒
pm.response.responseTime:Number
- 返回响应Body字符串
pm.response.text():Function → String
- 返回响应Body json对象
pm.response.json():Function → Object
- 判断是否存在某cookie
pm.cookies.has(cookieName:String):Function → Boolean
- 获取某cookie
pm.cookies.get(cookieName:String):Function → String
- 编写断言
pm.test(testName:String, specFunction:Function):Function
```javascript
pm.test("response should be okay to process", function () {
pm.response.to.not.be.error;
pm.response.to.have.jsonBody('');
pm.response.to.not.have.jsonBody('error');
});
```
- 通用的断言函数
pm.expect(assertion:*):Function → Assertion
<hr style="margin-top:100px">
:-: ![](https://box.kancloud.cn/331f659e8e6cddb0d9f182e00e32803f_258x258.jpg)
***微信扫一扫,关注“python测试开发圈”,获取更多测试开发分享!***
- 前言
- Fiddler01-抓包原理介绍与配置
- Fiddler02-菜单功能介绍
- Fiddler03-轻松玩转Fiddler
- Fiddler04-进阶使用FiddlerScript
- Fiddler05-使用FiddlerScript对微信文章互动量进行监控
- Postman01-介绍与安装
- Postman02-HTTP请求与响应
- Postman03-Collection管理与运行
- Postman04 -变量详解
- Postman05-初级脚本使用
- Postman06-实例小结篇
- JMeter01-JMeter就是这么简单
- JMeter02-一个完整实战包你学会使用JMeter
- JMeter03-在JMeter中使用BeanShell编程
- JMeter04-图形化和非图形化运行JMeter
- JMeter05-生成美观的HTML测试报告
- JMeter06-JMeter+Jenkins实战
- JMeter07-解析session与cookie