Skip to content

Instantly share code, notes, and snippets.

@vinayakg
Last active February 8, 2024 12:12
Show Gist options
  • Save vinayakg/691c54f0d373eb2b4f0f519b9b1a691b to your computer and use it in GitHub Desktop.
Save vinayakg/691c54f0d373eb2b4f0f519b9b1a691b to your computer and use it in GitHub Desktop.
k6 tests
import http from "k6/http";
import { check } from "k6";
import { Trend } from "k6/metrics";
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 papaparse from "https://jslib.k6.io/papaparse/5.1.1/index.js";
const citiesreq_dur = new Trend("zdur_citiesreq");
const allchoicesreq_dur = new Trend("zdur_allchoicesreq");
const campaignsreq_dur = new Trend("zdur_campaignsreq");
const merpopsearchreq_dur = new Trend("zdur_merpopsearchreq");
const merchantrecentsearchreq_dur = new Trend("zdur_merchantrecentsearchreq",);
const citiesrecentreq_dur = new Trend("zdur_citiesrecentreq");
const csvData = papaparse.parse(
open("hc_cust_base_10000.csv"),
{ header: true },
).data;
// export let options = {
// // iterations: 1,
// vus: 20,
// duration: "10s",
// discardResponseBodies: false,
// summaryTrendStats: ['avg', 'min', 'med', 'max', 'p(95)', 'p(99)', 'p(99.99)', 'count'],
// };
// export const options = {
// scenarios: {
// k6_workshop: {
// executor: 'ramping-arrival-rate',
// startRate: 10,
// stages: [
// // Level at 10 iters/s for 6 seconds
// { target: 10, duration: "10s" },
// { target: 50, duration: "10s" },
// { target: 100, duration: "30s" },
// { target: 30, duration: "10s" },
// { target: 10, duration: "10s" },
// ],
// preAllocatedVUs: 50,
// summaryTrendStats: ['avg', 'min', 'med', 'max', 'p(95)', 'p(99)', 'p(99.99)', 'count'],
// },
// },
// };
export const options = {
scenarios: {
rps50: {
executor: 'constant-arrival-rate',
duration: '20s', // total duration
preAllocatedVUs: 10, // to allocate runtime resources preAll
rate: 50, // number of constant iterations given `timeUnit`
timeUnit: '1s',
},
},
discardResponseBodies: true,
summaryTrendStats: ['avg', 'min', 'med', 'max', 'p(95)', 'p(99)', 'p(99.99)', 'count'],
};
const domain = 'https://hc-api.m.ai';
// const domain = "http://172.24.77.52:8080";
export default function () {
let rand = Math.floor(Math.random() * csvData.length);
let username = csvData[rand].username;
console.log(`[VU: ${__VU}, iteration: ${__ITER}] Starting iteration... ${username}`);
let headers = {
"Content-Type": "application/json",
Authorization: "auth",
"User-Access-Token": username,
"User-Agent": "k6c/0.48.0 (https://k6.io/) " + username,
};
// City request
let citiesreq = {
method: "GET",
url: domain + "/api/v3/list/cities?lang=en",
params: {
headers: {
"Content-Type": "application/json",
Authorization: "auth",
"User-Agent": headers["User-Agent"],
},
tags: { name: "citiesreq" },
},
};
// All Choice request
let allchoicesreq = {
method: "POST",
url: domain + "/api/v3/choice/list",
body: JSON.stringify({
choiceCount: 10,
lang: "en",
location: {
geocode: {
latitude: 19.076,
longitude: 72.8777,
},
},
includeCampaigns: true,
servedAt: "2022-06-28T06:09:06.576Z",
}),
params: {
headers: headers,
tags: { name: "allchoicesreq " + username },
},
};
// Cities recent request /api/v3/user/cities/recent
let citiesrecentreq = {
method: "GET",
url: domain + "/api/v3/user/cities/recent?lang=en&limit=3",
params: {
headers: headers,
tags: { name: "citiesrecentreq" },
},
};
// Cities recent request /api/v3/user/cities/recent
let campaignsreq = {
method: "GET",
url:
domain +
"/api/v3/user/campaigns?campaignType=EVENT&category=all&lang=en&city=Mumbai&servedAt=2024-02-02T16:31:42.479Z&applicableOfferSource=LIFESTYLE",
params: {
headers: headers,
tags: { name: "campaignsreq" },
},
};
// Merchant recent request /api/v3/merchant/popular/search
let merchantpopularsearchreq = {
method: "GET",
url: domain + "/api/v3/merchant/popular/search?lang=en",
params: {
headers: headers,
tags: { name: "merchantpopularsearchreq" },
},
};
// Merchant recent search /api/v3/merchant/popular/search
let merchantrecentsearchreq = {
method: "GET",
url: domain + "/api/v3/merchant/search/recent?limit=6&lang=en",
params: {
headers: headers,
tags: { name: "merchantrecentsearchreq" },
},
};
// Lets gather responses and add checks
let responses = http.batch([
citiesreq,
allchoicesreq,
campaignsreq,
merchantpopularsearchreq,
]);
check(
responses[0],
{
"Citiesreq successfully loaded": (r) => r.status === 200,
},
{ name: "citiesreq" },
);
check(
responses[1],
{
"allchoicesreq successfully loaded": (r) => r.status && r.status === 200,
},
{ name: "allchoicesreq" },
);
// check(responses[2], {
// 'citiesrecentreq successfully loaded': (r) => r.status && r.status === 200,
// });
check(
responses[2],
{
"campaignsreq successfully loaded": (r) => r.status && r.status === 200,
},
{ name: "campaignsreq" },
);
check(
responses[3],
{
"merchantpopularsearchreq successfully loaded": (r) =>
r.status && r.status === 200,
},
{ name: "merchantpopularsearchreq" },
);
// check(responses[5], {
// 'merchantrecentsearchreq successfully loaded': (r) => r.status && r.status === 200,
// });
merpopsearchreq_dur.add(responses[3].timings.duration, { name: "merchantpopularsearchreq", url: responses[3].url });
citiesrecentreq_dur.add(responses[0].timings.duration, { name: "citiesreq", url: responses[0].url });
allchoicesreq_dur.add(responses[1].timings.duration, { name: "allchoicesreq", url: responses[1].url });
campaignsreq_dur.add(responses[2].timings.duration, { name: "campaignsreq", url: responses[2].url });
}
export function handleSummary(data) {
return {
"summary.html": htmlReport(data),
stdout: textSummary(data, { indent: " ", enableColors: true }),
};
}
import http from "k6/http";
import { check } from "k6";
import { Trend } from "k6/metrics";
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 papaparse from "https://jslib.k6.io/papaparse/5.1.1/index.js";
const citiesreq_dur = new Trend("zdur_citiesreq");
const allchoicesreq_dur = new Trend("zdur_allchoicesreq");
const campaignsreq_dur = new Trend("zdur_campaignsreq");
const merpopsearchreq_dur = new Trend("zdur_merpopsearchreq");
const merchantrecentsearchreq_dur = new Trend("zdur_merchantrecentsearchreq",);
const citiesrecentreq_dur = new Trend("zdur_citiesrecentreq");
const csvData = papaparse.parse(
open("/Users/vinayak/Downloads/hdfc_cust_base_10000.csv"),
{ header: true },
).data;
// export let options = {
// // iterations: 1,
// vus: 20,
// duration: "10s",
// discardResponseBodies: false,
// summaryTrendStats: ['avg', 'min', 'med', 'max', 'p(95)', 'p(99)', 'p(99.99)', 'count'],
// };
// export const options = {
// scenarios: {
// k6_workshop: {
// executor: 'ramping-arrival-rate',
// startRate: 10,
// stages: [
// // Level at 10 iters/s for 6 seconds
// { target: 10, duration: "10s" },
// { target: 50, duration: "10s" },
// { target: 100, duration: "30s" },
// { target: 30, duration: "10s" },
// { target: 10, duration: "10s" },
// ],
// preAllocatedVUs: 50,
// summaryTrendStats: ['avg', 'min', 'med', 'max', 'p(95)', 'p(99)', 'p(99.99)', 'count'],
// },
// },
// };
export const options = {
scenarios: {
rps50: {
executor: 'constant-arrival-rate',
duration: '20s', // total duration
preAllocatedVUs: 10, // to allocate runtime resources preAll
rate: 50, // number of constant iterations given `timeUnit`
timeUnit: '1s',
},
},
discardResponseBodies: true,
summaryTrendStats: ['avg', 'min', 'med', 'max', 'p(95)', 'p(99)', 'p(99.99)', 'count'],
};
const domain = 'https://hb-api.maya.ai';
// const domain = "http://172.24.77.52:8080";
export default function () {
let rand = Math.floor(Math.random() * csvData.length);
let username = csvData[rand].username;
console.log(`[VU: ${__VU}, iteration: ${__ITER}] Starting iteration... ${username}`);
let headers = {
"Content-Type": "application/json",
Authorization: "auth",
"User-Access-Token": username,
"User-Agent": "k6c/0.48.0 (https://k6.io/) " + username,
};
// City request
let citiesreq = {
method: "GET",
url: domain + "/api/v3/list/cities?lang=en",
params: {
headers: {
"Content-Type": "application/json",
Authorization: "auth",
"User-Agent": headers["User-Agent"],
},
tags: { name: "citiesreq" },
},
};
let citiesreqparams = {
params: {
headers: {
"Content-Type": "application/json",
Authorization: "auth",
"User-Agent": headers["User-Agent"],
},
tags: { name: "citiesreq" },
},
};
let citiesres = http.get(domain + "/api/v3/list/cities?lang=en", citiesreqparams)
// All Choice request
let allchoicesreq = {
method: "POST",
url: domain + "/api/v3/choice/list",
body: JSON.stringify({
choiceCount: 10,
lang: "en",
location: {
geocode: {
latitude: 19.076,
longitude: 72.8777,
},
},
includeCampaigns: true,
servedAt: "2022-06-28T06:09:06.576Z",
}),
params: {
headers: headers,
tags: { name: "allchoicesreq " + username },
},
};
let allchoicepostbody = JSON.stringify({
choiceCount: 10,
lang: "en",
location: {
geocode: {
latitude: 19.076,
longitude: 72.8777,
},
},
includeCampaigns: true,
servedAt: "2022-06-28T06:09:06.576Z",
});
let allchoicesreqparams = {
params: {
headers: headers,
tags: { name: "allchoicesreq " + username },
},
};
let allchoiceres = http.post(domain + "/api/v3/choice/list", allchoicepostbody, allchoicesreqparams);
// Cities recent request /api/v3/user/cities/recent
let citiesrecentreq = {
method: "GET",
url: domain + "/api/v3/user/cities/recent?lang=en&limit=3",
params: {
headers: headers,
tags: { name: "citiesrecentreq" },
},
};
let citiesrecentreqparams = {
method: "GET",
url: domain + "/api/v3/user/cities/recent?lang=en&limit=3",
params: {
headers: headers,
tags: { name: "citiesrecentreq" },
},
};
let citiesrecentres = http.get(domain + "/api/v3/user/cities/recent?lang=en&limit=3", citiesrecentreqparams);
// Cities recent request /api/v3/user/cities/recent
let campaignsreq = {
method: "GET",
url: domain + "/api/v3/user/campaigns?campaignType=EVENT&category=all&lang=en&city=Mumbai&servedAt=2024-02-02T16:31:42.479Z&applicableOfferSource=LIFESTYLE",
params: {
headers: headers,
tags: { name: "campaignsreq" },
},
};
let campaignsreqparams = {
params: {
headers: headers,
tags: { name: "campaignsreq" },
},
};
let campaignsres = http.get(domain + "/api/v3/user/campaigns?campaignType=EVENT&category=all&lang=en&city=Mumbai&servedAt=2024-02-02T16:31:42.479Z&applicableOfferSource=LIFESTYLE", campaignsreqparams);
// Merchant recent request /api/v3/merchant/popular/search
let merchantpopularsearchreq = {
method: "GET",
url: domain + "/api/v3/merchant/popular/search?lang=en",
params: {
headers: headers,
tags: { name: "merchantpopularsearchreq" },
},
};
let merchantpopularsearchreqparams = {
params: {
headers: headers,
tags: { name: "merchantpopularsearchreq" },
},
};
let merchantpopularsearchres = http.get(domain + "/api/v3/merchant/popular/search?lang=en", campaignsreqparams);
// Merchant recent search /api/v3/merchant/popular/search
let merchantrecentsearchreq = {
method: "GET",
url: domain + "/api/v3/merchant/search/recent?limit=6&lang=en",
params: {
headers: headers,
tags: { name: "merchantrecentsearchreq" },
},
};
let merchantrecentsearchparams = {
params: {
headers: headers,
tags: { name: "merchantrecentsearchreq" },
},
};
let merchantrecentsearchres = http.get(domain + "/api/v3/merchant/search/recent?limit=6&lang=en", merchantrecentsearchparams);
// Lets gather responses and add checks
// let responses = http.batch([
// citiesreq,
// allchoicesreq,
// campaignsreq,
// merchantpopularsearchreq,
// ]);
check(
citiesrecentres,
{
"Citiesreq successfully loaded": (r) => r.status === 200,
},
{ name: "citiesreq" },
);
check(
allchoiceres,
{
"allchoicesreq successfully loaded": (r) => r.status && r.status === 200,
},
{ name: "allchoicesreq" },
);
// check(responses[2], {
// 'citiesrecentreq successfully loaded': (r) => r.status && r.status === 200,
// });
check(
campaignsres,
{
"campaignsreq successfully loaded": (r) => r.status && r.status === 200,
},
{ name: "campaignsreq" },
);
check(
merchantpopularsearchres,
{
"merchantpopularsearchreq successfully loaded": (r) =>
r.status && r.status === 200,
},
{ name: "merchantpopularsearchreq" },
);
// check(responses[5], {
// 'merchantrecentsearchreq successfully loaded': (r) => r.status && r.status === 200,
// });
merpopsearchreq_dur.add(merchantpopularsearchres.timings.duration, { name: "merchantpopularsearchreq", url: responses[3].url });
citiesrecentreq_dur.add(citiesrecentres.timings.duration, { name: "citiesreq", url: responses[0].url });
allchoicesreq_dur.add(allchoiceres.timings.duration, { name: "allchoicesreq", url: responses[1].url });
campaignsreq_dur.add(campaignsres.timings.duration, { name: "campaignsreq", url: responses[2].url });
}
export function handleSummary(data) {
return {
"summary.html": htmlReport(data),
stdout: textSummary(data, { indent: " ", enableColors: true }),
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment