2023年9月21日 星期四

Postman+Newman+AWS CI/CD Testing


Postman 測試之前需要了解的東西


  • 使用 Enviroment 來變更 domain 或 測試資料


    {{變數名稱}} 這裡的變數名稱則是Enviroment 或是 global用的變數名稱 postman 會自動幫你帶入


  • 撰寫測試Script


    在 postman 的頁面中,你可以看到Tests 點擊進去就可以寫test script


  • 匯出相關資訊


匯出 postman 的 collection.json 跟 Environmant.json


pm.test()

為了遵循postman的規範,所有測試程式碼必須寫在 pm.test()function裡面。第一個引數是該測試的名稱,第二個引數是一個返回 boolean的函式。也就是這個函式如果返回true,表示測試通過,否則測試失敗。


pm.expect()

這個斷言函式是基於一個JavaScript測試庫ChaiJS BDD構建的。通過類似的語法,你可以很方便的對響應裡的資料或者一些變數進行斷言。

(expect:預期)


pm.response.to.be.*


這個物件可以提供對響應常見的檢。如狀態碼是否符合預期等。


tv4.validate()

第一個引數是被檢驗的資料,第二個引數是 json schema。通過則返回true,失敗則返回false。如果要快速學習jsonschema規範,可以參考https://www.jianshu.com/p/8278eb2458c4?winzoom=1 

tv4postman一個建的json validator。它基於json-schema draft v4,通過豐富的校驗語法來校驗簡單的 或者複雜的json物件。

常用api詳情請檢視https://learning.getpostman.com/docs/postman/scripts/postman_sandbox_api_reference


***如果真的想快速產生Test Code程式碼的話可以用Postman的新功能Postbot。怎麼用Postbot請參考我寫的這一篇文章。

Postman之AI助理 Postbot



使用介面測試


  • 寫完測試CODE,可以發送請求。可以發現Test Results裡面測試結果


  • 使用Runner功能批量執行測試請求



  • 使用命令列進行測試

  • 安裝newman

    1. npm install -g newman

    2. brew install newman


  • newman執行指令


newman run "collection path" -e "environment path"


例:newman run /Users/hello/Documents/PostmanTesting/Postman_testing.postman_collection.json

-e /Users/hello/Documents/PostmanTesting/Demo100_Records.postman_environment.json


官方明提供幾種格式cli, json, junit, progress, emojitran並且在使用 -r 後面帶的格式名稱不可以有空白。預設沒有Html報表......


執行過程可以下-r 的時候附加 cli,就可以看到執行過程。


例: 

newman run /Users/hello/Documents/PostmanTesting/Postman_testing_collection.json -r json,cli


下 -e 就可以用環境變數檔

newman run "collection path" -e "environment path"

 例:

newman run /Users/hello/Documents/PostmanTesting/Postman_testing_collection.json -e

/Users/hello/Documents/PostmanTesting/Demo100_Records.postman_environment.json -r json,cli


 html報表需安裝套件
陽春版:npm install -g newman-reporter-html
彩色版:npm install -g newman-reporter-htmlextra

           例: (彩色版)

            newman run /Users/hello/Documents/PostmanTesting/Postman_testing_collection.json -e  /Users/hello/Documents/PostmanTesting/Demo100_Records.postman_environment.json -r htmlextra --reporter-htmlextra-export /Users/hello/Documents/PostmanTesting/TestResult/result.html




  1. API測試

    API測試(接口測試)是軟體測試的一種,它包括兩種測試類型:

      • 狹義上指的是直接針對應用程式接口的功能進行的測試;
      • 廣義上指集成測試中,通過調用 API測試整體的功能完成度、可靠性、安全性與性能等指標

API測試流程


    1. 編寫API測試計畫
    2. 編寫API測試案例
    3. 執行測試
    4. 持續整合API自動化測試


API測試概念圖







自動化測試工具架構與流程(AWS)

        
  1.  利用Postman GUI編寫API與測試項目
  2.  匯出測試項目成JSON檔與環境變數檔
  3.  將匯出測試項目成JSON檔與環境變數檔提交到AWS CodeCommit上去
  4.  建一個Buildspec檔(buildspec.yml)
  5.  建一個S3 桶子來儲存測試報表
  6.  創建一個AWS CodeBuild 專案
  7.  創建一個AWS CodePipeline在CodeCommit有更新時來驅動CodeBuild
  8.  最後的結果是在S3的桶子裡有此次的NewmanTesting報表



 使用AWS CodeBuildAWS CodePipeline  Postman 自動化您的API 測試


參考此篇文章:


https://aws.amazon.com/tw/blogs/devops/automating-your-api-testing-with-a ws-codebuild-aws-codepipeline-and-postman/


Step 1. Fork the Github repository


Step 2. Clone the forked repository

將分支的存儲庫Clone到本地開發環境中


Step 3. Create an Amazon S3 bucket

此存儲桶包含與此項目相關的資源。
Using the AWS CLI: aws s3 mb s3://<UNIQUE_BUCKET_NAME>


Step 4. Edit the buildspec file

  • 將 petstore-api-buildspec.yml 中的文本內的 REPLACE_ME_WITH_UNIQUE_BUCKET_NAME 替換為上面第 3 步中創建的存儲桶名稱。
  • commit更改到github上

Step 5. Store Postman collection and environment files in S3

  1. 導航到 02postman資料夾。對於這個項目,我們包含了一個 Postman 集合文件

    PetStoreAPI.postman_collection.json


  2. 使用 AWS CLI 將 Postman 集合文件保存在 S3 

    aws s3 cp PetStoreAPI.postman_collection.json \ s3://<REPLACE_ME_WITH_UNIQUE_BUCKET_NAME>/postman-env-files/PetStoreAPI.postman_collection.jso n


  3. 使用 AWS CLI 將 Postman 環境文件保存到 S3 

    aws s3 cp PetStoreAPIEnvironment.postman_environment.json \ s3://<REPLACE_ME_WITH_UNIQUE_BUCKET_NAME>/postman-env-files/PetStoreAPIEnvironment.postman_env ironment.json


  4. 使用 AWS CLI 將 update-postman-env-file.sh 保存到 S3 

aws s3 cp update-postman-env-file.sh \

s3://<REPLACE_ME_WITH_UNIQUE_BUCKET_NAME>/postman-env-files/newman/update-postman-env-file.sh


Step 6. Create the PetStore API pipeline

        我們現在創建 AWS CodePipeline PetStoreAPI 管道,它將部署和測試我們的 API。我們使用 AWS CloudFormation 模板 (petstore-api-pipeline.yaml) 來定義管道和所需的階段,
使用 AWS CLI 部署 AWS CloudFormation 模板:
aws cloudformation create-stack --stack-name petstore-api-pipeline \
--template-body file://./petstore-api-pipeline.yaml \
--parameters \
ParameterKey=BucketRoot,ParameterValue=<3步驟建立的存儲桶名稱(aws-with-postman)> \ ParameterKey=GitHubBranch,ParameterValue=master \ ParameterKey=GitHubRepositoryName,ParameterValue=aws-codepipeline-codebuild-with-postman \ ParameterKey=GitHubToken,ParameterValue=<此處要去github建立要用的token(建立連結)> \ ParameterKey=GitHubUser,ParameterValue=<your github username> \
--capabilities CAPABILITY_NAMED_IAM
此命令創建一個 CodePipeline 管道和所需的階段,以使用 CodeBuild 和 Newman 部署和測試我們的 API。打開 CodePipeline 控制台以觀察您的管道執行並監控不同的階段,



             

執行結果






參考資訊

https://dotblogs.com.tw/im_sqz777/2018/08/16/002431

https://www.itread01.com/content/1545094295.html

https://www.itread01.com/content/1546579836.html

https://www.jishuwen.com/d/2Ecj/zh-tw

https://dev.to/charanrajgolla/json-schema-validation-in-postman-using-external-json-files-1jnc

https://medium.com/cubemail88/newman-%E4%B8%80%E5%80%8B%E8%AE%93-postman-api-testing-%E8%87%AA%E5%8B%95%E5%8C%96%E7%9A%84%E5%A5%BD%E5%B9%AB%E6%89%8B-8e12a6956a25 
(newman 一個讓 postman api testing 自動化的好幫手)

https://json-schema.org/

https://malagege.github.io/blog/2018/11/05/postman%E9%A9%97%E8%AD%89JSON-Schema%E6%96%B9%E6%B3%95/ (postman驗證JSON Schema方法)

https://www.npmjs.com/package/newman-reporter-htmlextra (製作報表) https://www.npmjs.com/package/newman-reporter-html (製作報表)

https://unmesh.me/2017/06/10/api-testing-with-postman-collections-in-aws-c odepipeline/ (API Testing with Postman Collections in AWS CodePipeline )

https://learning.postman.com/docs/running-collections/using-newman-cli/co mmand-line-integration-with-newman/#using-newman-with-cicd (newman 指令)

2023年9月20日 星期三

Postman Mock Server & Mock API

 在前後端分離的架構下,在 api 規格開出來後前端需等待後端完成 api 後才能做後續的開發;或是當不只是一個部門開發時,可能需要與其他部門合作等待對接API資料時。Mock Server能回傳假資料供前端使用,等後端完成 api 後他只需要切換 end point 就能使用真實資料。

Postman Mock Server 是一個可以快速建立 API Server 的工具,它可以讓您在沒有真實 API 的情況下,發出請求並返回 Postman 中定義的模擬數據。您只需要為您的請求添加一個或多個示例,然後創建一個模擬服務器,就可以模擬真實 API 的行為。Postman有可以每個月呼叫 1000 次 mock server  的免費額度,超過就必須要付費了。可以從這裡看到使用量。

使用 Postman Mock Server 建立 Mock API 的步驟:


1. 選擇一個現有的集合或添加一個新的集合(添加新的請求)。


2.選擇 Method 跟填寫 request 的 URL path。例如,如果您要模擬一個 GET 請求,可以填寫 /home_index。如果API已經設計好要回傳的內容也可以一併填入Request Body中。


3.給您的模擬服務器起一個名字,選擇是否要讓這個服務器是私人的(如果是私人的,您需要在Header中添加x-api-keyPostman API key),選擇是否要配置一個延遲模擬響應(例如模擬 2G/3G 網路或指定自定義延遲)。取得Postman API Key可以參考這裡


4.點擊「Create Mock Server」。Postman 就會顯示您使用模擬所需的詳細信息,包括Mock server的 URL。



5.點選左上角的Collections,Postman已經將第2步驟設定的 request添加進Collections內了。這裡您可以設定一個或是多個request和 對應的response(如果您需要讓 API 收到不同的參數而給不同的Reapose)。例如,如果您要模擬一個返回用戶資料的 JSON 格式響應,可以填寫如下:
{
"name": "Alice",
"age": 25,
"gender": "female"
}

6.按下「Save」,示例就更新完成,可以測試了。

7.使用您的模擬 URL,您可以立即開始發出請求。例如,如果您的模擬 URL 是 https://2ea7ee58-3881-4e72-961f-5c6ec20~~.mock.pstmn.io,那麼您可以發出 https://2ea7ee58-3881-4e72-961f-5c6ec20~~.mock.pstmn.io/getUser 這個請求,並收到您設定的示例響應。


網址參數設定:


可以針對不同的網址參數來做設定,就可以用來模擬分頁的功能。
點選左上角的Collections,點選之前建立的request 旁的『...』按鍵  ,選擇『Add example』建立新的example。設定參數與Response資料。然後儲存起來就是一個可以測試的API了。
先設定page1:

再設定Page2:

各自執行API就會顯示對應頁面的資訊。如果回應連結還有套上Mock API url的話在page1點選links 裡面 "next"的url會跳至page2,在page2點選links 裡面"first"的url會跳至page1。

除了參數與回應可以設定外還可以模擬錯誤回傳如回應時status code不等於200(Success)。
在新的example內點選headers 設定一組key為x-mock-response-code value=400的回傳值。儲存起來。

執行這組example就會得到Status為400 Bad Request及對應的回應。

Response給隨機資料:


Postman 本身就有提供給隨機資料的參數,主要在 example response 那邊把固定值改填參數就行。
隨機參數可以參考Postman的Dynamic variables文件。postman給的隨機參數資料為:
{
"name":"{{$randomFullName}}",
"userName":"{{$randomUserName}}",
"location":"{{$randomCity}}",
"company":"{{$randomCompanyName}}",
"jobTitle":"{{$randomJobTitle}}",
"updatedAt":"{{$timestamp}}"
}
將其此設定放到Example的Response回應中定儲存起來。

執行此Mock API就會得到下面的結果

設定Mock Server為私有的(Private)

如果Mock Server沒有設定為Private時,這個mock server 的 url 都是公開的。如果想要都一點安全防護的話可以將Mock Server設定為Private(私有的)。
可以從建立時勾選make mock server private外。也可以去編輯並選擇建立好的Mock Server。如下圖

進入選擇的會出現此Mock Server的log。在點選右上角的Edit Configuration鍵。

進入設定頁面時勾選Make mock server private並按下Update Mock Server鍵將設定儲存下來。

變成私有的Mock Server後所有 request 都需要Postman API Key,所以可以把它加入到 Environment,變數名稱為『x-api-key』。然後在Request的 Headers 的TAB下加入『x-api-key』這個參數並將環境變數 {{x-api-key}}設定為值。按下Send鍵就會得到正確的回傳值。

沒有設定的話就會出現就會出現認證錯誤的回傳



參考資訊:


Postman之AI助理 Postbot

 我們在Postman會寫測試CODE來測試API。現在Postman搭上了AI列車推出了Postbot,使用Postbot可以幫助你更快地編寫測試Code,大幅提昇 API 測試的開發效率


Postbot 目前可以
1.為集合產生測試,Postbot提供了一種透過幾個簡單步驟為整個集合產生測試的方法。
2.快速修復任何損壞的測試,Postbot 將幫助您快速修復任何失敗測試中的語法或結構錯誤。
3.直覺的提示和改進的性能,現在可以嘗試要求 Postbot 產生自訂視覺化或修復特定測試,您會發現更好的結果。
4.Writing FQL(Flows Query Language) in Postman Flows

如何使用Postbot:

快速為Collection生成測試Code:

1.點選最上層Collection旁的『...』鍵會出現一堆選項,選擇『Generate tests』項目(現在為beta版)。如下方圖示:


2.點選完『Generate tests』選項後會出現此集合下所有的Requests的測試項目。如果沒有測試項目就會出現『No Tests』。此時可以點選右上角紫色的『Generate tests』按鍵。




3.點選『Generate tests』按鍵後,Postbot會將每個Request送出並陸續地將測試Code產出。產出完所有的測試Code後可以按下右上角的『Save tests』鍵將所有的測試Code儲存起來。


快速為Request生成測試Code:

1.進入到某一個Request中點選Tests,然後右邊會出現個 Script with Postbot



2.點選Script with Postbot 下方會出現一個對話框。在這裡可以點選下方幾個選項或是自行輸入一些提示(Prompt),例如點選Add tests to this request 這個選項卡,這樣就會自動產生測試Code了。


3.產出測試Code前需要先發出Http Request,並且得到回應Postbot才會幫你撰寫產出測試案例。
例如





自行輸入提示(prompts)

1.也可以自行輸入你的需求,Postbot也會回應你的需求。但是最好是輸入英文啦,它目前好像看不懂中文。
例如 : Can you tell me how to use Postman Flows works?

2.還可以問後續的問題
例如: Do you have some example Flows I can see


產出視覺化的回應資料

Postbot還可以將Request回應的資料視覺化例如是表格化、圖表化。
1.點選 Visualize response.... 這個選項卡會出現下一層的選項卡,如果要表格化的話按下...as table這個選項卡後神奇的事情出現了......

2.Postbot會將回應的json資料轉化成表格資料顯示出來。





參考資訊:

(使用 Postman 進行 API 測試的幾個開發小技巧)