Performance Testing Framework

Introduction

This post will cover the creation of a performance testing framework using k6, as well as the steps involved in building and utilizing the framework.

setup

  1. Install k6 on your local machine by following the instructions provided in the documentation: https://k6.io/docs/get-started/installation/
  2. If you have homebrew installed, you can use the following command to install k6:
brew install k6

By completing these steps, you will have k6 properly set up and ready to use.

Framework Architecture

Sample Perf Script

import http from "k6/http";
import {check,fail,sleep} from "k6";

export let options = {
	stages:[
		{"duration" : __ENV.STAGE_1_DUR, "target": __ENV.STAGE_1_VUS},
		{"duration" : __ENV.STAGE_2_DUR, "target": __ENV.STAGE_2_VUS},
		{"duration" : __ENV.STAGE_3_DUR, "target": __ENV.STAGE_3_VUS},
		{"duration" : __ENV.STAGE_4_DUR, "target": __ENV.STAGE_4_VUS},
		{"duration" : __ENV.STAGE_5_DUR, "target": __ENV.STAGE_5_VUS}
	]
}

export default function(){
    loadGoogleWebsite();
}

function loadGoogleWebsite(){
        let resp = http.get("https://www.google.com");
        console.log("Response Status Code "+resp.status);
        check_and_fail(resp,200);
    }

function check_and_fail(response,expectedStatusCode){
	check(response,{"status code 200" : (res) => res.status === expectedStatusCode}) || fail("Expected "+expectedStatusCode+" status but obtained "+response.status);
}

k6 run Google/googlebrowse.js

          /\      |‾‾| /‾‾/   /‾‾/
     /\  /  \     |  |/  /   /  /
    /  \/    \    |     (   /   ‾‾\
   /          \   |  |\  \ |  (‾)  |
  / __________ \  |__| \__\ \_____/ .io

WARN[0000] `stages` was explicitly set to an empty value, running the script with 1 iteration in 1 VU
  execution: local
     script: Google/googlebrowse.js
     output: engine

  scenarios: (100.00%) 1 scenario, 1 max VUs, 10m30s max duration (incl. graceful stop):
           * default: 1 iterations for each of 1 VUs (maxDuration: 10m0s, gracefulStop: 30s)

INFO[0000] Response Status Code 200                      source=console

     ✓ status code 200

     checks.........................: 100.00% ✓ 1        ✗ 0
     data_received..................: 23 kB   65 kB/s
     data_sent......................: 639 B   1.8 kB/s
     http_req_blocked...............: avg=258.29ms min=258.29ms med=258.29ms max=258.29ms p(90)=258.29ms p(95)=258.29ms
     http_req_connecting............: avg=15.81ms  min=15.81ms  med=15.81ms  max=15.81ms  p(90)=15.81ms  p(95)=15.81ms
     http_req_duration..............: avg=100.01ms min=100.01ms med=100.01ms max=100.01ms p(90)=100.01ms p(95)=100.01ms
       { expected_response:true }...: avg=100.01ms min=100.01ms med=100.01ms max=100.01ms p(90)=100.01ms p(95)=100.01ms
     http_req_failed................: 0.00%   ✓ 0        ✗ 1
     http_req_receiving.............: avg=516µs    min=516µs    med=516µs    max=516µs    p(90)=516µs    p(95)=516µs
     http_req_sending...............: avg=631µs    min=631µs    med=631µs    max=631µs    p(90)=631µs    p(95)=631µs
     http_req_tls_handshaking.......: avg=212.52ms min=212.52ms med=212.52ms max=212.52ms p(90)=212.52ms p(95)=212.52ms
     http_req_waiting...............: avg=98.86ms  min=98.86ms  med=98.86ms  max=98.86ms  p(90)=98.86ms  p(95)=98.86ms
     http_reqs......................: 1       2.780852/s
     iteration_duration.............: avg=359.46ms min=359.46ms med=359.46ms max=359.46ms p(90)=359.46ms p(95)=359.46ms
     iterations.....................: 1       2.780852/s


running (00m00.4s), 0/1 VUs, 1 complete and 0 interrupted iterations
default ✓ [======================================] 1 VUs  00m00.4s/10m0s  1/1 iters, 1 per VU

Sample Repo

https://github.com/premsvmm/PerformanceTestingK6

Scroll to Top