こんにちは。よっしーです(^^)
今日は、k6におけるチェック内容をカスタマイズする方法についてご紹介します。
背景
Dockerで構築したWebアプリの開発環境において、k6のチェック内容をカスタマイズしたときの方法を備忘として残しました。
開発環境のソースは下記のリポジトリにあります。
修正ファイル
下記のファイルを修正もしくは作成しました。
modified: k6/scripts/http_get.js
k6/scripts/http_get.js
@@ -1,17 +1,21 @@
import http from 'k6/http';
import { htmlReport } from "https://raw.githubusercontent.com/benc-uk/k6-reporter/main/dist/bundle.js";
import { textSummary } from "https://jslib.k6.io/k6-summary/0.0.1/index.js";
+import { check } from 'k6';
export const options = {
stages: [
- { target: 5, duration: '30s' },
- { target: 15, duration: '30s' },
- { target: 5, duration: '30s' },
+ { target: 5, duration: '30s' }
],
};
export default function () {
- http.get('http://host.docker.internal:8080/');
+ const res = http.get('http://host.docker.internal:8080/');
+ check(res, {
+ 'is status 200' : (r) => r.status === 200,
+ 'verify homepage text' : (r) => r.body.includes('Hello world!'),
+ 'body size is 12' : (r) => r.body.length == 12,
+ });
};
検証環境の起動
下記のコマンドを実施します。
# ビルド
make build
# 起動
make up
# 起動確認
make test_req
下記のような出力になっていればOKです。
% make test_req
curl -k https://localhost
Hello world!
k6コマンドの実行
下記のコマンドを実施します。
cd app
docker compose --profile tools run --rm -T k6-cmd run - < k6/scripts/http_get.js
下記のような出力されていれば成功です。
✓ is status 200
✓ verify homepage text
✓ body size is 12
解説
checkについて
チェックは、テスト内のブール条件を検証します。テスターは、システムが期待どおりのコンテンツで応答していることを検証するために、よくチェックを使用します。例えば、チェックはPOSTリクエストの応答ステータスが201であることを検証したり、ボディのサイズが特定のサイズであることを検証したりできます。
チェックは、多くのテストフレームワークがアサートと呼ぶものに似ていますが、失敗したチェックはテストを中止させたり、失敗したステータスで終了させたりしません。代わりに、k6はテストが続行される間に失敗したチェックの割合を追跡します。
各チェックは、割合メトリックを作成します。チェックをテストを中止させるか失敗させるには、それを閾値と組み合わせることができます。
HTTPレスポンスコードのチェック チェックは、HTTPリクエストとレスポンスに関連するアサーションをコード化するのに適しています。例えば、このスニペットはHTTPレスポンスコードが200であることを確認します。
import { check } from 'k6';
import http from 'k6/http';
export default function () {
const res = http.get('http://test.k6.io/');
check(res, {
'is status 200': (r) => r.status === 200,
});
}
場合によっては、HTTP 200 応答にもエラー メッセージが含まれることがあります。このような状況では、次のように応答本文を検証するチェックを追加することを検討してください。
import { check } from 'k6';
import http from 'k6/http';
export default function () {
const res = http.get('http://test.k6.io/');
check(res, {
'verify homepage text': (r) =>
r.body.includes('Collection of simple web-pages suitable for load testing'),
});
}
応答本文のサイズを確認するには、次のようなチェックを使用できます。
import { check } from 'k6';
import http from 'k6/http';
export default function () {
const res = http.get('http://test.k6.io/');
check(res, {
'body size is 11,105 bytes': (r) => r.body.length == 11105,
});
}
おわりに
今日は、k6におけるチェック内容をカスタマイズする方法についてご紹介しました。
何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント