Jenkinsとnewmanを組み合わせて自動APIテストを実現してみる

Postman + newman + Jenkins の組み合わせが結構便利だったので
いつかの自分のために記事を残します。

 

Postman

API テスト ツール
何かで検索するとPostmanの記事を多く見ると思います。

Windows / Linux / Mac / Chrome で動作し
多くの機能を搭載しているAPIテストツールです。

詳しいことはこちらで解説されています。
http://dev.classmethod.jp/tool/api-test-with-postman-01/

 

newman

Postman と同じ会社が開発している Postman のCUI版とでも言うと
しっくりくると思います。

Postman で作成したシナリオ(ジョブ)を実行できるツールです。
OSSとしてGithubから簡単に使うことができます。

今回は Postman で作成したテストケースを
newman で実行し、Jenkins でデプロイ後に呼び出して自動APIテストをやってみます。

 

 

Postman で環境変数を作成する


今回はステージングで使う環境変数を作ってみました。

ここで作成した環境変数は{{host}}として参照できます。

詳しい解説などは先程紹介したインフラエンジニアの味方の
クラスメソッドさんの記事を見てみてください。

 

Postman でコレクションを作成する


コレクションとは Postman で作成したジョブ(シナリオ)を
1つにまとめたもののことを言います。

1つ1つのジョブにTests
tests["Status code is 200"] = responseCode.code === 200;
を記述しておきます。こうすることでテストの際に1つの目印を作ります。

今回は例として上記のようなジョブをまとめたコレクションを作ってみました。

コレクションが作成し終えたら左上にあるRunnerを開いて
動作確認をしてみます。

 

環境変数とコレクションをエクスポートする

上記で作成した環境変数コレクションJSONでエクスポートを行います。
UIは直感的なので簡単に分かるかと思います。

エクスポートした2つのファイルを Jenkins の Workspace/ジョブ名 の中に
コピーしておきます。

 

Jenkins に newman をインストールする

npmを使って簡単にインストールできます。
# npm i newman -g

newman で実際に動作するか確認してみる。
newman run STG-API.postman_collection.json -e staging.postman_environment.json --delay-request 500

実際は色文字で出力されてとても見やすい形です。
Jenkins が載っているサーバーで newman の動作確認ができたので
次に Jenkins のジョブに組み込んでみたいと思います。

 

Jenkins のジョブの設定

デプロイの方法は色々あるかと思いますが
ビルドの最後にシェルの実行を追加しこんなスクリプトを追加します。

newman のテスト終了後、正常時には0、エラー時は1exitで返ってくるので
エラーが発生した場合、ジョブが失敗するのでこれだけで大丈夫だと思います。

面倒なことをやれば失敗時はSlackでテスト結果を送信みたいなこともできますが
コンソール開いても分かるので良いかなって感じです。(Jenkinsの文字コードをUTF-8にする必要有)

 

最後に

テスト自体、エンジニアがローカルで行ってからデプロイする方法があったりしますが
SNSと連携しているAPIだったり、ローカルとリモートでDBの構成が違ったり
割りと大変なんじゃないかなと思ってnewmanを導入してみました。

Postman は非常に便利です。
ここではとてつもなく大雑把に紹介しましたがチームでの共有だったり
1つのジョブの結果を変数に入れて次のジョブで使うなんてのも簡単にできます。

コメントを残す

メールアドレスが公開されることはありません。