Sample Module Code for Getting Amazon Cognito Access Token with k6 Load Testing Tool
Tadashi Shigeoka · Thu, November 17, 2022
I’ll introduce sample module code for getting Amazon Cognito Access Token with the k6 load testing tool.
Background Knowledge: k6 Setup/Teardown
In the k6 load testing tool, setup and teardown processing before and after the main load test processing are performed with export function setup() and export function teardown() respectively.
? Reference: Test lifecycle
Sample Code for Load Testing with k6 Using a Module to Get Amazon Cognito Access Token
.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');
}
That’s all from the Gemba.
