API テストをどれくらいの時間実行するべきか¶
単体テストや統合テストなどの他のテスト手法とは異なり、ファズ テストにとって「完了」の定義はあいまいです。一般的に、長く mapi
を実行するほど多くのエンドポイント、そして背後にあるコードがカバーされます。
ランの持続時間は、いくつかのターゲット API の性質に依存します。例えば、以下のような性質を考慮します。
- CLI と API 間の遅延時間 - 一般的に、ローカルな API ほど遅延は短くなります
- API 構成 - API に高い同時実行数を処理するための複数のスレッド/ワーカーが構成されているかどうか
- エンドポイントの数 - API のエンドポイントは数個かそれとも数百か
以下は、ターゲット API のテストで適切な選択を行うのに役立つ指針です。
同時実行リクエスト数¶
Mayhem は、複数の CPU コアを持つマシンでは、自動的に同時実行モードで実行されます。同時実行性が高いほど、より多くのリクエストを並行してターゲット API に送信できます。デフォルトの同時実行性レベルは "4" または CPU コアの数のうち、少ない方です。
mapi run
コマンドに --concurrency
フラグを渡すと、並行実行されるファザーの数を増やすことができます。
たとえば、8
個の並行スレッドを実行するには、mapi run
に --concurrency 8
を渡します。
mapi run \
<target_name> \
auto \
<path_to_api_specification> \
--url "https://example.com" \
--concurrency 8
自動ラン持続時間¶
Mayhem を初めて使用する場合、またはどれくらい長くスキャンを実行するべきか確信がない場合は、持続時間を自動にして実行することを推奨します。auto
持続時間を指定して実行すると、mapi
はすべてのエンドポイントに対して少なくとも 100 回リクエストを試行します。
自動持続時間を指定して実行するには、mapi run
コマンドに文字列 auto
を渡します。例:
mapi run \
<target_name> \
auto \
<path_to_api_specification> \
--url "https://example.com"
自動ラン持続時間を使用するべきケース¶
- Mayhem を初めて実行する場合
- API のサイズが変わるにつれて自動的に
mapi
を調整したい場合
最小リクエスト回数を調整する¶
Info
auto
持続時間を指定して実行すると、mapi
はすべてのエンドポイントに対して少なくとも 100 回リクエストを試行します。
auto
で実行する際、--min-request-count
フラグを使用すると、エンドポイントへの最小リクエスト回数のしきい値を変更できます。たとえば、デフォルトの 100
回よりも多く API を実行するには、最小リクエスト数のしきい値を増やすとよいでしょう。
例:
mapi run \
<target_name> \
auto \
<path_to_api_specification> \
--min-request-count 500
--url "https://example.com"
時間固定ラン持続時間¶
固定持続時間を指定して実行した場合、mapi
は持続時間が経過するまでターゲット API をスキャンし続けます。持続時間は mapi run
コマンドの一部として指定します。
例:
mapi run \
<target_name> \
5min \
<path_to_api_specification> \
--url "https://example.com"
持続時間の構文は非常に柔軟であり、秒、分、時間などの単位で時間を指定できます。
- Run for 30 seconds [30s or 30sec]
- Run for 90 minutes [90m or 90min]
- Run for 1 hour [1h or 1hr]
- Run for 2 hours and 20 minutes [2h20m]
時間固定ラン持続時間を使用するべきケース¶
固定持続時間によるスキャンは、Mayhem を実行したいが、計算時間/リソースが限られている場合に最適です。たとえば、継続的ビルド パイプラインの一部として mapi
を実行している場合、どれくらい時間がかかるかわからないステップの実行は望ましくないでしょう。固定持続時間を選択すると、mapi
ステップにかかる時間を明示できます。