Webアプリのテストの一つにスモークテストというものがあります。 (他のテスト手法の説明はこちらを参照ください。)
スモークテストの役割は、システムが問題なく最小限の負荷を処理できることを確認することです。他には負荷テストなどのバリエーションがあります。
いざスモークテストを実施しようとしても、テストケースの作成が大変です。ChromeブラウザとPostmanを使用すると、簡単にテストケースの作成ができます。
用意するもの
特別なものはありません😝
- Chromeブラウザ
- Postman
普段使っているツールですね。
手順
今回は試しに当ブログを巡回する手順を示してみます。
Chromeでの操作
- Chromeを起動します。
- DevToolsを表示します。(F12キー押下)
- Networkタブを選択します。
- 「Preserve log」にチェックを入れます。
サイトにアクセスし、色々なサイトを巡回します。
右側のファイル名が出ているあたりを右クリックし、「Save all as HAR with content」を選択。保存します。
Chromeでの作業はここまでです。
Preserve logにチェックを入れることで、画面遷移をしてもログが継続されます。
Postmanでの操作
- Postmanを起動します。
- [File]メニューから[Import]を選択します。
- Chromeで保存したHARファイルをドラッグ&ドロップします。
- 「Import」ボタンをクリックし、インポートします。
- インポートした内容が左のツリーに表示されますので、一番上の階層を選択し、右側のメニューから「RUN」を選択します。
とりあえずこのままでRUNしてみましょう。
Chromeで操作したアクセスの再現がPostmanでできました。
ただ、今回はとりあえずリクエストを投げただけですので、テストにはなっていませんので、テストを追加してみましょう。
- 左のメニュー最上位を選択し、右側のTestsタブを開きます。
- テストコードを記述するエリアに以下のコードを記述します。
pm.test("Status test", function () {
pm.response.to.have.status(200);
});
テストコードの詳細は公式サイトを参照ください。 この状態で再度実行してみます。
今度はテストがPassしたかFailしたかが分かれるようになりました。Google AnalyticsのリクエストはIDが204でステータスが返却されるようです。(?)
Chromeでのアクセスの再現と、それぞれのステータスコードをチェックするテストケースの作成ができました。
Newmanで実行
PostmanにはCLI版のNewmanというものがあります。同じテストをNewmanで実行してみます。
- テスト内容をPostmanからエクスポートします。左のメニュー最上位を選択し、Exportを選択します。
- Newmanをインストールします。
- Newmanを実行します。
npm install -g newman
newman run twelve.tk.postman_collection.json
(個人的に-gが嫌だったので、npxで実行しました。)
実施結果とサマリー、エラーについては詳細がコンソールに出力されます。
┌─────────────────────────┬────────────────────┬───────────────────┐
│ │ executed │ failed │
├─────────────────────────┼────────────────────┼───────────────────┤
│ iterations │ 1 │ 0 │
├─────────────────────────┼────────────────────┼───────────────────┤
│ requests │ 150 │ 0 │
├─────────────────────────┼────────────────────┼───────────────────┤
│ test-scripts │ 150 │ 0 │
├─────────────────────────┼────────────────────┼───────────────────┤
│ prerequest-scripts │ 150 │ 0 │
├─────────────────────────┼────────────────────┼───────────────────┤
│ assertions │ 150 │ 8 │
├─────────────────────────┴────────────────────┴───────────────────┤
│ total run duration: 32.5s │
├──────────────────────────────────────────────────────────────────┤
│ total data received: 6.84MB (approx) │
├──────────────────────────────────────────────────────────────────┤
│ average response time: 176ms [min: 21ms, max: 5.5s, s.d.: 478ms] │
└──────────────────────────────────────────────────────────────────┘
# failure detail
1. AssertionError Status test
expected response to have status code 200 but got 204
at assertion:0 in test-script
inside "twelve.tk/ /
www.google-analytics.com/g/collect?v=2&tid=G-2B7RYXP4BX>m=2oe6f0&_p=804257945&_z=ccd.v9B&cid=379592950.1655898217&ul=ja&…
- twelve.tk&en=page_view&_fv=1&_nsi=1&_ss=1&_ee=1"
2. AssertionError Status test
expected response to have status code 200 but got 204
at assertion:0 in test-script
inside "twelve.tk/ /
pagead2.googlesyndication.com/pagead/sodar?id=sodar2&v=225&t=2&li=gda_r20220616&jk=1319651736028081&bg=!u7iluPzNAAZlcKWdRX…
3. AssertionError Status test
expected response to have status code 200 but got 204
at assertion:0 in test-script
inside "twelve.tk/xin-pai-shu-wogoogle-fitkaraqu-de/ /
pagead2.googlesyndication.com/pagead/sodar?id=sodar2&v=225&t=2&li=gda_r20220616&jk=3607743733400432&bg=!GxilGFzNAAZlcKWdRX…
4. AssertionError Status test
expected response to have status code 200 but got 204
at assertion:0 in test-script
inside "twelve.tk/xin-pai-shu-wogoogle-fitkaraqu-de/ /
www.google-analytics.com/g/collect?v=2&tid=G-2B7RYXP4BX>m=2oe6f0&_p=214989472&_z=ccd.v9B&cid=379592950.1655898217&ul=ja&…
Fitから取得した心拍数データを可視化する&en=page_view&_ee=1"
5. AssertionError Status test
expected response to have status code 200 but got 502
at assertion:0 in test-script
inside "twelve.tk/aws-icon-detect-ai/ / m2qusjowah3mtwhp4xni3ks43u0aalqx.lambda-url.ap-northeast-1.on.aws/"
6. AssertionError Status test
expected response to have status code 200 but got 204
at assertion:0 in test-script
inside "twelve.tk/aws-icon-detect-ai/ /
pagead2.googlesyndication.com/pagead/sodar?id=sodar2&v=225&t=2&li=gda_r20220616&jk=1950225026497396&bg=!MzClMHTNAAZlcKWdRX…
7. AssertionError Status test
expected response to have status code 200 but got 204
at assertion:0 in test-script
inside "twelve.tk/ /
pagead2.googlesyndication.com/pagead/sodar?id=sodar2&v=225&t=2&li=gda_r20220616&jk=400847335427420&bg=!PzylPHjNAAZlcKWdRXA…
8. AssertionError Status test
expected response to have status code 200 but got 204
at assertion:0 in test-script
inside "twelve.tk/ /
www.google-analytics.com/g/collect?v=2&tid=G-2B7RYXP4BX>m=2oe6f0&_p=1919090582&_z=ccd.v9B&cid=379592950.1655898217&ul=ja…
- twelve.tk&en=page_view&_ee=1"
Newmanを使うとPostmanと同じ操作がコマンドのみで実行できます。
ここまでできれば、自動化や定期的なテストに使用できそうですね。
以上、ChromeとPostmanを使ったスモークテストの実施方法でした。