ほとんどのAPIテストチュートリアルはGUIを前提にしています。しかし、ターミナルで実行し、CIに組み込み、設定やテスト定義をコードレビューしたいなら、CLIベースのAPIテストが適しています。オープンソースのCLIツールでは、監査可能なライセンス、セルフホスト可能なバイナリ、リポジトリにコミットできる設定ファイルを利用できます。
重要なのは「最速のツール」や「最小のバイナリ」ではなく、ライセンスと制御です。アカウント登録なしで自社ネットワークやCIランナー上で動かせるか、ソースコードがOSI承認ライセンスで公開されているか、ベンダーの価格変更後もパイプラインを維持できるかを確認しましょう。
この記事では、REST、GraphQL、HTTP APIをテストするための無料かつソースコードが利用可能なCLIツールを8つ紹介します。各ツールについて、ライセンス、インストール方法、最初に実行するコマンド、向いている用途をまとめます。ホスト型ツールも含めて比較したい場合は、ベストフリーAPIテストツールまとめを参照してください。ターミナルからエンドポイントを直接操作する方法は、REST APIテストのcurl代替ガイドで解説しています。
APIテストCLIにおける「オープンソース」の条件
無料でダウンロードできることと、オープンソースであることは同じではありません。本記事で扱うツールは、次の条件を満たします。
正式なライセンスがある
ソースコードがMIT、Apache-2.0、MPL-2.0、AGPL-3.0、BSDなどのOSI承認ライセンスで公開されています。利用条件を確認し、必要に応じてソースを監査・フォークできます。セルフホスト可能で、アカウントが不要
登録なしでローカルマシンやCIランナーから実行できます。活動状況を検証できる
GitHub上でコミット履歴やIssueを確認できます。運用中のパイプラインに組み込む前に、保守状況を確認してください。
ライセンスは実装上の要件です。たとえばAGPL-3.0のk6は、k6を利用してサービスを構築・提供するケースではコピーレフト義務を確認する必要があります。一方、MITやApache-2.0はより寛容です。製品へ組み込む前に、必ずライセンス原文を確認しましょう。
Hurl: プレーンテキストでHTTPテストを書く
Hurlは、HTTPリクエストとレスポンス検証をプレーンテキストで記述するツールです。Rustで開発され、内部でlibcurlを使用し、単一バイナリとして配布されます。テスト定義がそのままHTTP通信として読めるため、プルリクエストでレビューしやすい点が特徴です。
- ライセンス: Apache-2.0
- ソース: github.com/Orange-OpenSource/hurl
インストールと実行
brew install hurl
# または:
cargo install --locked hurl
まずはログインAPIのレスポンスにトークンがあることを検証します。
cat > login.hurl <<'EOF'
POST https://api.example.com/login
{ "user": "acme", "pass": "s3cret" }
HTTP 200
[Asserts]
jsonpath "$.token" exists
EOF
hurl --test login.hurl
向いているケース
- Gitで管理するスモークテスト
- 読みやすいHTTP契約チェック
- CIでの単発・複数リクエスト検証
注意点
HurlはHTTPに特化しています。gRPCテストや負荷生成には対応していません。複雑なフローでは、スクリプトを書く代わりに複数の.hurlファイルを管理する構成になります。
Step CI: YAMLで宣言するAPIワークフロー
Step CIは、CI実行を前提にしたYAMLベースのワークフローランナーです。REST、GraphQL、gRPC、tRPC、SOAPを単一のワークフローファイルで扱えます。OpenAPIスキーマの検証や負荷テストにも対応しています。
- ライセンス: MPL-2.0
- ソース: github.com/stepci/stepci
インストールと実行
npm install -g stepci
workflow.ymlにステップ、チェック、値のキャプチャを定義して実行します。
stepci run workflow.yml
向いているケース
- 複数APIをまたぐログイン・購入・登録フロー
- ローカルとCIで同じ定義を使いたいチーム
- YAMLでAPIテストを宣言的に管理したい場合
注意点
MPL-2.0は弱いコピーレフトライセンスです。Step CI自身のファイルを変更する場合、その変更の公開義務を確認してください。アプリケーションのテストとして利用するだけなら、その義務は発生しません。
Schemathesis: OpenAPI・GraphQLスキーマからテストを生成する
Schemathesisは、OpenAPIまたはGraphQLスキーマからプロパティベーステストを生成します。PythonのHypothesisを利用し、入力値をファジングして500エラー、スキーマ違反、ドキュメントと異なるレスポンスを検出します。
- ライセンス: MIT
- ソース: github.com/schemathesis/schemathesis
インストールと実行
uv pip install schemathesis
# または:
pip install schemathesis
公開済みのOpenAPI定義を指定して実行します。
schemathesis run https://api.example.com/openapi.json
向いているケース
- リリース前にエッジケースを探索したい場合
- OpenAPIスキーマをテストの入力として活用したい場合
- 手動で想定しにくい異常系を検出したい場合
注意点
実行には正確なスキーマが必要です。大規模APIでは大量のテストケースが生成されるため、フックやオプションで対象を絞り込む必要があります。
Dredd: API仕様と実装の契約テスト
Dreddは、稼働中のAPIがOpenAPIまたはAPI Blueprintの記述どおりに動作するかを確認します。仕様に書かれたリクエストを実際のバックエンドへ送信し、レスポンスを仕様と比較します。
- ライセンス: MIT
- ソース: github.com/apiaryio/dredd
インストールと実行
npm install -g dredd
API BlueprintファイルとローカルAPIサーバーを指定します。
dredd apiary.apib http://127.0.0.1:3000
向いているケース
- APIドキュメントと実装の乖離を検出したい場合
- CIで仕様準拠を確認したい場合
- セットアップ・ティアダウン用フックを利用したい場合
注意点
Dreddのリポジトリは2024年11月にアーカイブされ、読み取り専用です。現在も動作しますが、将来的な修正は期待できません。継続的に保守されるスキーマ駆動ツールが必要な場合は、Schemathesisを優先してください。
k6: JavaScriptで負荷テストを記述する
k6はGrafanaが提供する負荷・パフォーマンステストツールです。JavaScriptまたはTypeScriptでシナリオを書き、Goベースのエンジンで多数の仮想ユーザーを実行できます。
- ライセンス: AGPL-3.0
- ソース: github.com/grafana/k6
インストールと実行
brew install k6
スタータースクリプトを生成して実行します。
k6 new script.js
k6 run script.js
向いているケース
- APIの負荷テスト
- パフォーマンステスト
- ソークテスト
- 機能テストと同じリポジトリで負荷シナリオを管理する場合
注意点
k6は負荷試験向けです。詳細な契約アサーションを主目的にする場合は、HurlやSchemathesisなどを併用してください。また、AGPL-3.0の条件は、k6のコードを利用してサービスを構築・提供する場合に特に確認が必要です。
Newman: PostmanコレクションをCIで実行する
Newmanは、Postman公式のコマンドラインコレクションランナーです。既存のPostmanコレクションをデスクトップアプリなしで実行できるため、PostmanベースのテストをCIへ移行する際に使えます。
- ライセンス: Apache-2.0
- ソース: github.com/postmanlabs/newman
インストールと実行
npm install -g newman
コレクションと環境変数ファイルを指定します。
newman run my-collection.json -e staging-environment.json
向いているケース
- すでにPostmanコレクションを利用しているチーム
- PostmanのテストをCIで実行したい場合
- 既存コレクションをそのままパイプラインに組み込みたい場合
注意点
NewmanはPostmanコレクション形式に依存します。API設計、モック、テスト定義のための新しいフォーマットを提供するものではなく、既存コレクションを実行するツールです。
Tavern: pytestに統合するYAML APIテスト
Tavernは、YAMLでAPIテストを記述できるPythonライブラリ・CLI・pytestプラグインです。pytestのフィクスチャ、レポート、並列実行、CI連携をそのまま利用できます。REST、MQTT、gRPCをサポートします。
- ライセンス: MIT
- ソース: github.com/taverntesting/tavern
インストールと実行
pip install tavern
テストファイルを既存のpytestテストと同じ場所に置いて実行します。
pytest test_login.tavern.yaml
向いているケース
- pytestをすでに使っているPythonチーム
- APIテストとユニットテストを同じテストスイートで管理したい場合
- pytestのフィクスチャやレポートを再利用したい場合
注意点
Pythonとpytestのテスト環境を前提とします。Python以外が中心の技術スタックでは、pytestへの依存が導入障壁になる可能性があります。
Venom: 複数エグゼキュータを組み合わせる統合テスト
OVHcloudのVenomは、HTTP、シェルスクリプト、IMAP、Web、データベースなど、複数のエグゼキュータを横断する統合テストツールです。YAMLテストスイートを実行し、CIで利用しやすいxUnit形式の結果ファイルを出力します。
- ライセンス: BSD(修正版)
- ソース: github.com/ovh/venom
インストールと実行
GitHubリリースからバイナリをダウンロード後、テストスイートを実行します。
venom run testsuite.yml
向いているケース
- API呼び出し後にデータベース状態も確認したい場合
- HTTP、スクリプト、メール、DBチェックを単一フローに含める場合
- エンドツーエンドテストの結果をxUnit形式で出力したい場合
注意点
対応エグゼキュータが多いため、YAML定義は冗長になりやすい傾向があります。リポジトリ内の例を参考に、必要なエグゼキュータから段階的に導入するとよいでしょう。
Apidogの立ち位置
Apidogはオープンソースではありません。無料プランを提供する商用製品であり、監査可能なライセンスを必須条件にする場合は、前述の8ツールから選ぶ必要があります。
一方で、複数ツールの組み合わせを管理する代わりに、設計、テスト、モック、ドキュメントを一つの環境で扱いたい場合は選択肢になります。Apidogは、apidog-cliを使ってターミナルやCIからテストを実行できます。
npm install -g apidog-cli
apidog login --with-token <YOUR_TOKEN>
apidog run --access-token <TOKEN>
# 全テスト成功: 終了コード 0
# テスト失敗: 非0
出力にはagentHints.nextStepsを含む構造化JSONが含まれ、スクリプトやAIエージェントとの連携に利用できます。コマンド一覧と利用方法は、完全なapidog-cliガイドを参照してください。
選び方
| ツール | 最適な用途 | インストール | オープンソース? | ライセンス |
|---|---|---|---|---|
| Hurl | Gitで管理するプレーンテキストHTTPアサーション | brew install hurl |
はい | Apache-2.0 |
| Step CI | 宣言型CIワークフロー | npm i -g stepci |
はい | MPL-2.0 |
| Schemathesis | スキーマからのプロパティベースファジング | pip install schemathesis |
はい | MIT |
| Dredd | ドキュメントと実装の契約テスト | npm i -g dredd |
はい(アーカイブ済み) | MIT |
| k6 | 負荷・パフォーマンステスト | brew install k6 |
はい | AGPL-3.0 |
| Newman | CIでのPostmanコレクション実行 | npm i -g newman |
はい | Apache-2.0 |
| Tavern | pytest内のAPIテスト | pip install tavern |
はい | MIT |
| Venom | マルチエグゼキュータ統合テスト | GitHubリリース | はい | BSD |
| apidog-cli | 設計からテストまでの統合ワークフロー | npm i -g apidog-cli |
いいえ(無料プランあり) | 商用 |
選定時は、まずテスト対象を分けると判断しやすくなります。
- 単純なHTTPリクエスト検証: Hurl、Newman
- OpenAPI・GraphQLスキーマからのバグ探索: Schemathesis
- 仕様と実装の一致確認: Dredd
- 負荷・性能検証: k6
- pytestに統合したAPIテスト: Tavern
- API以外も含む統合テスト: Venom
- 設計・モック・テスト・ドキュメントをまとめたい場合: Apidog
テスト戦略全体の中で各手法を整理したい場合は、APIテスト戦略ガイドを参照してください。また、UIを使わずにAPIテストを実行する選択肢は、ヘッドレスAPIテストツールの記事で解説しています。
まとめ
オープンソースのCLIツールを使うと、APIテストの実行環境を自分で監査し、フォークし、自社の条件で運用できます。
- HurlとNewmanは日常的なHTTPリクエスト検証
- SchemathesisとDreddは仕様・契約の検証
- k6は性能と負荷の確認
- TavernとVenomはより大きなテストスイートへの統合
ライセンス、既存のテスト資産、CI環境、必要なテスト種類に基づいて選びましょう。単一ツールに統一する必要はありません。たとえば、Hurlでスモークテスト、Schemathesisでスキーマテスト、k6で負荷テストを実行する構成も実用的です。
設計、テスト、モック、ドキュメントを一か所で管理したい場合は、ApidogとCI向けのapidog-cliを検討できます。Apidogをダウンロードし、既存のCLIツールと比較しながら、自分のパイプラインに合う構成を確認してください。
Top comments (0)