🔩
k6で性能試験がしたいがリクエストデータをinterationごとに一意にしなければいけないケースに対しての1案
k6を利用した性能試験において、試験対象の仕様制約により、リクエストデータが一回ずつしか使えないようなケースに対して解決策として取ったアプローチです。
k6/executionのscenarioから取得可能なiterationInTest
を用いることでiterationごとにuniqueとなるindexを取得できます。
The unique and zero-based sequential number of the current iteration in the scenario. It is unique in all k6 execution modes - in local, cloud and distributed/segmented test runs.
シナリオ中で一意となるゼロベースの連番です。 k6のすべての実行モード(ローカル、クラウド、分散/分割テスト実行)で一意となります。
こちらを使って用意しておいたデータ配列からinterationごとに利用するリクエストデータを固定化することで各interationで重複してデータを利用してしまうことがないようにすることができます。
example
import { SharedArray } from 'k6/data';
import { scenario } from 'k6/execution';
import papaparse from 'https://jslib.k6.io/papaparse/5.4.0/index.js';
const data = new SharedArray("params", function() {
return papaparse.parse(open('./data.csv'), { header: true }).data;
});
export default function () {
const value = data[scenario.iterationInTest].value;
}
性能想定より多くのテストデータを事前に用意する必要性がありますが、テスト対象の仕様を歪めずに検証を可能にするアプローチとして一つの選択肢となるかと思いました。
Discussion