Last active
February 8, 2024 12:12
-
-
Save vinayakg/691c54f0d373eb2b4f0f519b9b1a691b to your computer and use it in GitHub Desktop.
k6 tests
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 }), | |
| }; | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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