Postman JavaScript 參考

2023-04-04 10:34 更新

Postman 提供了可在請求腳本中使用的 JavaScript API。該pm對象提供了用于測試您的請求和響應數(shù)據的功能,該postman對象提供了額外的工作流控制。

下午對象

您將使用 執(zhí)行大部分 Postman JavaScript API 功能pm.*,它提供對請求和響應數(shù)據以及變量的訪問。

在腳本中使用變量

您可以使用 API 在 Postman 的每個范圍內訪問和操作變量pm。

您可以在請求運行時使用動態(tài)變量生成值。

Postman 支持多種變量作用域。該pm對象提供了專門訪問全局變量、集合變量和環(huán)境變量的方法,以及pm.variables訪問不同范圍變量和設置局部變量的方法。

  • 檢查當前范圍內是否有 Postman 變量:
pm.variables.has(variableName:String):function → Boolean
  • 獲取具有指定名稱的 Postman 變量的值:
pm.variables.get(variableName:String):function → *
  • 設置具有指定名稱和值的局部變量:
pm.variables.set(variableName:String, variableValue:*):function
  • 使用語法返回腳本中動態(tài)變量的解析值{{$variableName}}:
pm.variables.replaceIn(variableName:String):function: → *

例如:

const stringWithVars = pm.variables.replaceIn("Hi, my name is {{$randomFirstName}}");
console.log(stringWithVars);
  • 返回一個包含所有變量及其值在當前范圍內的對象。根據優(yōu)先順序,這將包含來自多個范圍的變量。
pm.variables.toObject():function → Object

變量作用域決定了當你引用變量時 Postman 賦予它們的優(yōu)先級,按照優(yōu)先級遞增的順序:

  • 全球的
  • 收藏
  • 環(huán)境
  • 數(shù)據
  • 當?shù)氐?/li>

具有最接近范圍的變量會覆蓋任何其他變量。例如,如果您score在當前集合和活動環(huán)境中都有命名的變量,并且您調用pm.variables.get('score'),Postman 將返回環(huán)境變量的當前值。當您使用 設置變量值時pm.variables.set,該值是本地的,并且只會在當前請求或收集運行時持續(xù)存在。

//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 Collection SDK 變量參考。

您還可以使用pm.environment、pm.collectionVariablespm.globals訪問在各個范圍中定義的變量。

在腳本中使用環(huán)境變量

您的腳本可以使用這些pm.environment方法來訪問和操作活動(當前選擇的)環(huán)境中的變量。

  • 活動環(huán)境的名稱:
pm.environment.name:String
  • 檢查環(huán)境是否有指定名稱的變量:
pm.environment.has(variableName:String):function → Boolean
  • 獲取活動環(huán)境中指定名稱的變量:
pm.environment.get(variableName:String):function → *
  • 在活動環(huán)境中設置具有指定名稱和值的變量:
pm.environment.set(variableName:String, variableValue:*):function
  • 使用語法返回腳本中動態(tài)變量的解析值{{$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);
  • 在單個對象中的活動環(huán)境中返回所有變量及其值:
pm.environment.toObject():function → Object
  • 從活動環(huán)境中刪除變量,按名稱指定變量:
pm.environment.unset(variableName:String):function
  • 清除活動環(huán)境中的所有變量:
pm.environment.clear():function
請注意,您編輯變量的能力取決于您在工作區(qū)中的訪問級別。

在腳本中使用集合變量

您的腳本可以使用這些pm.collectionVariables方法來訪問和操作集合中的變量。

  • 檢查集合中是否存在指定名稱的變量:
pm.collectionVariables.has(variableName:String):function → Boolean
  • 返回具有指定名稱的集合變量的值:
pm.collectionVariables.get(variableName:String):function → *
  • 設置具有指定名稱和值的集合變量:
pm.collectionVariables.set(variableName:String, variableValue:*):function
  • 使用語法返回腳本中動態(tài)變量的解析值{{$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方法在工作區(qū)內的全局范圍內訪問和操作變量。

  • 檢查哪里有指定名稱的全局變量:
pm.globals.has(variableName:String):function → Boolean
  • 返回具有指定名稱的全局變量的值:
pm.globals.get(variableName:String):function → *
  • 設置具有指定名稱和值的全局變量:
pm.globals.set(variableName:String, variableValue:*):function
  • 使用語法返回腳本中動態(tài)變量的解析值{{$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
  • 清除工作區(qū)中的所有全局變量:
pm.globals.clear():function
請注意,您編輯變量的能力取決于您在工作區(qū)中的訪問級別。

在腳本中使用數(shù)據變量

您的腳本可以使用這些方法在收集運行期間pm.iterationData訪問和操作數(shù)據文件中的變量。

  • 檢查當前迭代數(shù)據中是否存在指定名稱的變量:
pm.iterationData.has(variableName:String):function → boolean
  • 從具有指定名稱的迭代數(shù)據中返回一個變量:
pm.iterationData.get(variableName:String):function → *
  • 返回對象中的迭代數(shù)據變量:
pm.iterationData.toObject():function → Object
  • 將 iterationData 對象轉換為 JSON 格式:
pm.iterationData.toJSON():function → *
  • 刪除指定變量:
pm.iterationData.unset(key:String):function

使用請求和響應數(shù)據編寫腳本

有多種方法可以訪問 Postman 腳本中的請求和響應數(shù)據,包括pm.request、pm.response、pm.infopm.cookies。此外,您可以使用pm.sendRequest發(fā)送請求。

使用請求數(shù)據編寫腳本

該pm.request對象為運行腳本的請求提供對數(shù)據的訪問。對于預請求腳本,這是即將運行的請求,對于測試腳本,這是已經運行的請求。

您可以使用pm.request對象預請求腳本在運行之前更改請求配置的各個部分。

該pm.request對象提供以下屬性和方法:

  • 請求網址:
pm.request.url:Url
pm.request.headers:HeaderList
  • HTTP請求方式:
pm.request.method:String
  • 請求正文中的數(shù)據。這個對象是不可變的,不能從腳本中修改:
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 請求參考。

使用響應數(shù)據編寫腳本

該對象提供對添加到Tests 的pm.response腳本中當前請求的響應中返回的數(shù)據的訪問。

該pm.response對象提供以下屬性和方法:

  • 響應狀態(tài)碼:
pm.response.code:Number
  • 狀態(tài)文本字符串:
pm.response.status:String
pm.response.headers:HeaderList
  • 接收響應所花費的時間(以毫秒為單位):
pm.response.responseTime:Number
  • 收到的響應大?。?/li>
pm.response.responseSize:Number
  • 響應文本:
pm.response.text():Function → String
  • 響應 JSON,您可以使用它深入了解收到的屬性:
pm.response.json():Function → Object
有關詳細信息,請參閱 Postman Collection SDK 響應參考。

使用請求信息編寫腳本

該pm.info對象提供與請求和腳本本身相關的數(shù)據,包括名稱、請求 ID 和迭代計數(shù)。

該pm.info對象提供以下屬性和方法:

  • 該事件將是prerequest或test取決于腳本在請求中的執(zhí)行位置:
pm.info.eventName:String
pm.info.iteration:Number
  • 計劃運行的迭代總數(shù):
pm.info.iterationCount:Number
  • 運行請求的保存名稱:
pm.info.requestName:String
  • 標識正在運行的請求的唯一 GUID:
pm.info.requestId:String

使用請求 cookie 編寫腳本

該pm.cookies對象提供對與請求關聯(lián)的 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 添加到allowlist。

  • 訪問 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
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 在回調函數(shù)中可用:
jar.getAll(URL:String, callback (error, cookies)):Function
  • 刪除 cookie:
jar.unset(URL:String, token:String, callback(error)):Function → Object
  • 清除 cookie 罐中的所有 cookie:
jar.clear(URL:String, callback (error)):Function → Object
有關詳細信息,請參閱 Postman Collection SDK Cookie 參考。

從腳本發(fā)送請求

您可以使用該方法從預請求或測試pm.sendRequest腳本異步發(fā)送請求。如果您同時執(zhí)行計算或發(fā)送多個請求,而無需等待每個請求完成,這允許您在后臺執(zhí)行邏輯。您可以通過添加回調函數(shù)來避免阻塞問題,以便您的代碼可以在 Postman 收到響應時做出響應。然后,您可以對響應數(shù)據執(zhí)行所需的任何其他處理。

您可以向該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');
  });
});

有關詳細信息,請參閱請求定義響應結構參考文檔。

腳本工作流程

當您使用collection runnerNewman時,該postman對象提供setNextRequest構建請求工作流的方法。

請注意,當您使用Send運行請求時,這setNextRequest沒有任何效果;它僅在您運行集合時有效。

當您運行一個集合(使用集合運行器或 Newman)時,Postman 將以默認順序或您在設置運行時指定的順序運行您的請求。但是,您可以使用postman.setNextRequest指定下一個要運行的請求來覆蓋此執(zhí)行順序。

  • 在此之后運行指定的請求(集合中定義的請求名稱,例如“Get customers”):
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'));

編寫 Postman 可視化腳本

用于pm.visualizer.set指定模板以在 Postman Visualizer 中顯示響應數(shù)據。

pm.visualizer.set(layout:String, data:Object, options:Object):Function
  • layout 必需的Handlebars HTML 模板字符串
  • data 選修的綁定到模板的 JSON 對象,您可以在模板字符串中訪問它
  • options 選修的選項對象Handlebars.compile()

用法示例:

var template = `<p>{{res.info}}</p>`;
pm.visualizer.set(template, {
    res: pm.response.json()
});

將響應數(shù)據構建到 Postman 可視化中

用于pm.getData檢索 Postman Visualizer 模板字符串中的響應數(shù)據。

pm.getData(callback):Function

回調函數(shù)接受兩個參數(shù):

用法示例:

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

編寫測試斷言

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

您可以使用在預請求或測試pm.test腳本中編寫測試規(guī)范。測試包括名稱和斷言——Postman 將輸出測試結果作為響應的一部分。

該pm.test方法返回pm對象,使調用可鏈接。以下示例測試檢查響應是否有效以繼續(xù)。

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, 以測試異步函數(shù)。

pm.test('async test', function (done) {
  setTimeout(() => {
    pm.expect(pm.response.code).to.equal(200);
    done();
  }, 1500);
});
  • 獲取從代碼中特定位置執(zhí)行的測試總數(shù):
pm.test.index():Function → Number

該方法允許您使用ChaiJS expect BDDpm.expect語法在響應數(shù)據上編寫斷言。

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

您還可以使用pm.response.to.have.*和pm.response.to.be.*來構建您的斷言。

有關更多斷言,請參閱測試示例。

使用外部庫

require(moduleName:String):function → *

該require方法允許您使用沙箱內置庫模塊。下面列出了可用庫的列表以及相應文檔的鏈接。

以下 NodeJS 模塊也可在沙箱中使用:

要使用庫,調用方法require,將模塊名稱作為參數(shù)傳遞,并將方法的返回對象分配給變量。

下一步

您可以使用Postman 實用程序以多種方式使用測試將 Postman 構建到您的開發(fā)項目中。


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號