Postman Sandbox (Postman 沙箱) 是一个 JavaScript 执行环境,在编写请求前的脚本和请求的测试脚本时(Postman 和 Newman 中都可以使用)。我们在 Pre-request Script 和 Tests 栏目中编写的代码都是在此沙箱中执行。
本文介绍属于 Sandbox 的大致介绍。在了解这部分内容之前,你需要那么一点点 JavaScript 代码基础。
那么在沙箱环境中,你有哪些东西能用,又能做些什么呢?这对于你更深入的做好接口测试是非常有必要了解的。
你可以:
- 使用 JavaScript 的常用库
- 设置或获取环境变量和全局变量
- 操作 Cookies
- 获取 request 和 response 的各种属性,比如headers、body等
- 使用 Postman 提供的内置对象 pm 中的所有功能
JavaScript 常用库
你可以点击名称进入相关介绍文档。
- Lodash: 一个 JavaScript 实用库,通过降低 array、number、objects、string 等等的使用难度从而让 JavaScript 变得更简单
- cheerio: 是jquery核心功能的一个快速灵活而又简洁的实现,主要是为了用在服务器端需要对 DOM 进行操作的地方,用于接口测试中需要处理 HTML 格式的返回时
BackboneJS Deprecated: 提供简单的模型,视图和集合。Sandbox 的未来版本中将删除此库。SugarJS Deprecated: 扩展原生的 js 对象的使用,Sandbox 的未来版本中将删除此库。- tv4 JSON schema validator Deprecated: 检验 Json 结构是否准确的 JavaScript 库;
- Ajv: 与 tv4 一样,都是 Json 结构验证库,任选一个即可。
- CryptoJS: 标准和安全的密码算法库, 支持的加密算法: AES, DES, EvpKDF, HMAC-MD5, HMAC-SHA1/3/256/512, MD5, PBKDF2, Rabbit, SHA1/3/224/256/512, TripleDES
环境变量和全局变量处理
以下内容的使用,在变量设置一节中出现过,属于可以直接点选的快捷代码。
-
pm.environment.set("variableName", variableValue)
: 设置一个环境变量,variableName 为变量名,variableValue 为变量值。变量名必须为字符串。 -
pm.environment.get("variableName")
: 根据变量名提取环境变量的值,变量可以是通过 pm.environment.set 设置,也可以是在环境变量文件或环境管理功能中设置。必须要先选择一个环境此方法才能起作用。 -
pm.environment.has("variableName")
: 判断某个环境变量名是否存在,存在则返回 true。 -
pm.environment.unset("variableName")
: 清除一个指定的环境变量,必须要先选择一个环境此方法才能起作用。 -
pm.environment.clear()
: 清除所有的环境变量,必须要先选择一个环境此方法才能起作用。 -
pm.globals.set(variableName, variableValue)
: 设置一个全局变量,variableName 为变量名,variableValue 为变量值。变量名必须为字符串。 -
pm.globals.has("variableName")
: 判断某个全局变量名是否存在,存在则返回 true。 -
pm.globals.get("variableName")
:根据变量名提取全局变量的值,变量可以是通过 pm.environment.set 设置,也可以是在全局变量文件或全局变量管理中设置。 -
pm.globals.unset("variableName")
: 清除一个指定的全局变量。 -
pm.globals.clear()
: 清除所有的全局变量。
Cookies
-
responseCookies {array}
:获取当前请求返回的响应中所有 cookie,以数组形式返回。 -
postman.getResponseCookie(cookieName)
:指定 cookie 名称获取 cookie 值。
console.log('cookies:', responseCookies )
// cookies: [{}, {}]
console.log('token:', postman.getResponseCookie('cookie_token').value)
// token: 79455c55e...6502ef1f8a5
请求与响应属性
以下属性都只能用于 Tests 脚本,不能用于 Pre-request Script。
-
request {object}
: Postman 在编写 Tests 脚本时可用,只能读取不能修改。主要用于获取当次请求的各种属性。请求对象由以下对象组成:
-
data {object}
- 返回请求的消息体 body 的数据,可通过属性取值方式 data.username 或 data['password']; -
headers {object}
- 返回请求的头部 headers 信息; -
method {string}
- GET/POST/PUT 等方法; -
url {string}
- 返回请求的 URL。
-
request 对象访问示例:
console.log(request);
///{data: {…}, headers: {…}, id: "c78dee07-399a-4885-bfcc-ca524e6114f6"…}
console.log('username:', request.data['username']);
/// username: showdoc
console.log('method:', request.method);
/// POST
-
responseHeaders {object}
:返回所有的头部信息的对象,区分头部字段大小写,不推荐使用。 - postman.getResponseHeader(headerName) :返回指定的头部字段数据,头部字段不区分大小写。
-
responseBody {string}
: 包含原始响应正文文本的字符串。可以通过 JSON.parse 或者 xml2Json 转换为 json 格式。 -
responseTime {number}
:响应时间(以毫秒为单位) -
responseCode {object}
:包含以下三个属性:-
code {number}
: 状态码, 200 -
name {string}
: 状态码名称,OK -
detail {string}
: 状态码描述,Standard response for successful HTTP requests....
-
响应对象访问示例:
console.log(postman.getResponseHeader('content-type'));
console.log(JSON.parse(responseBody))
console.log(responseCode.detail)
-
tests {object}
:测试对象,其每个属性都会被视为是 Boolean 测试值。
tests.testcode = responseCode.name == 'OK'
/// 运行后会在 Test Result 中显示测试标题为 testcode,与断言方式差不多
-
iteration {number}
: 仅在 Collection Runner 和 Newman 中可用。表示测试运行的迭代索引。从0开始。如果不清楚测试迭代运行的概念,请参考Collection Runner 运行参数设置。
网友评论