Upgrade to Pro — share decks privately, control downloads, hide ads and more …

k6を活用した再現性・拡張性の高い負荷試験基盤の構築

Shota Iwami
September 26, 2024

 k6を活用した再現性・拡張性の高い負荷試験基盤の構築

負荷テストツール4選!ユーザーが語る効果的なパフォーマンステストのプラクティス! 登壇資料
https://trident-qa.connpass.com/event/326996/

Shota Iwami

September 26, 2024
Tweet

More Decks by Shota Iwami

Other Decks in Technology

Transcript

  1. k 6 を活 用 した再現性 ・ 拡張性の 高 い 負荷試験基盤の構築

    株式会社サイバーエージェント 岩 見 彰太 GitHub:@BIwashi X: @B_Sardine 負荷テストツール4選!ユーザーが語る効果的なパフォーマンステストのプラクティス!
  2. 自己 紹介 岩 見 彰太 / Iwamin 株式会社サイバーエージェント ೥౓৽ଔೖࣾ "*ࣄۀຊ෦ڠۀϦςʔϧϝσΟΞ%JW

    アプリ運 用 カンパニー @BIwashi @B_Sardine (Pͷ1SPUPDϓϥάΠϯΛ׆༻ͨ͠ޮ཰తͳෛՙࢼݧઓུ 0QFO'FBUVSFͱࣗಈੜ੒Λ׆༻ͨ͠ϑΟʔνϟʔϑϥάͷએݴత ू໿؅ཧ
  3. • 小 売企業と協業でアプリを開発 • リリース後に少なくとも数百万 人 が利 用見 込み •

    新規開発で多くの試験を短期間でこなす必要 • API(60本)×負荷パターン( 4 )= 2 40 + α • 負荷試験時の記録を全て残し即座に確認可能 • 継続的に全く同じ条件で再試験できる • API は gRPC を使 用 • O 11 y ツールで Datadog を使 用 • シナリオ作成はバックエンドエンジニアが 行 う 背景
  4. • 小 売企業と協業でアプリを開発 • リリース後に少なくとも数百万 人 が利 用見 込み •

    新規開発で多くの試験を短期間でこなす必要 • API(60本)×負荷パターン( 4 )= 2 40 + α • 負荷試験時の記録を全て残し即座に確認可能 • 継続的に全く同じ条件で再試験できる • API は gRPC を使 用 • O 11 y ツールで Datadog を使 用 • シナリオ作成はバックエンドエンジニアが 行 う 背景 高 速な処理速度
  5. • 小 売企業と協業でアプリを開発 • リリース後に少なくとも数百万 人 が利 用見 込み •

    新規開発で多くの試験を短期間でこなす必要 • API(60本)×負荷パターン( 4 )= 2 40 + α • 負荷試験時の記録を全て残し即座に確認可能 • 継続的に全く同じ条件で再試験できる • API は gRPC を使 用 • O 11 y ツールで Datadog を使 用 • シナリオ作成はバックエンドエンジニアが 行 う 背景 高 速な処理速度 大 量のシナリオを 短期間で作れる仕組み
  6. • 小 売企業と協業でアプリを開発 • リリース後に少なくとも数百万 人 が利 用見 込み •

    新規開発で多くの試験を短期間でこなす必要 • API(60本)×負荷パターン( 4 )= 2 40 + α • 負荷試験時の記録を全て残し即座に確認可能 • 継続的に全く同じ条件で再試験できる • API は gRPC を使 用 • O 11 y ツールで Datadog を使 用 • シナリオ作成はバックエンドエンジニアが 行 う 背景 高 速な処理速度 大 量のシナリオを 短期間で作れる仕組み 記録機能のカスタマイズ化
  7. • 小 売企業と協業でアプリを開発 • リリース後に少なくとも数百万 人 が利 用見 込み •

    新規開発で多くの試験を短期間でこなす必要 • API(60本)×負荷パターン( 4 )= 2 40 + α • 負荷試験時の記録を全て残し即座に確認可能 • 継続的に全く同じ条件で再試験できる • API は gRPC を使 用 • O 11 y ツールで Datadog を使 用 • シナリオ作成はバックエンドエンジニアが 行 う 背景 高 速な処理速度 大 量のシナリオを 短期間で作れる仕組み 記録機能のカスタマイズ化 長 期保守性
  8. • 小 売企業と協業でアプリを開発 • リリース後に少なくとも数百万 人 が利 用見 込み •

    新規開発で多くの試験を短期間でこなす必要 • API(60本)×負荷パターン( 4 )= 2 40 + α • 負荷試験時の記録を全て残し即座に確認可能 • 継続的に全く同じ条件で再試験できる • API は gRPC を使 用 • O 11 y ツールで Datadog を使 用 • シナリオ作成はバックエンドエンジニアが 行 う 背景 高 速な処理速度 大 量のシナリオを 短期間で作れる仕組み 記録機能のカスタマイズ化 長 期保守性 gRPC 対応
  9. • 小 売企業と協業でアプリを開発 • リリース後に少なくとも数百万 人 が利 用見 込み •

    新規開発で多くの試験を短期間でこなす必要 • API(60本)×負荷パターン( 4 )= 2 40 + α • 負荷試験時の記録を全て残し即座に確認可能 • 継続的に全く同じ条件で再試験できる • API は gRPC を使 用 • O 11 y ツールで Datadog を使 用 • シナリオ作成はバックエンドエンジニアが 行 う 背景 高 速な処理速度 大 量のシナリオを 短期間で作れる仕組み 記録機能のカスタマイズ化 長 期保守性 gRPC 対応 Datadog との連携
  10. • 小 売企業と協業でアプリを開発 • リリース後に少なくとも数百万 人 が利 用見 込み •

    新規開発で多くの試験を短期間でこなす必要 • API(60本)×負荷パターン( 4 )= 2 40 + α • 負荷試験時の記録を全て残し即座に確認可能 • 継続的に全く同じ条件で再試験できる • API は gRPC を使 用 • O 11 y ツールで Datadog を使 用 • シナリオ作成はバックエンドエンジニアが 行 う 背景 高 速な処理速度 大 量のシナリオを 短期間で作れる仕組み 記録機能のカスタマイズ化 長 期保守性 gRPC 対応 Datadog との連携 シナリオの書きやすさ
  11. • 小 売企業と協業でアプリを開発 • リリース後に少なくとも数百万 人 が利 用見 込み •

    新規開発で多くの試験を短期間でこなす必要 • API(60本)×負荷パターン( 4 )= 2 40 + α • 負荷試験時の記録が全て残し即座に確認可能 • 継続的に全く同じ条件で再試験できる • API は gRPC を使 用 • O 11 y ツールで Datadog を使 用 • シナリオ作成はバックエンドエンジニアが 行 う 背景 高 速な処理速度 大 量のシナリオを 短期間で作れる仕組み 記録機能のカスタマイズ化 長 期保守性 gRPC 対応 これらを満たすように ツール選定を 行 う + ツールで出来ない部分は カスタマイズ Datadog との連携 シナリオの書きやすさ
  12. • 小 売企業と協業でアプリを開発 • リリース後に少なくとも数百万 人 が利 用見 込み •

    新規開発で多くの試験を短期間でこなす必要 • API(60本)×負荷パターン( 4 )= 2 40 + α • 負荷試験時の記録が全て残し即座に確認可能 • 継続的に全く同じ条件で再試験できる • API は gPRC を使 用 • O 11 y ツールで Datadog を使 用 • シナリオ作成はバックエンドエンジニアが 行 う 背景 高 速な処理速度 大 量のシナリオを 短期間で作れる仕組み 記録機能のカスタマイズ化 長 期保守性 gRPC 対応 Datadog との連携 シナリオの書きやすさ 選定するツールで 考慮する項 目
  13. 比 較したツール k 6 Locust ghz Vegeta Gatling gRPC対応 ⚫︎

    ⚫︎ ⚫︎ ※逆に gRPC 専 用 × ⚫︎ ※plugin が必要 試験結果の レポート出 力 ⚫︎ ※ダッシュボードは簡易的 ⚫︎ ⚫︎ ⚫︎ ⚫︎ シナリオ記述 JavaScript Python ※boomerを使うと Go で書ける json or toml Go Scala GitHub Star 数 2 5 . 1 k 2 4 . 6 k 3 k 2 3 . 4 k 6 . 4 k Datadog 連携 ▲ ※extension が必要 or OTLP × × × × 備考 Grafana Labs が メイン開発してる安 心 感と 拡張の豊富さ 社内で過去に採 用 例あり Pythonをなんとなく書ける必要 RESTの試験をする可能性もあった ため、gPRC限定なのが微妙 高 負荷をかけた際の挙動が おかしいという報告を 見 た pluginを 入 れないといけないのが 少し微妙なのと、Scala を 書けるようになる必要がある
  14. 比 較したツール k 6 Locust ghz Vegeta Gatling gRPC対応 ⚫︎

    ⚫︎ ⚫︎ ※逆に gRPC 専 用 × ⚫︎ ※plugin が必要 試験結果の レポート出 力 ⚫︎ ※ダッシュボードは簡易的 ⚫︎ ⚫︎ ⚫︎ ⚫︎ シナリオ記述 JavaScript Python ※boomerを使うと Go で書ける json or toml Go Scala GitHub Star 数 2 5 . 1 k 2 4 . 6 k 3 k 2 3 . 4 k 6 . 4 k Datadog 連携 ▲ ※extension が必要 or OTLP × × × × 備考 Grafana Labs が メイン開発してる安 心 感と 拡張の豊富さ 社内で過去に採 用 例あり Pythonをなんとなく書ける必要 RESTの試験をする可能性もあった ため、gPRC限定なのが微妙 高 負荷をかけた際の挙動が おかしいという報告を 見 た pluginを 入 れないといけないのが 少し微妙なのと、Scala を 書けるようになる必要がある
  15. 比 較したツール k 6 Locust ghz Vegeta Gatling gRPC対応 ⚫︎

    ⚫︎ ⚫︎ ※逆に gRPC 専 用 × ⚫︎ ※plugin が必要 試験結果の レポート出 力 ⚫︎ ※ダッシュボードは簡易的 ⚫︎ ⚫︎ ⚫︎ ⚫︎ シナリオ記述 JavaScript Python ※boomerを使うと Go で書ける json or toml Go Scala GitHub Star 数 2 5 . 1 k 2 4 . 6 k 3 k 2 3 . 4 k 6 . 4 k Datadog 連携 ▲ ※extension が必要 or OTLP × × × × 備考 Grafana Labs が メイン開発してる安 心 感と 拡張の豊富さ 社内で過去に採 用 例あり Pythonをなんとなく書ける必要 RESTの試験をする可能性もあった ため、gPRC限定なのが微妙 高 負荷をかけた際の挙動が おかしいという報告を 見 た pluginを 入 れないといけないのが 少し微妙なのと、Scala を 書けるようになる必要がある
  16. 比 較したツール k 6 Locust ghz Vegeta Gatling gRPC対応 ⚫︎

    ⚫︎ ⚫︎ ※逆に gRPC 専 用 × ⚫︎ ※plugin が必要 試験結果の レポート出 力 ⚫︎ ※ダッシュボードは簡易的 ⚫︎ ⚫︎ ⚫︎ ⚫︎ シナリオ記述 JavaScript Python ※boomerを使うと Go で書ける json or toml Go Scala GitHub Star 数 2 5 . 1 k 2 4 . 6 k 3 k 2 3 . 4 k 6 . 4 k Datadog 連携 ▲ ※extension が必要 or OTLP × × × × 備考 Grafana Labs が メイン開発してる安 心 感と 拡張の豊富さ 社内で過去に採 用 例あり Pythonをなんとなく書ける必要 RESTの試験をする可能性もあった ため、gPRC限定なのが微妙 高 負荷をかけた際の挙動が おかしいという報告を 見 た pluginを 入 れないといけないのが 少し微妙なのと、Scala を 書けるようになる必要がある
  17. 比 較したツール k 6 Locust ghz Vegeta Gatling gRPC対応 ⚫︎

    ⚫︎ ⚫︎ ※逆に gRPC 専 用 × ⚫︎ ※plugin が必要 試験結果の レポート出 力 ⚫︎ ※ダッシュボードは簡易的 ⚫︎ ⚫︎ ⚫︎ ⚫︎ シナリオ記述 JavaScript Python ※boomerを使うと Go で書ける json or toml Go Scala GitHub Star 数 2 5 . 1 k 2 4 . 6 k 3 k 2 3 . 4 k 6 . 4 k Datadog 連携 ▲ ※extension が必要 or OTLP × × × × 備考 Grafana Labs が メイン開発してる安 心 感と 拡張の豊富さ 社内で過去に採 用 例あり Pythonをなんとなく書ける必要 RESTの試験をする可能性もあった ため、gPRC限定なのが微妙 高 負荷をかけた際の挙動が おかしいという報告を 見 た pluginを 入 れないといけないのが 少し微妙なのと、Scala を 書けるようになる必要がある
  18. 比 較したツール k 6 Locust ghz Vegeta Gatling gRPC対応 ⚫︎

    ⚫︎ ⚫︎ ※逆に gRPC 専 用 × ⚫︎ ※plugin が必要 試験結果の レポート出 力 ⚫︎ ※ダッシュボードは簡易的 ⚫︎ ⚫︎ ⚫︎ ⚫︎ シナリオ記述 JavaScript Python ※boomerを使うと Go で書ける json or toml Go Scala GitHub Star 数 2 5 . 1 k 2 4 . 6 k 3 k 2 3 . 4 k 6 . 4 k Datadog 連携 ▲ ※extension が必要 or OTLP × × × × 備考 Grafana Labs が メイン開発してる安 心 感と 拡張の豊富さ 社内で過去に採 用 例あり Pythonをなんとなく書ける必要 RESTの試験をする可能性もあった ため、gPRC限定なのが微妙 高 負荷をかけた際の挙動が おかしいという報告を 見 た pluginを 入 れないといけないのが 少し微妙なのと、Scala を 書けるようになる必要がある
  19. 比 較したツール k 6 Locust ghz Vegeta Gatling gRPC対応 ⚫︎

    ⚫︎ ⚫︎ ※逆に gRPC 専 用 × ⚫︎ ※plugin が必要 試験結果の レポート出 力 ⚫︎ ※ダッシュボードは簡易的 ⚫︎ ⚫︎ ⚫︎ ⚫︎ シナリオ記述 JavaScript Python ※boomerを使うと Go で書ける json or toml Go Scala GitHub Star 数 2 5 . 1 k 2 4 . 6 k 3 k 2 3 . 4 k 6 . 4 k Datadog 連携 ▲ ※extension が必要 or OTLP × × × × 備考 Grafana Labs が メイン開発してる安 心 感と 拡張の豊富さ 社内で過去に採 用 例あり Pythonをなんとなく書ける必要 RESTの試験をする可能性もあった ため、gPRC限定なのが微妙 高 負荷をかけた際の挙動が おかしいという報告を 見 た pluginを 入 れないといけないのが 少し微妙なのと、Scala を 書けるようになる必要がある
  20. 比 較したツール k 6 Locust ghz Vegeta Gatling gRPC対応 ⚫︎

    ⚫︎ ⚫︎ ※逆に gRPC 専 用 × ⚫︎ ※plugin が必要 試験結果の レポート出 力 ⚫︎ ※ダッシュボードは簡易的 ⚫︎ ⚫︎ ⚫︎ ⚫︎ シナリオ記述 JavaScript Python ※boomerを使うと Go で書ける json or toml Go Scala GitHub Star 数 2 5 . 1 k 2 4 . 6 k 3 k 2 3 . 4 k 6 . 4 k Datadog 連携 ▲ ※extension が必要 or OTLP × × × × 備考 Grafana Labs が メイン開発してる安 心 感と 拡張の豊富さ 社内で過去に採 用 例あり Pythonをなんとなく書ける必要 RESTの試験をする可能性もあった ため、gPRC限定なのが微妙 高 負荷をかけた際の挙動が おかしいという報告を 見 た pluginを 入 れないといけないのが 少し微妙なのと、Scala を 書けるようになる必要がある k 6 ⚫︎ ⚫︎ ※ダッシュボードは簡易的 JavaScript 2 5 . 1 k ▲ ※extension が必要 or OTLP Grafana Labs が メイン開発してる安 心 感と 拡張の豊富さ 比 較的条件に合っている k 6 を選定 しかし… 今後もこの選択がずっと正しいかは 現時点ではわからない…
  21. 比 較したツール k 6 Locust ghz Vegeta Gatling gRPC対応 ⚫︎

    ⚫︎ ⚫︎ ※逆に gRPC 専 用 × ⚫︎ ※plugin が必要 試験結果の レポート出 力 ⚫︎ ※ダッシュボードは簡易的 ⚫︎ ⚫︎ ⚫︎ ⚫︎ シナリオ記述 JavaScript Python ※boomerを使うと Go で書ける json or toml Go Scala GitHub Star 数 2 5 . 1 k 2 4 . 6 k 3 k 2 3 . 4 k 6 . 4 k Datadog 連携 ▲ ※extension が必要 or OTLP × × × × 備考 Grafana Labs が メイン開発してる安 心 感と 拡張の豊富さ 社内で過去に採 用 例あり Pythonをなんとなく書ける必要 RESTの試験をする可能性もあった ため、gPRC限定なのが微妙 高 負荷をかけた際の挙動が おかしいという報告を 見 た pluginを 入 れないといけないのが 少し微妙なのと、Scala を 書けるようになる必要がある k 6 ⚫︎ ⚫︎ ※ダッシュボードは簡易的 JavaScript 2 5 . 1 k ▲ ※extension が必要 or OTLP Grafana Labs が メイン開発してる安 心 感と 拡張の豊富さ 比 較的条件に合っている k 6 を選定 しかし… 今後もこの選択がずっと正しいかは 現時点ではわからない… できるだけツールに依存しない シナリオ 生 成の仕組みを作る
  22. 背景 • 小 売企業と協業でアプリを開発 • リリース後に少なくとも数百万 人 が利 用見 込み

    • 新規開発で多くの試験を短期間でこなす必要 • API(60本)×負荷パターン( 4 )= 2 40 + α • 負荷試験時の記録が全て残し即座に確認可能 • 継続的に全く同じ条件で再試験できる • API は gPRC を使 用 • O 11 y ツールで Datadog を使 用 • シナリオ作成はバックエンドエンジニアが 行 う 高 速な処理速度 大 量のシナリオを 短期間で作れる仕組み 記録機能のカスタマイズ化 長 期保守性 gRPC 対応 Datadog との連携 シナリオの書きやすさ 自 動 生 成で 解決する
  23. z service SampleService { // Coupon rpcs. rpc ListCoupons(ListCouponsRequest) returns

    (ListCouponsResponse) {} // Scenario options. option (ext.scenario_executor) = { scenarios : [ { constant_arrival_rate : { rate : 100, time_unit : "1s", duration : "300s", pre_allocated_vus : 75, } }, { constant_arrival_rate : { rate : 200, time_unit : "1s", duration : "300s", pre_allocated_vus : 150, } } ] }; } z // Code generated by protoc-gen-go-grpc-scenario. DO NOT EDIT. import grpc from 'k6/net/grpc'; import { check } from 'k6'; … export const options …= {… scenarios: { contacts: { executor: 'constant-arrival-rate', rate: 100, timeUnit: '1s', duration: '300s', preAllocatedVUs: 75, } }, }; … export function listCoupons(token, req) { client.connect(baseURL, { plaintext: plaintext }); const params = { metadata: { "Authorization": 'Bearer ' + token, }, }; let response = client.invoke("sampleservice.SampleService/ListCoupons", req, params); check(response, { 'status is OK': (r) => r && r.status === grpc.StatusOK, }); client.close(); } … export default function () { let req = randomItem(reqs); let token = randomItem(users).AccessToken; listCoupons(token, req); } 生 成イメージ service.proto list_coupons__constant_arrival_rate__rate_ 1 00 _time_unit_ 1 s_duration_ 3 0 0 s_pre_allocated_vus_ 75 .pb.js
  24. z service SampleService { // Coupon rpcs. rpc ListCoupons(ListCouponsRequest) returns

    (ListCouponsResponse) {} // Scenario options. option (ext.scenario_executor) = { scenarios : [ { constant_arrival_rate : { rate : 100, time_unit : "1s", duration : "300s", pre_allocated_vus : 75, } }, { constant_arrival_rate : { rate : 200, time_unit : "1s", duration : "300s", pre_allocated_vus : 150, } } ] }; } 生 成イメージ service.proto gRPC 用 のrpc定義 シナリオ 用 の Options • 負荷シナリオなどを記述 • service に対するextend
  25. z // Code generated by protoc-gen-go-grpc-scenario. DO NOT EDIT. import

    grpc from 'k6/net/grpc'; import { check } from 'k6'; … export const options …= {… scenarios: { contacts: { executor: 'constant-arrival-rate', rate: 100, timeUnit: '1s', duration: '300s', preAllocatedVUs: 75, } }, }; … export function listCoupons(token, req) { client.connect(baseURL, { plaintext: plaintext }); const params = { metadata: { "Authorization": 'Bearer ' + token, }, }; let response = client.invoke("sampleservice.SampleService/ListCoupons", req, params); check(response, { 'status is OK': (r) => r && r.status === grpc.StatusOK, }); client.close(); } … export default function () { let req = randomItem(reqs); let token = randomItem(users).AccessToken; listCoupons(token, req); } 生 成イメージ list_coupons__constant_arrival_rate__rate_ 1 00 _time_unit_ 1 s_duration_ 3 0 0 s_pre_allocated_vus_ 75 .pb.js • 負荷試験に関する全ての情報が記載 実 行 時はファイルを指定 振り返る際は1ファイルを 見 ればいい 負荷試験シナリオを 宣 言 的に管理する
  26. z service SampleService { rpc Get(GetRequest) returns (GetResponse) { option

    (google.api.http) = {get: "/sample/get"}; option (ext.scenario_method) = { http_status_code: 200, }; } // Scenario options. option (ext.scenario_executor) = { scenarios : [ { constant_arrival_rate : { rate : 100, time_unit : "1s", duration : "300s", pre_allocated_vus : 75, } }, … ] }; z // Code generated by protoc-gen-go-scenario. DO NOT EDIT. import http from 'k6/http'; import { check } from 'k6'; import { SharedArray } from 'k6/data'; 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 { URLSearchParams } from 'https://jslib.k6.io/url/1.0.0/index.js'; import { randomItem } from 'https://jslib.k6.io/k6-utils/1.4.0/index.js' … export const options = { scenarios: { … }, … }; … export function register(req) { const queryParams = new URLSearchParams(); … const url = `${scheme}://${base_url}/auth/register?${queryParams.toString()}`; const params = { headers: { "x-loadtest": "true", "x-scenario": "get", }, tags: { "name": "get" }, }; let response = http.get(url, params); check(response, { 'status is 200': (r) => r && r.status === 200, }); } … export default function () { let req = randomItem(reqs); register(req); } … export function handleSummary(data) { … return { … } } REST にも対応 service.proto get__constant_arrival_rate__rate_ 10 0 _time_unit_ 1 s_duration_ 300 s_pre_allocated_vus_ 75 .pb.js
  27. z service SampleService { rpc Get(GetRequest) returns (GetResponse) { option

    (google.api.http) = {get: "/sample/get"}; option (ext.scenario_method) = { http_status_code: 200, }; } // Scenario options. option (ext.scenario_executor) = { scenarios : [ { constant_arrival_rate : { rate : 100, time_unit : "1s", duration : "300s", pre_allocated_vus : 75, } }, … ] }; REST にも対応 service.proto grpc-gateway の記法 grpc-gateway を使わなくても proto でスキーマ管理
  28. • 既存の gRPC の proto fi le の情報から 300 近い

    k 6 のシナリオを 自 動 生 成 新規開発時期などで rpc 名が変わるなどの破壊的な変更があっても勝 手 に追従 シナリオの保守性を気にしなくてもいい • 負荷試験に対する情報(ドメイン情報 + 負荷シナリオ)は全て proto に集約 protoc plugin の template を書き換えると、k 6 以外のツールのシナリオの 自 動 生 成も可能 自 動 生 成の恩恵
  29. • 既存の gRPC の proto fi le の情報から 300 近い

    k 6 のシナリオを 自 動 生 成 新規開発時期などで rpc 名が変わるなどの破壊的な変更があっても勝 手 に追従 シナリオの保守性を気にしなくてもいい • 負荷試験に対する情報(ドメイン情報 + 負荷シナリオ)は全て proto に集約 protoc plugin の template を書き換えると、k 6 以外のツールのシナリオの 自 動 生 成も可能 自 動 生 成の恩恵 300近いシナリオを全部書き直し… などが必要ない template を差し替えれば 全て 自 動 生 成される
  30. • Extension という独 自 の拡張機能を xk 6 と いう CLI

    を使ってカスタムビルドできる • コミュニティーによってすでに多くの拡張 機能が開発されている • 欲しいものがない場合は 自 作(Go)可能 k 6 の拡張性 &YQMPSFLFYUFOTJPOTc(SBGBOBLEPDVNFOUBUJPO
  31. • 現在 Datadog と連携するには拡張を 入 れる必要 (xk 6 -output-statsd) •

    ※OpenTelemetry Output でも可能 • 特定の試験でレスポンスデータ全て保存する必要 (xk 6 - fi le) • Datadog に送らずにリアルタイム監視および リッチなサマリーが出る機能を追加 (xk 6 -dashboard) • ※v 0 . 4 9 から built-in されたため、 環境変数 (K 6 _WEB_DASHBOARD) の指定のみで動作 z xk6 build \ --with github.com/LeonAdato/xk6-output-statsd@v${XK6_OUTPUT_STATSD_VER} \ --with github.com/grafana/xk6-dashboard@v${XK6_DASHBOARD_VER} \ --with github.com/avitalique/xk6-file@v${XK6_FILE_VER} \ --output /repo/.k6/k6 k 6 の拡張性 Version 0 . 49 . 0 release notes | Grafana k 6 documentation
  32. Step Functions step functions で実 行 時に 振られる実 行 ID

    リンクを踏むと execution id の step functions の実 行 画 面 に 飛 ぶ
  33. Step Functions Datadog の k 6 Dashboard に test_run_id =

    {execution id} で 飛 ぶ 試験開始終了時刻の前後2分の範囲 を指定して 飛 ぶ
  34. • 負荷試験を 行 うのに必要な条件を洗い出して、それをできるだけ満たすツー ルを選定する必要 • ツールで満たせない場合はカスタマイズして条件を達成する ツールの拡張性が重要 • 自

    動 生 成を活 用 することで、シナリオの保守性を上げる • 一 回試験したら終わりではなく、再現性の 高 い仕組みを作り継続的に試験を 行 なっていけるようにする 場合によっては CI などに組み込めるようにする まとめ