🔩

k6で性能試験がしたいがリクエストデータをinterationごとに一意にしなければいけないケースに対しての1案

2024/07/17に公開

k6を利用した性能試験において、試験対象の仕様制約により、リクエストデータが一回ずつしか使えないようなケースに対して解決策として取ったアプローチです。

https://grafana.com/docs/k6/latest/javascript-api/k6-execution/

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