Testy wydajnościowe K6 przykładowe skrypty

K6

Loading

Testy wydajnościowe K6 przykładowe skrypty to kolejny wpis w którym chcemy Wam pokazać możliwości tego narzędzia i jego wykorzystania w codziennej pracy. Jest to kolejny z wpisów przedstawiających Wam alternatywę dla JMetera czy Gatlinga. Z tego powodu, że testerzy poszukują różnych alternatyw, wypróbuj to co będzie dla Ciebie najbardziej odpowiednie. 

Czym jest K6

O narzędziu K6 pisaliśmy kilka tygodni wcześniej – robiąc Wam krótkie wprowadzenie do tworzenia testów wydajnościowych z wykorzystaniem tego narzędzia. W ramach naszych wpisów przedstawialiśmy też w jaki sposób tworzyć raporty z wykorzystaniem tego narzędzia. Aby uruchomić test za pomocą k6, należy napisać skrypt, który opisuje, jakie zapytania ma wykonać narzędzie. Skrypt ten może być napisany w języku JavaScript.

Pierwszy prosty skrypt

Przykładowy skrypt, który symuluje 10 użytkowników, którzy wykonują po 10 zapytań do aplikacji, wygląda następująco:

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

export let options = {
vus: 10,
iterations: 10
};

export default function() {
let res = http.get("https://example.com");
check(res, {
"status is 200": (r) => r.status === 200
});
sleep(1);
}

Przetestujmy dwie podstrony

Oto przykład skryptu k6, który symuluje ruch użytkowników na dwóch podstronach: „/test” i „/test2”:

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

export let options = {
vus: 10,
iterations: 10
};

export default function() {
let res = http.get("https://example.com/test");
check(res, {
"status is 200": (r) => r.status === 200
});
sleep(1);

res = http.get("https://example.com/test2");
check(res, {
"status is 200": (r) => r.status === 200
});
sleep(1);
}

Ustawiamy URL jako zmienną

Przykładowy skrypt w którym ustawimy nasz adres URL jako zmienną – by łatwiej dokonywać zmian. 

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

let url = "https://example.com";

export let options = {
vus: 10,
iterations: 10
};

export default function() {
let res = http.get(url + "/test");
check(res, {
"status is 200": (r) => r.status === 200
});
sleep(1);

res = http.get(url + "/test2");
check(res, {
"status is 200": (r) => r.status === 200
});
sleep(1);
}

Dodajemy czas trwania testu

Oto przykład skryptu k6, który symuluje ruch użytkowników na podstronie „/test” przy użyciu zmiennej „url” przez 120 sekund z obciążeniem 10 użytkowników na sekundę:

import http from "k6/http";
import { check } from "k6";

let url = "https://example.com";

export let options = {
vus: 10,
duration: "120s"
};

export default function() {
let res = http.get(url + "/test");
check(res, {
"status is 200": (r) => r.status === 200
});
}

Testujemy przekierowania

Teraz przykład skryptu k6, który symuluje ruch użytkowników i sprawdza czy pod adresem https://example.com zwracane jest przekierowanie 301 na https://example.pl :

import http from "k6/http";
import { check } from "k6";

export let options = {
vus: 10,
iterations: 10
};

export default function() {
let res = http.get("https://example.com");
check(res, {
"status is 301": (r) => r.status === 301,
"is redirecting to example.pl": (r) => r.headers.Location === "https://example.pl"
});
}

Sprawdzamy url z autentyfikacją

Oto przykład skryptu k6, który symuluje ruch użytkowników. Sprawdza czy pod adresem https://example.com zwracany jest status 200 po uwierzytelnieniu za pomocą nazwy użytkownika „admin” i hasła „password”:

import http from "k6/http";
import { check } from "k6";

export let options = {
vus: 10,
iterations: 10
};

export default function() {
let res = http.get("https://admin:test@example.com", {
});
check(res, {
"status is 200": (r) => r.status === 200
});
}

Obciążenie w losowym przedziale

Teraz czas na przykład skryptu, który symuluje ruch użytkowników i sprawdza dostępność pod adresem https://example.com. Testujemy z losowym obciążeniem pomiędzy 10 a 50 żądaniami na sekundę przez 60 sekund:

import http from "k6/http";
import { randomIntBetween } from "k6/crypto";
import { sleep } from "k6";

export let options = {
vus: 10,
duration: "60s"
};

export default function() {
let requestsPerSecond = randomIntBetween(10, 50);
let requestsPerVU = requestsPerSecond * options.duration;
for (var i = 0; i < requestsPerVU; i++) {
let res = http.get("https://example.com");
}
sleep(1);
}

Skomplikujmy trochę sprawę w naszym teście

W tym skrypcie, pierwsza iteracja wykonuje test z losową liczbą VU (Virtual User) między 10 a 50. Druga iteracja wykonuje test z losową liczbą VU między 20 a 50.

Uwaga: Wartość zmiennej options.duration musi być ustawiona po raz drugi, ponieważ wartość ta jest zmieniana po pierwszej iteracji.

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

const url = "https://example.com";

export let options = {
duration: "60s",
vus: 10,
iterations: "infinite",
};

export default function() {
let randomVus = Math.floor(Math.random() * (50 - 10 + 1) + 10);
options.vus = randomVus;
let res = http.get(url);
check(res, {
"status was 200": (r) => r.status === 200,
});

sleep(1);

randomVus = Math.floor(Math.random() * (50 - 20 + 1) + 20);
options.vus = randomVus;
options.duration = "60s";
res = http.get(url);
check(res, {
"status was 200": (r) => r.status === 200,
});

}

Spike testy

Możemy mieć konieczność stworzenia skryptu do przeprowadzenia serii spike testów:

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

const url = "https://example.com";

export let options = {
stages: [
{ duration: "60s", target: 10 },
{ duration: "60s", target: 25 },
{ duration: "60s", target: 30 },
{ duration: "15s", target: 100 },
{ duration: "60s", target: 25 },
{ duration: "60s", target: 10 },
],
};

export default function() {
let res = http.get(url);
check(res, {
"status was 200": (r) => r.status === 200,
});
sleep(1);
}

W tym skrypcie, pierwsza faza trwa 60 sekund i targetem jest 10 użytkowników. Następnie, druga faza trwa 60 sekund i targetem jest 25 użytkowników. Kolejne fazy analogicznie jak w kodzie. Taki test pozwala na sprawdzenie jak system radzi sobie z różnymi poziomami obciążenia.

 

Podsumowanie. 

Artykuł Testy wydajnościowe K6 przykładowe skrypty – jest kolejnym krokiem dla Was by rozpocząć przygodę z tym narzędziem, W ramach kategorii dotyczącej testów wydajnościowych  będziemy poruszać wiele narzędzi. Z racji wieku najpopularniejszy jest JMeter. W naszym wpisach znajdziemy różne alternatywy, jak wspomniany K6, czy Gatling. Ponadto będziemy przedstawiać inne narzędzia wykorzystywane przez testerów.