需求改變的那一刻
發送請求回答的是「這個端點現在的行為是什麼」。檢查回答的是「這個端點是不是還在做它該做的事」。後者需要三樣前者不需要的東西:一個存放預期結果的地方、一種不必有人在場也能執行的方式,以及一種在答案改變時能被察覺的方式。
工具之所以長得不一樣,原因全在這裡。這點值得講明,因為很多團隊試圖靠把請求加進書籤來達成同樣的目的。
ReqBin 替代方案需要補上什麼
| 面向 | 臨時發請求的工具 | TestSprite |
|---|---|---|
| 你得到什麼 | 一段自己讀的回應 | 一個對照預期結果得出的判定 |
| 預期結果存在哪裡 | 在你腦子裡 | 在測試案例裡,並納入版本控制 |
| 誰來執行 | 你,在你想到的時候 | 建置流程,每次變更時 |
| 多步驟流程 | 手動在不同分頁之間複製數值 | Dynamic Variables 與 Dependency Chains |
| 清理 | 你記得要刪的那些 | 與該次執行綁定的 Auto-Cleanup |
| 通知 | 沒有 | pull request 上的一則留言,或一次 commit 檢查 |
三個問題,告訴你需要什麼
還會有別人需要執行這個嗎? 如果會,它就必須離開你的瀏覽器。
這個流程牽涉到不只一次呼叫嗎? 只要有數值必須在請求之間傳遞,手動複製就撐不下去了。
如果它在半夜壞掉,你會想知道嗎? 這就是工具與檢查之間的分界線。
只要有一個答案是「是」,就代表請求發送工具已經不夠用了。三個都是,代表你早就該換了。
不要買過頭
如果你真的只是偶爾要發個請求,那就繼續這樣做。ReqBin 和 curl 都很好用,這裡沒有任何一句話是在反對它們。值得換的時機,是請求開始附帶一個預期結果的時候,在那之前都不必。
該怎麼評估這些工具
故意弄壞一個東西。製造一個真實的迴歸問題,例如儲存後資料不再留存,然後看每個候選工具回報什麼。它會不會判定為失敗、失敗訊息有沒有指出真正的落差,以及負責修的人能不能直接從那份輸出開始,而不必自己重新把來龍去脈推一遍。如果一次根本沒跑到斷言的執行被回報為通過,那這個工具就沒通過唯一重要的那項測試。
大家會跳過的中間步驟
在瀏覽器分頁裡發請求,和建立一整套測試套件之間,其實還有一塊中間地帶;跳過它,正是很多團隊在臨時工具上待得比該待的久的原因。
這個步驟就是把預期結果寫下來,寫在哪裡都可以。一個文字檔,記下是哪個端點、你送了什麼、應該回來什麼,這稱不上自動化,但它已經給了你瀏覽器分頁給不了的兩件事:別人也能執行它,而且你分得出答案有沒有變。多數以為自己需要工具的團隊,真正需要的是這個,而要發現這件事只花十分鐘。
真正需要更多東西的時間點,是手動執行這件事開始不再發生的時候。那是排程問題,不是表達能力的問題,也正是升級到一套真正的測試套件所換來的東西。
開始使用
終端機
npm install -g @testsprite/testsprite-cli
testsprite setup
對於不想在本機安裝的人,儀表板同樣能完成這些事,而完整的指令則收錄於 CLI 儲存庫。
兩條路徑,而選哪一條,其實取決於建置流程由誰負責。從儀表板串接 GitHub App 完全不需要改動你的儲存庫,因為它是對你的建置本來就會產出的部署做出反應。加上一個 GitHub Actions 步驟,則是把這項檢查放進儲存庫裡,讓它像建置的其他部分一樣被審查。
當一個請求變成檢查,你會得到什麼
一個存放預期結果的地方、一個不是你的觸發機制,以及答案改變時的通知。這三樣就是全部的差別,而它們正是 TestSprite 提供的東西。
多步驟流程不再是複製貼上的苦工:Dynamic Variables 會把識別碼從一次呼叫帶進下一次,Dependency Chains 會判斷什麼必須先發生。Auto-Cleanup 會移除某次執行所建立的東西,讓第十次執行的表現和第一次一樣。
上手很快。把一個專案指向你的 base URL,讓 Discovery 列舉出所有端點,檢視計畫,再把它接上你的儲存庫,讓它在每次變更時執行。如果你真的只是偶爾要發個請求,那就繼續這樣做;這是為了請求開始附帶預期結果的那個時間點而準備的。
curl 是不錯的替代方案嗎?
就發送請求而言,是的,而且它跟腳本搭配得更好。它有同樣的限制:沒有預期結果、沒有排程、沒有通知。
我們需要帳號嗎?
臨時發請求不需要。但如果檢查要在沒有你的情況下執行,就得有東西保存預期結果與歷史紀錄,而那意味著需要一項服務。
那共用的 Postman collection 呢?
是個合理的中間步驟。它給了你可以分享的請求,而 session、執行順序和清理則會變成你得自己維護的腳本。
在第一項檢查跑起來之前,要做多少設定?
把一個專案指向你的 base URL,讓 Discovery 列舉出所有端點,檢視計畫。需要判斷力的部分,是檢視。
它能測試私有 API 嗎?
它需要一個連得到的目標。位於私有網路上的服務,需要一個對外可存取的環境才能執行 API 測試。