Этот проект содержит готовую структуру для нагрузочных тестов на базе k6.
Подходит для быстрой раскатки на новые проекты НТ, где нужно несколько типов тестов (ramping, stable, perf, debug), разные конфиги сценариев и общие параметры.
k6/global-params.js: глобальные параметры нагрузок (время теста, шаги, warm-up и т.д.).k6/Profile/: операционные конфиги (каждый файл описывает набор сценариев).k6/stages.js: функции генерации «ступеней» (ramping, stable, perf).k6/allExecs.js: exec-функции (scr_...) с логикой авторизации (черезwithAuth).k6/buildScenarios.js: сборкаoptions.scenariosна основе типа теста (ramping|stable|perf|debug).k6/mergeConfigs.js: утилита объединения нескольких конфигов (по списку).k6/main_test.js: главный скрипт k6. Автоматически ищет файлы вk6/scenario-configs, собирает scenarios, задаёт thresholds и экспортирует exec-функции.
Убедитесь, что k6 установлен и доступен в PATH.
Затем можно запустить, например:
cd new-project-nt-load-tests
k6 run k6/main_test.js \
--env STAND="http://mytest.server" \
--env SCENARIO_CONFIG_PATH="config1" \
--env TEST_TYPE="ramping"Файл .gitlab-ci.yml содержит заготовку для запуска тестов:
- Считывает переменные окружения STAND, TEST_TYPE, PROFILE.
- Устанавливает SCENARIO_CONFIG_PATH и TYPE в зависимости от выбора.
- Запускает k6 run в фоне, обрабатывая отмену пайплайна (SIGTERM/SIGINT) для корректного завершения.
- Добавить бизнес-логику в k6/Scripts/HTTP/httpTest.js (или другой файл).
- Создать exec-функцию в allExecs.js, обёрнутую в withAuth(...).
- В каком-нибудь scenario-configX.js прописать:
myNewOperation: {
exec: "scr_myNewOperation",
baseRate: 80,
// ...
}- Импортируем все exec-функции из 1 пункта в main_test.js
- Запустить, указав нужный SCENARIO_CONFIG_PATH и TEST_TYPE.
- Создайте файл scenario-configX.js в k6/scenario-configs/ или добавьте сценарии в уже существующий.
// k6/scenario-configs/scenario-config.js
export default {
// Название сценария (в вашем «продукте»):
operationA: {
exec: "scr_exampleQueryA",
baseRate: 50,
startRate: 1,
timeUnit: "1s",
preAllocatedVUs: 10,
maxVUs: 100,
},
operationB: {
exec: "scr_exampleQueryB",
baseRate: 70,
startRate: 1,
timeUnit: "1s",
preAllocatedVUs: 10,
maxVUs: 150,
},
};- Опишите там свои сценарии.
- В main_test.js добавьте обработку case "configX" и импорт нового файла scenario-configX.js:.
import scenarioConfigX from "./Profile/scenario-configX.js";
import scenarioConfigX1 from "./Profile/scenario-configX1.js";
//...Остальной код
for (const name of configNames) {
switch (name) {
case "scenario-configX":
configsToMerge.push(scenarioConfigX);
break;
case "scenario-configX1":
configsToMerge.push(scenarioConfigX1);
break;
default:
throw new Error(`Unknown config name: ${name}`);
}
}- Теперь можно вызывать несколько конфигов, через запятую:
k6 run k6/Profile/main_test.js --env SCENARIO_CONFIG_PATH="scenario-configX,scenario-configX1"В случае вопросов по k6 и структуре обращайтесь к документации k6.io/docs.