跳到內容

在持續整合中自動化 API 測試

在介面裡建構好的情境,可以原封不動地在您的管線中執行。本指南談的是規模化的部分。

  • 一個 ProEnterprise 方案。
  • 一個組織權杖rstk_…),放進您 CI 的密鑰保險庫。(從儀表板自助建立這個 權杖的功能即將推出。)
Terminal window
RESTORM_TOKEN=$RESTORM_TOKEN restorm \
--open ./api.restorm \
--run "Tests de fumée" \
--headless \
--all-logs \
--out run.log \
--param baseUrl=$BASE_URL

結束代碼 0 = 成功,1 = 情境失敗,2 = 呼叫方式錯誤,3 = 權限被拒。

Restorm 是一套桌面應用程式:即使不顯示視窗,它還是需要一個顯示伺服器。在 Linux runner 上,請在前面加上 xvfb-run -a

Terminal window
xvfb-run -a restorm --open ./api.restorm --run "Tests de fumée" --headless

永遠不要把密鑰寫進專案。請用環境變數這種密鑰來源宣告您的敏感變數;由您 CI 的 保險庫注入,Restorm 再讀取它們。請參閱密鑰

env:
API_TOKEN: ${{ secrets.API_TOKEN }}

兩種互補的做法:

  1. 一個情境參數,型別為 environment--param Env=staging。同一個情境就能 對任何目標執行。
  2. 一般的參數--param baseUrl=…--param tenant=…

轉換會依照參數宣告的型別進行;一旦無法轉換,啟動會立刻失敗,而不是帶著錯誤 的值繼續執行。請參閱 情境中的變數與資料

--out run.log 會把記錄逐步寫出。請把它發佈為產出物,就算作業失敗也要發佈 — 那正是它最有用的時候。

- uses: actions/upload-artifact@v4
if: always()
with:
name: journal-restorm
path: run.log

幾個習慣,會在凌晨三點看到一個紅色作業時徹底改變局面:

  • 寫清楚斷言訊息。 Assert 動作的 message 欄位, 就是會出現在記錄裡的那段文字:請把原本預期的結果寫進去。
  • 在關鍵步驟留下記錄。 不加 --all-logs 時,只有 Log 動作的項目會被 輸出:那就是您的敘事主線。
  • 用結構驗證取代逐欄斷言。Schema validateerrors 輸出接到一個 Log 上:您就會拿到一份精確的違規清單。
  • 在關鍵的 else 輸出上接 Throw,讓結束代碼能反映失敗。
  • 在不穩定的網路呼叫外面包一層 Retry,而不是容忍時好時壞的測試。請參閱 控制

請把清理動作接在主情境的 done 連接埠上:done 會等到整個子圖都結束。 請參閱連接埠與連結

陷阱解法
作業卡在等待輸入請用 --param 提供所有參數;在 headless 模式下,任何東西都無法向使用者詢問
Toast 動作沒有顯示這是正常的:它在 headless 模式下不會有作用。請改用 Log
MCP 伺服器沒有出現這是刻意的:沒有真正的顯示器時,它永遠不會啟動
結束代碼 3不是權杖就是方案 — 訊息會指明是四種情況中的哪一種
專案檔案的位置變了--open 接受相對於儲存庫的路徑:請讓它保持相對

GitHub Actions 與 GitLab CI 的管線都在 headless 執行與 CI 裡。