Postman Sandbox:JavaScript沙箱

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.environment.toObject(): 获取当前环境中的所有变量,变量全部放在一个对象中返回。

  • 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(): 清除所有的全局变量。

  • pm.globals.toObject():获取所有的全局变量,变量全部放在一个对象中返回。

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 运行参数设置。

你可能感兴趣的:(Postman,接口自动化)