postman pre-request script

pm 对象

您将使用 来执行大多数 Postman JavaScript API 功能pm.*,它提供对请求和响应数据以及变量的访问。

在脚本中使用变量

您可以使用API访问和操作Postman 中每个作用域的变量pm

您可以使用动态变量在请求运行时生成值。

Postman 支持多种变量作用域。该pm对象提供了访问全局变量、集合变量和环境变量的具体pm.variables方法,以及访问不同作用域变量以及设置局部变量的方法。

  • 检查当前作用域中是否有 Postman 变量:
pm.variables.has(variableName:String):function → Boolean
  • 获取指定名称的 Postman 变量的值:
pm.variables.get(variableName:String):function → *
  • 设置具有指定名称和值的局部变量:
pm.variables.set(variableName:String, variableValue:*):function
  • 使用以下语法返回脚本内动态变量的解析值{{$variableName}}
pm.variables.replaceIn(variableName:String):function: → *

例如:

const stringWithVars = pm.variables.replaceIn("Hi, my name is {{$randomFirstName}}");
console.log(stringWithVars);
  • 返回一个对象,其中包含所有变量及其在当前范围内的值。根据优先顺序,这将包含来自多个范围的变量。
pm.variables.toObject():function → Object

变量作用域确定 Postman 在引用变量时赋予变量的优先级,按优先级递增的顺序排列:

  • 全球的
  • 环境
  • 收藏
  • 数据
  • 当地的

具有最接近范围的变量会覆盖任何其他变量。例如,如果您score在当前集合和活动环境中都有命名的变量,并且您调用pm.variables.get('score'),Postman 将返回环境变量的当前值。当您使用 设置变量值时pm.variables.set,该值是本地的,并且只会在当前请求或集合运行中持续存在。

//collection var 'score' = 1
//environment var 'score' = 2

//first request run
console.log(pm.variables.get('score'));//outputs 2
console.log(pm.collectionVariables.get('score'));//outputs 1
console.log(pm.environment.get('score'));//outputs 2

//second request run
pm.variables.set('score', 3);//local var
console.log(pm.variables.get('score'));//outputs 3

//third request run
console.log(pm.variables.get('score'));//outputs 2

有关更多详细信息,请参阅Postman 集合 SDK 变量参考。

您还可以通过pm.environment、pm.collectionVariables和pm.globals访问在各个作用域中定义的变量。

在脚本中使用环境变量

您的脚本可以使用这些pm.environment方法来访问和操作活动(当前选择的)环境中的变量。

  • 活动环境的名称:
pm.environment.name:String
  • 检查环境是否有指定名称的变量:
pm.environment.has(variableName:String):function → Boolean
  • 获取活动环境中具有指定名称的变量:
pm.environment.get(variableName:String):function → *
  • 在活动环境中使用指定的名称和值设置变量:
pm.environment.set(variableName:String, variableValue:*):function
  • 使用以下语法返回脚本内动态变量的解析值{{$variableName}}
pm.environment.replaceIn(variableName:String):function → *

例如:

//environment has vars firstName and age
const stringWithVars = pm.environment.replaceIn("Hi, my name is {{firstName}} and I am {{age}}.");
console.log(stringWithVars);
  • 在单个对象中返回活动环境中的所有变量及其值:
pm.environment.toObject():function → Object
  • 从活动环境中删除变量,按名称指定变量:
pm.environment.unset(variableName:String):function
  • 清除活动环境中的所有变量:
pm.environment.clear():function

请注意,您编辑变量的能力取决于您在工作区中的访问级别。

在脚本中使用集合变量

您的脚本可以使用这些pm.collectionVariables方法来访问和操作集合中的变量。

  • 检查集合中是否有指定名称的变量:
pm.collectionVariables.has(variableName:String):function → Boolean
  • 返回具有指定名称的集合变量的值:
pm.collectionVariables.get(variableName:String):function → *
  • 设置具有指定名称和值的集合变量:
pm.collectionVariables.set(variableName:String, variableValue:*):function
  • 使用以下语法返回脚本内动态变量的解析值{{$variableName}}
pm.collectionVariables.replaceIn(variableName:String):function → *

例如:

//collection has vars firstName and age
const stringWithVars = pm.collectionVariables.replaceIn("Hi, my name is {{firstName}} and I am {{age}}.");
console.log(stringWithVars);
  • 在一个对象的集合中返回所有变量及其值:
pm.collectionVariables.toObject():function → Object
  • 从集合中删除指定的变量:
pm.collectionVariables.unset(variableName:String):function
  • 清除集合中的所有变量:
pm.collectionVariables.clear():function

在脚本中使用全局变量

您的脚本可以使用这些pm.globals方法在工作区中的全局范围内访问和操作变量。

  • 检查哪里有指定名称的全局变量:
pm.globals.has(variableName:String):function → Boolean
  • 返回具有指定名称的全局变量的值:
pm.globals.get(variableName:String):function → *
  • 设置具有指定名称和值的全局变量:
pm.globals.set(variableName:String, variableValue:*):function
  • 使用以下语法返回脚本内动态变量的解析值{{$variableName}}
pm.globals.replaceIn(variableName:String):function → String

例如:

//globals include vars firstName and age
const stringWithVars = pm.globals.replaceIn("Hi, my name is {{firstName}} and I am {{age}}.");
console.log(stringWithVars);
  • 返回对象中的所有全局变量及其值:
pm.globals.toObject():function → Object
  • 删除指定的全局变量:
pm.globals.unset(variableName:String):function
  • 清除工作区中的所有全局变量:
pm.globals.clear():function

请注意,您编辑变量的能力取决于您在工作区中的访问级别。

在脚本中使用数据变量

在集合运行期间,您的脚本可以使用这些pm.iterationData方法访问和操作数据文件中的变量。

  • 检查当前迭代数据中是否存在指定名称的变量:
pm.iterationData.has(variableName:String):function → boolean
  • 从具有指定名称的迭代数据中返回一个变量:
pm.iterationData.get(variableName:String):function → *
  • 返回对象中的迭代数据变量:
pm.iterationData.toObject():function → Object
  • 将迭代数据对象转换为 JSON 格式:
pm.iterationData.toJSON():function → *
  • 删除指定的变量:
pm.iterationData.unset(key:String):function

使用请求和响应数据编写脚本

多种方法提供对 Postman 脚本中请求和响应数据的访问,包括pm.request、pm.response、pm.info和pm.cookies。此外,您可以使用pm.sendRequest发送请求。

使用请求数据编写脚本

pm.request对象提供对运行脚本的请求的数据的访问。对于预请求脚本,这是即将运行的请求,对于测试脚本,这是已经运行的请求。

您可以使用pm.request对象预请求脚本在运行之前更改请求配置的各个部分。

pm.request对象提供以下属性和方法:

  • 请求网址:
pm.request.url:Url
  • 该标题的列表当前请求:
pm.request.headers:HeaderList
  • HTTP请求方法:
pm.request.method:String
  • 请求正文中的数据。这个对象是不可变的,不能从脚本中修改:
pm.request.body:RequestBody
  • 为当前请求添加具有指定名称和值的标头:
pm.request.headers.add(header:Header):function

例如:

pm.request.headers.add({
  key: "client-id",
  value: "abcdef"
});
  • 删除指定名称的请求头:
pm.request.headers.remove(headerName:String):function
  • 插入指定的标头名称和值(如果标头不存在,否则已存在的标头将更新为新值):
pm.request.headers.upsert({key: headerName:String, value: headerValue:String}):function)

有关更多详细信息,请参阅 Postman Collection SDK 请求参考。

使用响应数据编写脚本

pm.response对象提供对添加到Tests 的脚本中当前请求的响应中返回的数据的访问。

pm.response对象提供以下属性和方法:

  • 响应状态码:
pm.response.code:Number
  • 状态文本字符串:
pm.response.status:String
  • 该响应头的列表:
pm.response.headers:HeaderList
  • 接收响应所花费的时间(以毫秒为单位):
pm.response.responseTime:Number
  • 收到的响应大小:
pm.response.responseSize:Number
  • 响应文本:
pm.response.text():Function → String
  • 响应 JSON,您可以使用它来深入了解收到的属性:
pm.response.json():Function → Object

有关更多详细信息,请参阅 Postman Collection SDK 响应参考。

使用请求信息编写脚本

pm.info对象提供与请求和脚本本身相关的数据,包括名称、ID 和迭代计数。

pm.info对象提供以下属性和方法:

  • 该事件将是“预请求”或“测试”,具体取决于脚本在请求中的执行位置:
pm.info.eventName:String
  • 当前迭代的值:
pm.info.iteration:Number
  • 计划运行的总迭代次数:
pm.info.iterationCount:Number
  • 运行的请求的保存名称:
pm.info.requestName:String
  • 标识正在运行的请求的唯一 GUID:
pm.info.requestId:String

使用请求 cookie 编写脚本

pm.cookies对象提供对与请求关联的 cookie 列表的访问。

pm.cookies对象提供以下属性和方法:

  • 检查请求的域是否存在特定的 cookie(由名称指定):
pm.cookies.has(cookieName:String):Function → Boolean
  • 获取指定cookie的值:
pm.cookies.get(cookieName:String):Function → String
  • 获取对象中所有 cookie 及其值的副本。返回为请求域和路径定义的任何 cookie:
pm.cookies.toObject():Function → Object

有关更多详细信息,请参阅 Postman Collection SDK Cookie 列表参考。

您还可以使用pm.cookies.jar指定域来访问请求 cookie。

要通过这些pm.cookies.jar方法启用编程访问,请首先将 cookie URL列入白名单。

  • 访问 cookie jar 对象:
pm.cookies.jar():Function → Object

例如:

const jar = pm.cookies.jar();
//cookie methods...
  • 使用名称和值设置 cookie:
jar.set(URL:String, cookie name:String, cookie value:String, callback(error, cookie)):Function → Object
  • 使用PostmanCookie或兼容对象设置 cookie :
jar.set(URL:String, { name:String, value:String, httpOnly:Bool }, callback(error, cookie)):Function → Object

例如:

const jar = pm.cookies.jar();
jar.set("httpbin.org", "session-id", "abc123", (error, cookie) => {
  if (error) {
    console.error(`An error occurred: ${error}`);
  } else {
    console.log(`Cookie saved: ${cookie}`);
  }
});
  • 从 cookie jar 中获取一个 cookie:
jar.get(URL:String, cookieName:String, callback (error, value)):Function → Object
  • 从 cookie jar 中获取所有 cookie。cookie 在回调函数中可用:
jar.getAll(URL:String, callback (error, cookies)):Function
  • 删除一个cookie:
jar.unset(URL:String, token:String, callback(error)):Function → Object
  • 清除 cookie jar 中的所有 cookie:
jar.clear(URL:String, callback (error)):Function → Object

有关更多详细信息,请参阅 Postman Collection SDK Cookie 参考。

从脚本发送请求

您可以使用该pm.sendRequest方法从预请求测试脚本异步发送请求。这允许您在执行计算或同时发送多个请求时在后台执行逻辑,而无需等待每个请求完成。您可以通过添加回调函数来避免阻塞问题,以便您的代码可以在 Postman 收到响应时做出响应。然后,您可以对响应数据执行所需的任何其他处理。

您可以向pm.sendRequest方法传递URL 字符串,也可以提供 JSON 格式的完整请求配置,包括标头、方法、正文等。

// Example with a plain string URL
pm.sendRequest('https://postman-echo.com/get', (error, response) => {
  if (error) {
    console.log(error);
  } else {
  console.log(response);
  }
});

// Example with a full-fledged request
const postRequest = {
  url: 'https://postman-echo.com/post',
  method: 'POST',
  header: {
    'Content-Type': 'application/json',
    'X-Foo': 'bar'
  },
  body: {
    mode: 'raw',
    raw: JSON.stringify({ key: 'this is json' })
  }
};
pm.sendRequest(postRequest, (error, response) => {
  console.log(error ? error : response.json());
});

// Example containing a test
pm.sendRequest('https://postman-echo.com/get', (error, response) => {
  if (error) {
    console.log(error);
  }

  pm.test('response should be okay to process', () => {
    pm.expect(error).to.equal(null);
    pm.expect(response).to.have.property('code', 200);
    pm.expect(response).to.have.property('status', 'OK');
  });
});

有关更多详细信息,请参阅请求定义和响应结构参考文档。

脚本工作流

postman对象提供了setNextRequest在您使用集合运行程序或Newman时构建请求工作流的方法。

请注意,setNextRequest当您使用“发送”按钮运行请求时没有任何影响,它仅在您运行集合时生效。

当您运行一个集合(使用集合运行器或 Newman)时,Postman 将按照默认顺序或您在设置运行时指定的顺序运行您的请求。但是,您可以使用postman.setNextRequest指定下一个应运行的请求来覆盖此执行顺序。

  • 在此之后运行指定的请求(集合中定义的请求名称,例如“获取客户”):
postman.setNextRequest(requestName:String):Function
  • 在此之后运行指定的请求(由 返回的请求 ID pm.info.requestId):
postman.setNextRequest(requestId:String):Function

例如:

//script in another request calls:
//pm.environment.set('next', pm.info.requestId)
postman.setNextRequest(pm.environment.get('next'));

脚本可视化

使用pm.visualizer.set指定模板的可视化显示响应数据。

pm.visualizer.set(layout:String, data:Object, options:Object):Function
  • layout 必需的

    • 车把HTML 模板字符串
  • data 可选的

    • 绑定到模板的 JSON 对象,您可以在模板字符串中访问它
  • options 可选的

    • 选择对象为Handlebars.compile()

用法示例:

var template = `

{{res.info}}

`; pm.visualizer.set(template, { res: pm.response.json() });

将响应数据构建到可视化中

使用pm.getData检索可视化模板字符串中的响应数据。

pm.getData(callback):Function

回调函数接受两个参数:

  • error

    • 任何错误细节
  • data

    • 数据传递给模板由pm.visualizer.set

用法示例:

pm.getData(function (error, data) {
  var value = data.res.info;
});

编写测试断言

  • pm.test(testName:String, specFunction:Function):Function

您可以使用pm.testPre-requestTests脚本中编写测试规范。测试包括名称和断言——Postman 将输出测试结果作为响应的一部分。

pm.test方法返回pm对象,使调用可链接。以下示例测试检查响应是否有效以继续。

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

done可以将可选回调传递给pm.test, 以测试异步函数。

pm.test('async test', function (done) {
  setTimeout(() => {
    pm.expect(pm.response.code).to.equal(200);
    done();
  }, 1500);
});
  • 获取从代码中的特定位置执行的测试总数:
pm.test.index():Function → Number

pm.expect方法允许您使用ChaiJS 期望 BDD语法对响应数据编写断言。

pm.expect(assertion:*):Function → Assertion

您还可以使用pm.response.to.have.*pm.response.to.be.*来构建您的断言。

有关更多断言,请参阅测试示例。

使用外部库

require(moduleName:String):function → *

require方法允许您使用沙箱内置库模块。下面列出了可用库的列表以及指向相应文档的链接。

  • 艾维
  • 阿托布
  • btoa
  • 啦啦队
  • 加密js
  • csv 解析/库/同步
  • lodash(_沙箱中默认存在v3.10.1内置对象,require用于加载最新版本。)
  • 片刻
  • 邮递员收集
  • 电视4
  • 用户名
  • xml2js

许多 NodeJS 模块也可以在沙箱中使用:

  • 小路
  • 断言
  • 缓冲
  • 实用程序
  • 网址
  • 小码
  • 请求参数
  • 字符串解码器
  • 溪流
  • 计时器
  • 事件

为了使用库,调用require方法,将模块名称作为参数传递,并将方法的返回对象分配给变量。

你可能感兴趣的:(postman pre-request script)