Newman vs k6: CIにおけるAPIテストと負荷テスト
両者はテストする対象が異なります。Newmanは機能テストやAPIの契約チェックのためにPostmanコレクションを実行し、k6はスクリプト可能な負荷/パフォーマンスツールです。多くのチームは正しさの検証にNewman、パフォーマンス検証にk6を使います。
Newmanとk6はどちらもCIでAPIに対して実行されますが、目的が異なります。NewmanはPostmanのコマンドラインランナーで、Postmanコレクション(リクエストとアサーション)を実行し、Postmanで作成したのと同じ機能的なAPIテストをCIの一部として実行できます。k6は開発者向けの負荷テストツールで、JavaScriptでシナリオを書き、並行負荷下でのレイテンシとスループットを計測し、パフォーマンスのしきい値に対してアサートします。
| Newman | k6 | |
|---|---|---|
| 主な目的 | 機能的なAPIテスト(コレクション) | 負荷テストとパフォーマンステスト |
| テストの定義 | Postmanコレクション + JSアサーション | JavaScriptのテストスクリプト |
| 並行モデル | 逐次リクエスト | 仮想ユーザー(高い並行性) |
| メトリクス | 成功/失敗のアサーション | レイテンシ、RPS、しきい値 |
| 最適な用途 | 契約/スモークのAPIチェック | パフォーマンス回帰、ストレステスト |
| GUIからの再利用 | はい(Postman) | いいえ(コードファースト) |
両者は異なるニーズをカバーする
すでにPostmanコレクションを保守していて、APIの機能的な振る舞い(ステータスコード、レスポンスの形、ビジネスアサーション)でマージをゲートしたいならNewmanを使いましょう。負荷下でのAPIの振る舞いを知る必要があり、「95パーセンタイルのレイテンシが500ms未満」のようなしきい値で回帰時にビルドを失敗させたいならk6を使いましょう。両者は異なる問いに答えるものであり、多くの場合別々のCIジョブで実行されます。
CIでは
Newmanは自然なスモーク/契約テストのステージです。実行が速く、アサーション失敗時に非ゼロで終了し、runner向けにJUnit/HTMLレポートを生成します。k6のパフォーマンスジョブはより重いため、チームはPRごとではなくスケジュールやオンデマンドで実行し、結果をしきい値と比較して回帰を検出することが多いです。重い負荷テストはPRのクリティカルパスから外し、runnerのコストと時間を抑えましょう。
率直な注意点
Newmanは負荷ツールではありません。リクエストを逐次実行し、並行負荷下でのパフォーマンス計測を意図していません。k6はコードファーストなので、PostmanのGUIワークフローは得られず、現実的な負荷を実行するにはデフォルトのrunnerが提供する以上のリソースが必要になることがあります。一方に両方をこなさせようとするのではなく、それぞれを本来の用途に使いましょう。
結論
機能テストやAPIの契約テストにはNewmanを、特にすでにPostmanを使っている場合に使いましょう。しきい値を伴う負荷テストやパフォーマンステストにはk6を使いましょう。両者は競合するのではなく補完し合います。