接口測試工具之Postman


一、Postman介紹

Postman官網上這樣介紹它:"Manage all of your organization's APIs in Postman, with the industry's most complete API development environment."看的出來Postman是功能強大的API測試的工具
Postman 提供功能強大的 Web API 和 HTTP 請求的調試,它能夠發送任何類型的HTTP 請求 (GET, POST, PUT, DELETE...),並且能附帶任何數量的參數和 Headers。不僅如此,它還提供測試數據和環境配置數據的導入導出,付費的 Post Cloud 用戶還能夠創建自己的 Team Library 用來團隊協作式的測試,並能夠將自己的測試收藏夾和用例數據分享給團隊。
 

二、Postman下載及安裝

Postman有2種安裝方式,一種是作為Chrome的插件,另一種是客戶端形式,建議使用客戶端安裝

1. Postman下載
官網下載地址:https://www.getpostman.com/downloads/

2. 安裝過程
默認安裝即可,安裝完成后,注冊登錄
 

三、Postman功能視圖

詳細功能可以參考Postman官方 文檔,
打開軟件,就可以看到Postman主界面,如下圖所示:

1. Collections:在Postman中,Collection類似文件夾,可以把同一個項目的請求放在一個Collection里方便管理和分享,Collection里面也可以再建文件夾。如果做API文檔的話,可以每個API對應一條請求,如果要把各種輸入都測到的話,就需要每條測試一條請求了。

2. 上面的黑字注冊是請求的名字,如果有Request description的話會顯示在這下面。下面的藍字是保存起來的請求結果,點擊可以載入某次請求的參數和返回值。我會用這個功能給做客戶端的同事展示不同情況下的各種返回值。保存請求的按鈕在15.

3. 選擇HTTP Method的地方,各種常見的不常見的非常全。

4. 請求URL,兩層大括號表示這是一個環境變量,可以在16的位置選擇當前的environment,環境變量就會被替換成該environment里variable的值。

5. 點擊可以設置URL參數的key和value

6. 點擊發送請求

7. 點擊保存請求到Collection,如果要另存為的話,可以點擊右邊的下箭頭

8. 設置鑒權參數,可以用OAuth之類的

9. 自定義HTTP Header,有些因為Chrome原因不能自定義的需要另外裝一個插件Interceptor,在16上面一行的衛星那里

10. 設置Request body,13那里顯示的就是body的內容

11. 在發起請求之前執行的腳本,例如request body里的那兩個random變量,就是每次請求之前臨時生成的。

12. 在收到response之后執行的測試,測試的結果會顯示在17的位置

13. 有四種形式可以選擇,form-data主要用於上傳文件。x-www-form-urlencoded是表單常用的格式。raw可以用來上傳JSON數據

14. 返回數據的格式,Pretty可以看到格式化后的JSON,Raw就是未經處理的數據,Preview可以預覽HTML頁面

15. 點擊這里把請求保存到2的位置

16. 設置environment variables和global variables,點擊右邊的x可以快速查看當前的變量。

17. 測試執行的結果,一共幾個測試,通過幾個。
 

四、測試工具

測試工具主要包括三部分,在發起請求之前運行的Pre-request,在收到應答之后運行的Test,和一次運行所有請求的Collection Runner
1. Pre-request
預請求腳本是與在發送請求之前執行的收集請求相關聯的代碼片段。

Pre-request和Test用的語言都是JavaScript,Postman在一個沙盒里執行代碼,提供給用戶的庫和函數可以在這里查看。而常用的功能都可以通過右邊的Code Snippets實現,點擊就可以插入到代碼區域。
2. Test
使用Postman,您可以使用JavaScript語言為每個請求編寫和運行測試.

 

測試例子
設置環境變量

pm.environment.set("variable_key", "variable_value");

獲取環境變量

pm.environment.get("variable_key");

獲取環境變量(其值是字符串化對象)

var array = JSON.parse(pm.environment.get("array"));
var obj = JSON.parse(pm.environment.get("obj"));

清除環境變量

pm.environment.unset("variable_key");

設置全局變量

pm.globals.set("variable_key", "variable_value");

獲取全局變量

pm.globals.get("variable_key");

清除全局變量

pm.globals.unset("variable_key");

得到一個變量
此函數在全局變量和活動環境中搜索變量。

pm.variables.get("variable_key");

檢查響應主體是否包含字符串

pm.test("Body matches string", function () {
    pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});

檢查響應主體是否等於字符串

pm.test("Body is correct", function () {
    pm.response.to.have.body("response_body_string");
});

檢查JSON值

pm.test("Your test name", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.value).to.eql(100);
});
//var jsonData = JSON.parse(responseBody);
//tests["list"] = jsonData["lists"][0] == "11";

內容類型存在

pm.test("Content-Type is present", function () {
    pm.response.to.have.header("Content-Type");
});

響應時間小於200毫秒

pm.test("Response time is less than 200ms", function () {
    pm.expect(pm.response.responseTime).to.be.below(200);
});

代碼名稱包含一個字符串

pm.test("Status code name has string", function () {
    pm.response.to.have.status("Created");
});

成功的POST請求狀態代碼

pm.test("Successful POST request", function () {
    pm.expect(pm.response.code).to.be.oneOf([201,202]);
});

將XML主體轉換為JSON對象

var jsonObject = xml2Json(responseBody);

獲取HTML並取出其中的值

//獲取HTML
const $ = cheerio.load(responseBody);

//獲取input標簽中name屬性值為SignValue的數據中屬性為value的值
var signvalue=$('input[name=SignValue]').attr('value');

//
//獲取textarea標簽中name值為SignValue的數據中文本屬性text的值
var signvalue=$('textarea[name=SignValue]').text();

 

3. Collection Runner
當編寫了很多測試之后,就可以使用Collection Runner來自動運行整個Collection了,入口就在主界面最上面一行的Runner。選好Collection、Environment,如果有需要還可以載入JSON和CSV作為數據源。點擊Start Run,就可以看到結果了。

 

五、變化的參數

1. 使用變量
現在使用參數都是寫死的, 那么如果想要測試賬號密碼參數使用其它值有沒有異常怎么辦呢?
這里就需要使用變量
引用變量的語法:{{變量名}}
Pre-request Script 和 Tests都可以設置變量,區別在於:Pre-request Script 中的腳本是在執行請求之前運行,而Tests 中的腳本則是在請求完成之后執行。
2. 測試數據集
在執行Collection Runner時可以選擇CSV或json格式的文件作為測試數據集
CSV文件格式:

JSON文件格式:

在執行Collection Runner時使用CSV/JSON文件

3. 定期任務
Postman 提供了一個 Monitors (監視器)功能,支持我們提交一個測試任務,按照設置的定時器進行運行,如每小時測試一次,具體操作如下:

 

六、接口依賴的問題

1. 接口執行順序
首先,說明一下,接下來說的接口都是默認屬於同一個集合 (Collections) 中的。
接口的執行順序其實就是按照這邊目錄中的順序(從上到下);所以有了這個默認的執行順序后,那么我們便可以把需要優先執行的接口放前面即可,比如把“登錄接口”放在第一個。
2. 自定義執行順序
當然,如果只有默認的一個執行順序的話,通常沒法滿足我們復雜的業務需求,所以 Postman 為我們提供了一個函數:postman.setNextRequest("填寫你要跳轉的接口名")
我們可以在接口的 Tests 功能區中執行跳轉代碼,如:

這里需要注意幾點:

  • postman.setNextRequest() 只在運行集合測試的時候生效,也就是說我們單獨運行 (Send) 接口 時,函數是不起作用的。
  • 當我們運行集合測試成功從 Request1 -> Request3 后,如果 Request3 后面還有接口,那么后面的接口仍然繼續按默認順序執行,即圖中的接口 Request4 仍會被執行。
  • 指定的跳轉接口必須屬於同一個集合中。
  • setNextRequest() 函數不管在 Tests 腳本中何處被調用,它都只在當前腳本最后才被真正執行。比如我們將圖中的第二行與第一行互調后,那么在運行跳轉函數后第二行代碼仍會被執行。

3. 解決依賴的思路

  • 保證 Request1 在 Request3 之前被運行
  • 將 Request1 返回的 access_token 的值添加到環境變量"參數集"中。
  • Request3 在請求時引用 access_token 的值

 
以上是Postman基礎功能,僅供參考。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM