iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 26
0
Software Development

.Net微服務輕旅行30天系列 第 26

Day 26: 叫郵差跟新人幫你測試Web API(2)

在Postman裡面寫測試

Postman也提供了寫自動測試的功能,使用上也是相當的平易近人
https://ithelp.ithome.com.tw/upload/images/20180114/20107867hJxcrwY7ii.png

Postman提供給測試碼用的API

目前來說有兩種API
例如
tests[..Test description] = ...Assert; //舊的API
跟類似javascript寫法的
pm.test(...Test description, ...Assert);

注意javascript寫法在chrome app的postman不能使用...
測試旁邊也有code snippet, 如果插入的程式碼是tests[...],那就是舊的postman

// Response body: Contains string (old)
tests["Products includes Product1"] = responseBody.has("Product1");

// Response body: Contains string (new)
pm.test("Products includes Product1",function(){
    pm.expect(pm.response.text()).to.include("Product1");
});

// Response body: JSON value check(old)
var jsonData = JSON.parse(responseBody);
tests["No 'value' property in response"] = jsonData.value === undefined;

// Response body: JSON value check(new)
pm.test("No 'value' property in response",function(){
    var jsonData = JSON.parse(responseBody);
    pm.expect(jsonData.value).to.eql(undefined);
})

更多的用法請見 https://www.getpostman.com/docs/postman/scripts/test_examples

如何在測試碼裡面show出特定變數的值

某個測試failed,除了我們可以肉眼慢慢檢查回傳的response哪裡出了問題,也可以靠著輸出我們想要的變數來輔助檢查。
有兩種方式可以輸出指定的變數值

  • 利用tests[]或是pm.test()直接輸出值在測試結果的名稱上
    https://ithelp.ithome.com.tw/upload/images/20180114/20107867oMlGsWSh5J.png
  • 利用console輸出到Postman Console或是DevTools(在View選項裡面可以找到)
    https://ithelp.ithome.com.tw/upload/images/20180114/201078675LgQ2CkKFy.png

###利用Postman做批量測試
我們可以利用輸入外部資料來源(csv或是json)來做批量測試,但是我們需要先把Url改成可以對應外部資料來源的template。

  • 先來看準備的資料
    ProductsService.csv
productID, productName
1,"Product1"
2,"Product2"
3,"Product3"

或是ProductsService.json

[
	{
		"productId": 1,
		"productName":"Product1"	
	},
	
	{
		"productId": 2,
		"productName":"Product2"	
	},
	
	{
		"productId": 3,
		"productName":"Product3"	
	}
]
  • 把原本的Url改成template,
假設原本是依據ID=1取回資料
http://localhost:1234/api/Products/1
改成
http://localhost:1234/api/Products/{{productId}}

這邊的變數名稱{{productId}}對應到資料來源的productId

  • 打開Runner, 選擇要測試的collection、環境變數設定、檔案資料來源、資料來源類型、iteration。
    ps: iteration對應到你要測試的資料筆數,例如2就是測試到第二個row(CSV)或是第二個物件(JSON),設定超過也沒關係,只會重複跑最後一筆。
    https://ithelp.ithome.com.tw/upload/images/20180114/20107867tuMC5gf3Gn.png
    設定完畢後跑起來,會出現以下的測試結果
    https://ithelp.ithome.com.tw/upload/images/20180114/201078672nGlCBth2o.png

利用Newman從command line跑批量測試

newman是Postman Collection Runner的指令列工具
這邊是newman的文件 https://www.npmjs.com/package/newman

簡易的使用方式如下

  • 安裝newman
npm install newman --global
  • 從Postman輸出Environment跟collection的JSON文件
  • 輸入
newman run ProductsServiceAPI_testTemplate_collection -e ProductsService_environment.json -d ProductsService.csv -r cli,json

一些基本參數如下
run Collection名稱
-e, --environment :指定要使用的環境檔案
-d, --iteration-data :指定要測試的資料來源
-r, --reporter: 指定要輸出的格式(html,cli,json,junit)

跑出來的結果如下圖
https://ithelp.ithome.com.tw/upload/images/20180114/20107867r2B82RNt3h.png

藉由Postman我們可以簡單的測試Web API並撰寫測試,更進一步的可以利用Newman在command line執行自動測試,這也讓我們可更簡單的整合Postman的測試到CI工具裡面


上一篇
Day 25: 叫郵差跟新人幫你測試Web API(1)
下一篇
Day 27: 微服務的封裝 Docker -- 基本操作
系列文
.Net微服務輕旅行30天30

尚未有邦友留言

立即登入留言