CIで悪いネットワークを再現する
ウィンドウは必須ではありません。同じ実行ファイルがコマンドラインツールとして動き、指定した時間で自動的に終了し、何が起きたかをパイプラインが読める形で報告します。
1ステップの形
テストの間だけ劣化させ、あとは自動で止まらせます。忘れてはいけない後片付けのステップはありません:
BeanNetworkTester.exe --loss 10 --latency 200 --target myapp.exe --duration 60
GitHub Actionsのジョブで、セルフホストのWindowsランナーを使う場合:
- name: Test the app on a poor connection
shell: pwsh
run: |
Start-Process -FilePath BeanNetworkTester.exe `
-ArgumentList '--loss 10 --latency 200 --target myapp.exe --duration 90'
npm test
ランナーについて2点。通信の取得には管理者権限が必要で、ホスト型ランナーはそれを与えてくれないため、セルフホストのWindowsマシンで使うことになります。
すべての終わり方に終了コードがある
スタックトレースで終わることはありません。実行が終わるあらゆるパターンに番号があるので、パイプラインは「アプリが失敗した」と「ツールが起動できなかった」を区別できます:
| コード | 意味 |
|---|---|
| 0 | 指示どおりに完了しました。 |
| 1 | 実行中に何かが失敗しました。 |
| 2 | コマンドラインの指定が正しくありません。 |
| 3 | 設定または値が不正です。 |
| 4 | シナリオファイルが受け付けられませんでした。 |
| 5 | ファイルを読み書きできませんでした。 |
| 6 | 実行結果に関する検証(アサーション)が成立しませんでした。 |
| 7 | 管理者権限がないため、ドライバーを読み込めません。 |
| 130 | 中断されました。多くの場合は Ctrl+C によるものです。 |
| 143 | 外部から終了されました。 |
機械で読める出力
--format json は1行につき1つのJSONオブジェクトを書き出します。実行中はサンプル、最後はサマリーなので、後続のステップでそれを検証できます:
BeanNetworkTester.exe --loss 5 --duration 30 --format json > run.ndjson
ログ行は標準エラーに、データは標準出力に出るため、データをリダイレクトしても2つが混ざることはありません。--seed で実行を再現可能にできます。不安定なテストが、議論の前にまず必要とするものです。
何にも触れないドライラン
2つのフラグのおかげで、信頼する前に安心して組み込めます。--dry-run は設定が何をするかを報告して終了し、--simulate はドライバーを読み込まず、ネットワークにも触れずに、合成トラフィックでエンジン全体を動かします。どちらも、実行しているマシン自体を劣化させてはいけないビルドで役立ちます。