Есть разные способы подать нагрузку на сайт, например wrk. Сегодня рассмотрим еще один инструмент, который позволяет описывать в виде js кода то, как именно мы будем подавать нагрузку.
Установка:
Bash
sudo gpg -k
sudo gpg --no-default-keyring --keyring /usr/share/keyrings/k6-archive-keyring.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C5AD17C747E3415A3642D57D77C6C491D6AC1D69
echo "deb [signed-by=/usr/share/keyrings/k6-archive-keyring.gpg] https://dl.k6.io/deb stable main" | sudo tee /etc/apt/sources.list.d/k6.list
sudo apt-get update
sudo apt-get install k6
Собственно скрипт:
JavaScript
import http, { head } from 'k6/http';
import { check, sleep } from 'k6';
const BASE_URL = "https://andtree.ru"
const headers = {
'test': 'test',
'test2': 'test'
}
export let options = {
vus: 10,
duration: '1m',
thresholds: {
'http_reqs': ['rate>=1000'],
},
};
function checkResponseStatus(response, expectedStatus) {
check(response, {
[`is status ${expectedStatus}`]: (r) => r.status === expectedStatus,
});
}
function one() {
let url = `${BASE_URL}`
let response = http.get(url, { headers: headers});
checkResponseStatus(response, 200);
sleep(1);
}
function two() {
let url = `${BASE_URL}/wp-content/uploads/2024/01/ec0e5ffc-d823-4ee3-89ca-f655b3a6e8b4-300x200.webp`
let response = http.get(url, { headers: headers});
checkResponseStatus(response, 200);
sleep(1);
}
export default function () {
one();
two();
}
Это просто пример в котором 10 пользователей (vus) будут отправлять HTTP запрос на указанные endpoints в функциях one и two и тест будет считаться успешным, если кол-во отправленных запросов http_reqs будет больше или равно 1000 запросам в секунду.
Хедеры представлены для примера.
Запускаем:
Bash
k6 run load.js
Конечно в данном случае тест не пройден, ибо 10 пользователей не дадут 1к RPS, но это просто пример того, как может выглядеть скрипт на js для запуска в k6.