LoginSignup
5
1

k6でvusごとの識別子を作る方法について

Last updated at Posted at 2023-12-12

この記事は ソフトウェアテストの小ネタのカレンダー | Advent Calendar 2023 の 12 日目の記事です。

はじめに

k6使ってますか?
私は2023年はじまってすぐくらいにk6に出会って、負荷試験をするときは愛用しています。

負荷をかけるためのクライアントに良いスペックのマシンを用意する必要がなく、
手軽に1000req/s以上の負荷をかけられるのが楽で最高です。

また、負荷のかけ方をコマンドライン引数からも調整できるので、緩くリクエストをし続けてる間に、障害を起こして何が起きるか試験をするのにも適しています。

このページについて

そんなk6ですが、仮想ユーザー数を簡単に増やせるのは良いけど、そのユーザー間で衝突しないように一意な値を振りたいな、という欲求もあったりします。
例えば、

  • ユーザーID
  • 適当な名前に連番付けたい

みたいなときなど。

このページでは、小ネタカレンダーらしく、上記を行うための小ネタを紹介します。
(一瞬で終わる)

vusのIDの取り方

__VUS

これで取れます(以上!)

これだと芸がないのでコード載せていきます。

test.js

import http from 'k6/http'
import { params } from "./params";

const operationName = "test"

export const options = {
    vus: 100,
    duration: '300s',
}

const query = `mutation test($input: TestInput!) {
  test(input: $input) {
    ... on Success {
      id
    }
    ... on Errors {
      errors {
        __typename
      }
    __typename
    }
  }
}`

let incrementalNumber = __VU * 100000
export default function () {
    const variables = {
        input: {
            name: "k6から保存:" + (++incrementalNumber),
            tester_id: __VU
        }
    }
    http.post("http://localhost:18080",
        JSON.stringify({
            operationName,
            query,
            variables
        }), params)
}


params.js

import encoding from 'k6/encoding'

import {
    uuidv4,
} from 'https://jslib.k6.io/k6-utils/1.4.0/index.js'

export const params = {
    headers: {
        'Content-Type': 'application/json',
        "X-Request-Id": uuidv4()
    }
}

test.jsのインスタンス自体は、vusごとに作られるので、実行回数をインクリメントしておけば、vusごとにある程度把握のしやすい連番、というのは作れます。
ぜひお試しあれ〜

最後に

k6でvusごとの識別子を取る・作る方法と、しれっとGraphQLのリクエストをk6で行う方法についてお届けました。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1