Добавить в корзинуПозвонить
Найти в Дзене
Анастасия Софт

Интеграция k6 с CI/CD: автоматизируем нагрузочное тестирование

Всем привет! Если вы разработчик, тестировщик или DevOps-инженер, наверняка сталкивались с задачей автоматизации нагрузочного тестирования. Сегодня расскажем, как интегрировать инструмент k6 с популярными CI/CD системами: GitHub Actions, GitLab CI и Jenkins. И да, мы не просто покажем, как это работает, но и объясним каждую строку кода, чтобы даже новичок понял, что и зачем происходит. Поехали! 🚀 k6 — это современный инструмент для нагрузочного тестирования API и веб-приложений. Он написан на Go, но тесты пишутся на JavaScript, что делает его удобным и мощным инструментом для разработчиков. Создадим файл test.js: import http from 'k6/http'; // Импортируем модуль для HTTP-запросов
import { check } from 'k6'; // Импортируем функцию для проверок
export default function () {
const res = http.get('https://test-api.com'); // Отправляем GET-запрос
// Проверяем, что статус ответа 200
check(res, {
'is status 200': (r) => r.status === 200,
});
} Объяснение: Создадим файл .github/w
Оглавление

Всем привет! Если вы разработчик, тестировщик или DevOps-инженер, наверняка сталкивались с задачей автоматизации нагрузочного тестирования. Сегодня расскажем, как интегрировать инструмент k6 с популярными CI/CD системами: GitHub Actions, GitLab CI и Jenkins. И да, мы не просто покажем, как это работает, но и объясним каждую строку кода, чтобы даже новичок понял, что и зачем происходит. Поехали! 🚀

🔧 Что такое k6?

k6 — это современный инструмент для нагрузочного тестирования API и веб-приложений. Он написан на Go, но тесты пишутся на JavaScript, что делает его удобным и мощным инструментом для разработчиков.

🛠 Задачи, которые мы решим:

  1. Напишем простой тест с использованием k6.
  2. Интегрируем его в GitHub Actions.
  3. Настроим аналогичную интеграцию в GitLab CI.
  4. Реализуем запуск тестов в Jenkins.
  5. Научимся публиковать отчёты о результатах тестирования.

1. Написание простого теста на k6

Создадим файл test.js:

import http from 'k6/http'; // Импортируем модуль для HTTP-запросов
import { check } from 'k6'; // Импортируем функцию для проверок

export default function () {
const res = http.get('https://test-api.com'); // Отправляем GET-запрос

// Проверяем, что статус ответа 200
check(res, {
'is status 200': (r) => r.status === 200,
});
}

Объяснение:

  • http.get: отправляет GET-запрос по указанному URL.
  • check: проверяет условия, например, что статус ответа равен 200.

2. Интеграция с GitHub Actions

Создадим файл .github/workflows/load-test.yml:

name: k6 Load Test

on: [push]

jobs:
load-test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up k6
uses: grafana/k6-action@v0.2.0
- name: Run k6 test
run: k6 run test.js

Объяснение:

  • on: [push]: триггерит workflow при каждом push в репозиторий.
  • runs-on: ubuntu-latest: указывает, что job будет выполняться на последней версии Ubuntu.
  • actions/checkout@v2: шаг для клонирования репозитория.
  • grafana/k6-action@v0.2.0: официальный action для запуска k6.
  • k6 run test.js: выполняет наш тест.

3. Интеграция с GitLab CI

Создадим файл .gitlab-ci.yml:

stages:
- load-test

load-test:
image: grafana/k6
script:
- k6 run test.js
artifacts:
paths:
- result.json
expire_in: 1 week

Объяснение:

  • stages: определяет этапы CI/CD pipeline.
  • image: grafana/k6: указывает Docker-образ для выполнения теста.
  • script: команды, которые будут выполнены на этом этапе.
  • artifacts: сохраняет результаты теста на указанное время.

4. Интеграция с Jenkins

Создадим файл Jenkinsfile:

pipeline {
agent any

stages {
stage('Checkout') {
steps {
git 'https://github.com/your-repo.git'
}
}
stage('Run k6 Test') {
steps {
sh 'k6 run test.js'
}
}
}
}

Объяснение:

  • agent any: указывает, что pipeline может быть выполнен на любом доступном агенте Jenkins.
  • git: шаг для клонирования репозитория.
  • sh: выполняет команду в оболочке, в нашем случае — запуск теста k6.

5. Публикация отчётов о результатах

В GitHub Actions:

Добавим шаг для генерации отчёта:

- name: Generate HTML report
run: |
k6 run --summary-export=summary.json test.js
k6 report summary.json > result.html
- name: Upload result
uses: actions/upload-artifact@v2
with:
name: load-test-report
path: result.html

Объяснение:

  • --summary-export=summary.json: экспортирует сводку результатов в файл.
  • k6 report summary.json > result.html: генерирует HTML-отчёт.
  • actions/upload-artifact@v2: загружает отчёт как артефакт.

В GitLab CI:

Добавим в .gitlab-ci.yml:

load-test:
image: grafana/k6
script:
- k6 run --summary-export=summary.json test.js
- k6 report summary.json > result.html
artifacts:
paths:
- result.html
expire_in: 1 week

Объяснение:

  • --summary-export=summary.json: экспортирует сводку результатов.
  • k6 report summary.json > result.html: генерирует HTML-отчёт.
  • artifacts: сохраняет отчёт на указанное время.

В Jenkins:

Добавим шаг в Jenkinsfile:

stage('Generate Report') {
steps {
sh 'k6 run --summary-export=summary.json test.js'
sh 'k6 report summary.json > result.html'
archiveArtifacts artifacts: 'result.html', allowEmptyArchive: true
}
}

Объяснение:

  • --summary-export=summary.json: экспортирует сводку результатов.
  • k6 report summary.json > result.html: генерирует HTML-отчёт.
  • archiveArtifacts: сохраняет отчёт как артефакт Jenkins.

✅ Резюме

Теперь у вас есть полное руководство по интеграции k6 с CI/CD системами:

  • GitHub Actions: автоматический запуск тестов при каждом push.
  • GitLab CI: настройка pipeline для выполнения тестов.
  • Jenkins: создание pipeline для запуска тестов и публикации отчётов.