New to K6, for benchmarking my http request I am using K6 in my pipeline. Now here is my code I have two section
first am creating an user and second am trying updating the same user
import http from "k6/http";
import { check, sleep, group } from "k6";
import { Trend } from "k6/metrics";
import { LOGIN_URL, BASE_URL } from "../test/support/constants/endpoints.js";
import {
generateSampleUserDataFinal,
generateRandomPhoneNumber,
generateRandomOrganisationContactID,
generateRandomUserTypeId,
} from "../test/support/data/perf.sampledata.js";
let TC01_CreateNewUser = new Trend("TC01_CreateNewUser");
let TC02_UpdateExistingUser = new Trend("TC02_UpdateExistingUser");
function login() {
let authResponse = http.post(`${LOGIN_URL}`);
let authData = authResponse.json().data;
if (!authData) {
console.error("Login failed: ", authResponse.body);
}
return authData;
}
function generateRandomSleepTimer() {
let sleepTime = Math.floor(Math.random() * 3 + 1);
return parseInt(sleepTime);
}
export function createNewUser(
authToken,
sleepTime,
generateSampleUserData
) {
group("TC01: Create a new User", function () {
const response = http.post(
`${BASE_URL}/User`,
generateSampleUserData,
{
headers: {
Authorization: authToken,
"Content-Type": "application/json",
},
tags: { name: "Create a new User" },
}
);
const responseDuration = response.timings.duration;
TC01_CreateNewUser.add(responseDuration);
console.log("Response: ", response.body);
profileId = JSON.parse(response.body).data;
const checkResult = check(response, {
"is status 200": (r) => r.status === 200,
});
let responseMessage;
try {
responseMessage = response.json();
} catch (e) {
console.error("Failed to parse JSON response: ", response.body);
}
check(responseMessage, {
"Success!": (r) => r && r.message === "Success!",
});
sleep(sleepTime);
return profileId ;
});
}
export function updateExistingUser(authToken, sleepTime, profileId) {
group("TC02: Update an existing User", function () {
console.log("Profile ID: ====> : ", profileId);
const response = http.put(
`${BASE_URL}/User`,
{
UserProfileID: `${profileId}`,
organisationContactID: `${generateRandomOrganisationContactID()}`,
name: "Performnace Benchmark Testing",
UserTypeID: `${generateRandomUserTypeId()}`,
email: "perftest@test.com",
phoneNumber: `${generateRandomPhoneNumber()}`
},
{
headers: {
Authorization: authToken,
"Content-Type": "application/json",
},
tags: { name: "Update an existing User" },
}
);
const responseDuration = response.timings.duration;
TC02_UpdateExistingUser.add(responseDuration);
console.log("Response: ", response.body);
const checkResult = check(response, {
"is status 200": (r) => r.status === 200,
});
let responseMessage;
try {
responseMessage = response.json();
} catch (e) {
console.error("Failed to parse JSON response: ", response.body);
}
check(responseMessage, {
"Success!": (r) => r && r.message === "Success!",
});
sleep(sleepTime);
});
}
export default function () {
const authToken = login();
if (!authToken) {
console.error("No auth token, exiting test");
return;
}
const sleepTime = generateRandomSleepTimer();
const UserProfileID = generateRandomUserProfileID();
let generateSampleUserData = generateSampleUserDataFinal(); //This is function which generate a random payload
let profileId;
createNewUser(authToken, sleepTime, generateSampleUserData);
updateExistingUser(authToken, sleepTime, profileId);
}
I am getting the response
INFO[0001] Response: {"responseCode":200,"message":"Success!","data":"372"} source=console
INFO[0002] Response: {"responseCode":200,"message":"Success!","data":"373"} source=console
INFO[0003] Response: {"responseCode":200,"message":"Success!","data":"374"} source=console
INFO[0003] Profile ID: ====> undefined source=console
How to fix this issue ?