.http ファイルを CLI で実行して API Test を自動化する
はじめに
.http ファイルは IntelliJ Ultimate や VS Code などから実行でき、REST API の挙動を動作確認することができます。今回では、.http ファイルを CLI から実行する方法についてご紹介します。こうすることで、CI パイプラインでの自動結合テストや、スモークテストでの利用が想定できます。.http ファイルの作成と実行についてはこちらのサイトをご覧になってください。
実行バイナリ (.jar) のダウンロード
- restcli の Github から、実行可能 jar をダウンロードします。(執筆時点での最新は 1.7.4 でした)
- なお、.jar ファイルとあるように、実行するには java が実行できる環境が必要ですので、必要時応じて java が実行できる環境を構築してください。
.http ファイルの実行
以下のコマンドを実行することで、.http ファイルを実行することができます。.http ファイルについての記法についてはこちらをごらんください。
java -jar <Downloaded jar path>/restcli.jar -e <env-name> sample.http
証明書エラーで実行できない場合
独自証明書などを用いたエンドポイントに対して実行した場合、以下のようなエラーが発生することがあります。
※ 自分の環境では、最新バージョンの 1.7.4 の、 -k, --insecure Disable ssl validation
のオプションを指定してもこのエラーが発生してしまいました。
HTTP FAILED: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
[SKIP TEST] Because: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
このような場合は、以下ののサイトを参考にして設定をします。
PKIX path building failed error message
keytool -import -alias $ALIAS -keystore $JAVA_HOME/jre/lib/security/cacerts -file $PATH_TO_PEM_FILE
※ 自分の場合は .sdkman
を利用していたので、~/.sdkman/candidates/java/11.0.7.hs-adpt/lib/security/cacert
が対象の場所でした。
そして jar の実行の際には、以下のようなオプションを付けて実行します。
java -Djavax.net.ssl.trustStore=$JAVA_CERT_PATH -Djavax.net.ssl.trustStorePassword=<trustStrorePassword> -jar restcli.jar -e <env-name> sample.http
※... $JAVA_CERT_PATH は ~/.sdkman/candidates/java/11.0.7.hs-adpt/lib/security/cacert
のように cacert ファイルを指定します。
そうすると、正常に API を実行でき、以下のような結果を得ることができます。
[START] Creating test report: linkage-api
[FINISHED]
┌──────────────────┐
│TOTAL REQUESTS: 16│
└──────────────────┘
┌───────────┐
│TEST RESULT│
├───────────┤
│Total: 28 │
│Passed: 16 │
│Failed: 12 │
└───────────┘
まとめ
今回では .http ファイルを CLI を用いて実行する方法をまとめました。
「テストスクリプトはプロダクションコードの言語と違うものにするとよい」という言葉があるように、結合テストやスモークテストを .http ファイルで記載し、CLI で実行できるようにすることは一定の価値があるのではないでしょうか。
Discussion