負荷テストツール k6 で Amazon Cognito の Access Token を取得する module サンプルコード

負荷テストツール k6 にて Amazon Cognito の Access Token を取得する module サンプルコードをご紹介します。

k6 - load testing tool

前提知識 k6 の前処理/後処理

負荷テストツール k6 で負荷テストのメイン処理の前処理/後処理はそれぞれ export function setup(), export function teardown() でおこなうようです。

🔗 参考: Test lifecycle

Amazon Cognito の Access Token を取得する module を使って k6 で負荷テストするサンプルコード

.envrc

export AWS_COGNITO_CLIENT_ID=
export AWS_COGNITO_USERNAME=
export AWS_COGNITO_PASSWORD=
export MY_K6_BASE_URL=http://localhost:3000

auth_cognito.js

import http from 'k6/http';

export function auth() {
  const headers = {
    'x-amz-target': 'AWSCognitoIdentityProviderService.InitiateAuth',
    'content-type': 'application/x-amz-json-1.1',
  };

  const res = http.post('https://cognito-idp.ap-northeast-1.amazonaws.com/',
    JSON.stringify({
      AuthFlow: 'USER_PASSWORD_AUTH',
      ClientId: `${__ENV.AWS_COGNITO_CLIENT_ID}`,
      AuthParameters: {
        USERNAME: `${__ENV.AWS_COGNITO_USERNAME}`,
        PASSWORD: `${__ENV.AWS_COGNITO_PASSWORD}`
      },
      ClientMetadata: {}
    }), {
    headers: headers,
  });

  const resJson = JSON.parse(res.body);
  return resJson.AuthenticationResult.AccessToken;
}

sample-graphql_query_viewer.js

import http from 'k6/http';

import { auth } from './auth_cognito.js';

export function setup() {
  console.log('setup');
  return auth();
}

export default function (accessToken) {
  const query = `
    query viewer {
      login
    }
  `;

  const headers = {
    'Authorization': `Bearer ${accessToken}`,
    'Content-Type': 'application/json',
  };

  const res = http.post(`${__ENV.MY_K6_BASE_URL}/graphql`,
    JSON.stringify({
      query: query,
    }), {
    headers: headers,
  });

  console.log(JSON.parse(res.body));
}

export function teardown(data) {
  console.log('teardown');
}

以上、負荷テストツール k6 にて Amazon Cognito の Access Token を取得する module を作成した、現場からお送りしました。