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.