В этой статье я продемонстрирую простой способ интеграции k6 с XRAY/Jira.
Некоторое время назад мне поручили написать тест производительности для API, который должен был обрабатывать довольно большое количество запросов. По этой причине нам нужен был хороший инструмент, который будет быстрее освоить и облегчить работу любому инженеру по контролю качества.
Раньше я использовал воздействие нагрузки и был хорошо знаком с К6. Вот основные причины, по которым мы выбрали k6 среди других инструментов тестирования производительности:
Использует Javascript: Большинство QA/разработчиков в моей команде были знакомы с JavaScript, поэтому не было необходимости изучать новый язык
Открытый исходный код: это означает, что для использования инструмента не требуется никаких платежей, и сообщество активно
CI/CD: Интеграция k6 с нашими конвейерами CI/CD прошла легко
Я могу продолжить рассказ о преимуществах выбора k6, но специально об этом напишу новый пост.
После завершения создания нашей тестовой среды мы хотели получить результаты тестирования в Jira. Поскольку мы уже использовали XRAY, нам нужно было решение для преобразования отчета K6 JSON в формат XRAY. Мне не удалось найти решения, подходящего для нашего случая.
K6 имеет важную функцию, которую можно использовать для получения всех показателей. Этими параметрами являются стандартный вывод, XML и JSON.
Для этого нам нужно было всего лишь создать скрипт для получения объекта данных из функции handleSummary.
Ниже приведен скрипт для преобразования объекта данных из k6 в простой отчет формата XRAY:
k6-XRAY-скрипт
Клонируйте репозиторий в нужное место:
Желательно создать папку внутри основного проекта.
Пример:
помощник, источник, отчет
Это поможет вам без проблем управлять импортом:
Прежде чем начать, убедитесь, что на вашем компьютере установлено следующее:
Если ваши тесты k6 организованы в группы и каждый заголовок группы соответствует тестовому примеру в Xray, вы можете использовать скрипт генератора для создания файла JSON, совместимого с Xray.
На изображении ниже из документации Xray показаны тестовые примеры с ключами CALC-01 и CALC-02.
В тестовом сценарии k6 вы можете назвать названия групп как CALC-01 и CALC-02. Скрипт будет искать имена этих групп и назначать результаты тестов соответствующим тестовым примерам на Xray.
group('CALC-01', function() { // test code }); group('CALC-02', function() { // test code });
Скрипт генерирует файл JSON, совместимый с Xray, сохраняемый в том же каталоге, что и скрипт.
git clone https://github.com/skingori/k6-json-xray.git
Мы будем использовать функцию handleSummary, предоставленную k6, и textSummary из нашего скриптаgenerator.js, чтобы сгенерировать файл JSON. Функция handleSummary принимает объект данных, который мы передаем в getSummary, чтобы преобразовать его в формат, совместимый с Xray.
Подробнее о обзоре ручки k6 можно прочитать здесь
Откройте скрипт выполнения и добавьте следующие строки:
import { getSummary } from "./generator.js"; import { textSummary } from "https://jslib.k6.io/k6-summary/0.0.1/index.js";
Я использую ./generator.js напрямую, так как он находился в той же папке, что и мой скрипт. Предположим, вы использовали помощник, это должно быть:
import { getSummary } from "./helper/generator.js";
Добавьте конец кода, добавьте функцию handleSummary:
export function handleSummary(data) { return { stdout: textSummary(data, { indent: " ", enableColors: true }), "summary.json": JSON.stringify(getSummary(data, "CALC-2062", "CALC"), null, 2) }; }
Наша функция getSummary преобразует объект данных в ожидаемый рентгеновский формат и сохраняет выходные данные в файл summary.json
Почему мы используем textSummary?
Чтобы вывести вывод на консоль, нам нужно импортировать textSummary из библиотеки утилит k6 JS
Но это может относиться не ко всем, если вам не нужен стандартный отчет, вам не нужно импортировать textSummary
import http from 'k6/http'; import { sleep, group, check } from 'k6'; import { getSummary } from "./generator.js"; import { textSummary } from "https://jslib.k6.io/k6-summary/0.0.1/index.js"; export const options = { vus: 10, duration: '30s', }; export default function() { group('CALC-01', function() { const resp = http.get('http://test.k6.io'); check(resp, { 'status is 200': (r) => r.status === 200, }); sleep(1); }); group('CALC-02', function() { const resp = http.get('http://test.k6.io'); check(resp, { 'status is 200': (r) => r.status === 200, }); sleep(1); }); }; export function handleSummary(data) { return { stdout: textSummary(data, { indent: " ", enableColors: true }), "summary.json": JSON.stringify(getSummary(data, "CALC-2062", "CALC"), null, 2) }; }
Примечание: вы можете исключить stdout: textSummary(data, { indent: " ", EnableColors: true }), line, если не хотите импортировать textSummary
handleSummary работает по умолчанию и обычно вызывается в конце жизненного цикла теста.
Чтобы запустить скрипт, используйте следующую команду:
k6 run script.js -e TEST_PLAN_KEY="CALC-2345" -e TEST_EXEC_KEY="CALC-0009"
TEST_PLAN_KEY и TEST_EXEC_KEY используются для идентификации плана тестирования и выполнения теста в Xray.
Подробнее о плане тестирования и ключах выполнения теста читайте здесь
Приведенный выше скрипт создаст следующий отчет в файле summary.json
{ "info": { "summary": "K6 Test execution - Mon Sep 09 2024 21:20:16 GMT 0300 (EAT)", "description": "This is k6 test with maximum iteration duration of 4.95s, 198 passed requests and 0 failures on checks", "user": "k6-user", "startDate": "2024-09-09T18:20:16.000Z", "finishDate": "2024-09-09T18:20:16.000Z", "testPlanKey": "CALC-2345" }, "testExecutionKey": "CALC-0009", "tests": [ { "testKey": "CALC-01", "start": "2024-09-09T18:20:16.000Z", "finish": "2024-09-09T18:20:16.000Z", "comment": "Test execution passed", "status": "PASSED" }, { "testKey": "CALC-02", "start": "2024-09-09T18:20:16.000Z", "finish": "2024-09-09T18:20:16.000Z", "comment": "Test execution passed", "status": "PASSED" } ] }
Чтобы получить более подробную информацию о k6 и X-ray, обратитесь к их документации:
Документ K6
Рентгеновский документ
Посмотрите также: Как создавать тестовые сценарии и управлять ими с помощью Xray и Jira, классная статья, написанная Сержио Фрейре
И, как всегда, обращайтесь ко мне!
LinkedIn
Электронная почта
Гитхаб
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3