Echolot
コマンドラインとCI

echolot run

ワークスペース、その一部のフォルダやリクエスト、またはPostmanコレクションを、チェック、データファイル、レポート付きで実行します。

echolot run は、ワークスペースのリクエストを順番に送信し、スクリプトとチェックを実行して、何が成功したかを報告します。 ランナーからウインドウを取り除いたもので、CI向けに作られています。Postmanコレクションも、読み込まずにそのまま実行できます。

echolot run [<options>] <source>

<source> は、ワークスペースのフォルダ(workspace.toml があるフォルダ)か、Postmanコレクションのファイルです。

ワークスペースを実行する

echolot run Alpenglow.echolot --folder auth/sign-in --folder catalog
catalog, auth/sign-in

✓ POST   auth/sign-in  200 150 ms
    ✓ Status equals 200
    ✓ JSON value $.access_token exists
✓ GET    catalog/list-products  200 74 ms
    ✓ Status equals 200
    ✓ JSON value $.items.length is greater than 0
    ✓ Header Content-Type contains json
    ✓ Response time (ms) is less than 1000
✓ GET    catalog/search  200 69 ms
    ✓ Status equals 200
✓ GET    catalog/get-product  200 70 ms
    ✓ Status equals 200
    ✓ JSON value $.sku equals {{productId}}
✓ GET    catalog/categories  200 73 ms
    ✓ Status equals 200
✓ GQL    catalog/search-products  200 37 ms
✓ GET    catalog/export  200 410 ms
    ✓ Status equals 200

All 7 requests passed  11/11 checks passed · 0.90 s
  • --folder を指定しない場合は、すべてが実行されます。--folder にはフォルダ(catalog)またはリクエスト(auth/sign-in)を、requests/ 以下のスラッグのパスで指定し、 複数回指定できます。リクエストはワークスペースの順序で実行されます。
  • --env には、環境のファイル名から .toml を除いたもの(staging)か、環境の名前(Staging)を指定します。
  • 各リクエストのチェックと pm.test の結果が集計されます。リクエストは、レスポンスがない場合やチェックが失敗した場合に失敗となり、実行は終了コード1で終わります。
  • 変数にキャプチャされたレスポンス、OAuth 2のクライアント認証情報で取得したトークン、スクリプトが設定した値は、アプリと同じように、実行中の後続のリクエストに引き継がれます。 スクリプトの値はその実行の間だけ有効で、ファイルに書き込まれることはありません。

キーチェーンがない場合(CI、Linux、ECHOLOT_KEYCHAIN=0 の場合)、シークレット変数へのレスポンスのキャプチャは、次のリクエストに引き継がれません。 Alpenglowでは、Sign in が {{token}} をシークレットとしてキャプチャするため、このような実行では Who am I とOrdersフォルダが401になります。 このような実行では、ECHOLOT_SECRET_TOKEN を自分で設定するか、シークレットではない変数にキャプチャしてください。

データ駆動の実行

--data を指定すると、データファイルの行ごとに1回ずつ、すべてを実行します。

  • ヘッダー行のあるCSVファイル:各列が、その行の変数になります。
  • オブジェクトの配列を含むJSONファイル:各キーが変数になります。
echolot run Alpenglow.echolot --folder catalog/get-product --data skus.csv
catalog/get-product · skus.csv, 2 rows

✓ #1 GET    catalog/get-product  200 133 ms
    ✓ Status equals 200
    ✓ JSON value $.sku equals {{productId}}
✓ #2 GET    catalog/get-product  200 88 ms
    ✓ Status equals 200
    ✓ JSON value $.sku equals {{productId}}

All 2 requests passed  4/4 checks passed · 0.22 s

スクリプトは pm.iterationData で行を読み取ります。データファイルがない場合は、--iterations で実行を繰り返します。--concurrency は、指定した数の反復を並行して実行します。 1つの反復のスクリプトが設定した値は、その反復の中にとどまります。

レポート

--reporter はレポートを選び、複数回指定できます。--out は、console 以外の各レポートのファイル名を、--reporter オプションの順に指定します。ファイルのないレポートは標準出力に書き出されます。

レポーター書き出す内容
console上のような行。ターミナルでは色付きです。--reporter を指定しない場合のデフォルトです。
junitJUnit XML:リクエストごとに1つのテストスイート、チェックごとに1つのテストケース。ほとんどのCIシステムが読み取れます。
json実行全体をJSONで:すべてのリクエストと、そのステータス、所要時間、サイズ、試行回数、各チェックの結果。
htmlブラウザで開くレポート。
har実行中のすべてのやり取りを、HTTP Archiveとして書き出します。
echolot run Alpenglow.echolot --env staging \
  --reporter console \
  --reporter junit --out results.xml \
  --reporter html --out report.html

チェックが失敗した実行のJUnitレポートです。

<?xml version="1.0" encoding="UTF-8"?>
<testsuites name="Alpenglow" tests="4" failures="1" errors="0" time="0.377" timestamp="2026-11-01T09:23:04Z">
  <testsuite name="auth/sign-in" tests="2" failures="0" errors="0" skipped="0" time="0.155">
    <testcase name="Status equals 200" classname="auth.sign-in" time="0"/>
    <testcase name="JSON value $.access_token exists" classname="auth.sign-in" time="0"/>
  </testsuite>
  <testsuite name="auth/who-am-i" tests="1" failures="1" errors="0" skipped="0" time="0.083">
    <testcase name="Status equals 200" classname="auth.who-am-i" time="0">
      <failure message="expected “200”, got “401”" type="AssertionFailure"/>
    </testcase>
  </testsuite>
</testsuites>

どのレポートも、URL、ヘッダー、チェックのメッセージ、ログに含まれるシークレットの値をマスクするので、レポートをCIのアーティファクトとして保存しても安全です。

Postmanコレクションを実行する

echolot run shop.postman_collection.json --env-file staging.postman_environment.json --data users.csv

コレクションはそのまま実行されます。Echolotはコレクションを一時的なワークスペースに読み込み、実行後に破棄します。認証情報はメモリ上にのみ残ります。 リクエスト前スクリプトとテストスクリプトは、Newmanと同じように実行されます。--env-file にはPostmanの環境ファイルを指定します。--env はワークスペース用です。 --folder には、コレクション自身のトップフォルダを除いた、コレクション内のフォルダ名を指定できます。

コレクションを引き続き使うには、代わりに読み込んでください。

オプション

オプション意味
-e、--env <env>環境:ファイル名から .toml を除いたもの、または環境の名前。
--env-file <file>コレクションと併用するPostmanの環境ファイル。
--folder <path>実行するフォルダまたはリクエスト(users、users/list-users など)。複数回指定できます。省略するとすべて実行します。
-d、--data <file>ヘッダー行のあるCSVファイル、またはオブジェクトのJSON配列:1行につき1反復。
-n、--iterations <n>データファイルがない場合に、すべてを何回実行するか。デフォルトは1。
--delay <ms>リクエスト間に待機するミリ秒数。デフォルトは0。
--retries <n>失敗したリクエストの追加試行回数。デフォルトは0。
--bail最初に失敗したリクエストで停止します。
--concurrency <n>並行して実行する反復の数。1は順番に実行します。デフォルトは1。
--reporter <name>console、junit、json、html、har。複数回指定できます。省略すると console。
-o、--out <file>コンソール以外の各レポーターのファイル。--reporter の順に指定します。ない場合は標準出力。
--secrets <file>シークレットの値を書いた NAME=value 行のファイル。ECHOLOT_SECRET_<NAME> 変数に加えて使います。
-k、--insecureTLS証明書の検証をスキップします。
--proxy <url>このプロキシ経由で送信します:http://host:port、https://…、socks5://user:password@host:port。
--no-proxyHTTP_PROXY などを無視して直接接続します。
--cacert <file>このPEMファイル内のCA証明書も信頼します。複数回指定できます。
--cert <file>このクライアント証明書を送信します:PEMファイル(--key と併用)または .p12/.pfx ファイル。
--key <file>クライアント証明書のPEM秘密鍵。証明書ファイルに鍵が含まれていない場合に使います。
--pass <passphrase>鍵またはPKCS#12ファイルのパスフレーズ。ECHOLOT_CERT_PASSPHRASE の使用をおすすめします。
--timeout <seconds>各リクエストのタイムアウト。デフォルトは60。
--no-color装飾なしのコンソール出力。NO_COLOR が設定されている場合や、出力がターミナルでない場合も同様です。

終了コード

コード条件
0すべてのリクエストがレスポンスを受け取り、すべてのチェックに合格しました。
1リクエストが失敗しました:レスポンスがない、またはチェックの失敗。
64オプションが正しくない、ワークスペースでもPostmanコレクションでもないソース、不明な環境、または行のないデータファイル。

完全なパイプラインはCIを、シークレットの値の取得元はシークレットを参照してください。

このページの内容