Массовое тестирование модулей#

Массовое тестирование модулей используется для запуска набора тестов по классу, модулю, маске или всему проекту. Такой запуск применяют для проверки изменений, регрессионной проверки модуля и включения тестов в общий сценарий проверки проекта.

Тесты можно запускать из консоли sbt, через подготовленный сценарий JMeter или исключать из массового запуска, если тест временно не должен участвовать в общей проверке.

Массовое тестирование применяется для запуска уже существующих тестов по заданному правилу.

Механизм позволяет:

  • запускать конкретный тестовый класс;

  • запускать все тесты модуля;

  • запускать все тесты проекта;

  • запускать тесты, связанные с последними изменениями;

  • выполнять запуск через JMeter-сценарий.

Обычно массовый запуск используется для unit-тестов, API-тестов, тестов отдельных модулей, регрессионных проверок и проверок перед сборкой или выпуском версии.

Подготовка тестирования#

Перед массовым запуском необходимо проверить, что:

  • проект собирается;

  • доступен исполняемый файл sbt;

  • тестовые классы находятся в ожидаемых пакетах;

  • тесты не обращаются к промышленной БД или промышленным внешним сервисам;

  • тесты очищают созданные данные или выполняют откат транзакции, если работают с БД или файлами;

  • для запуска через JMeter доступен сценарий unitTest.jmx.

Создание и настройка#

Настройка массового запуска сводится к выбору набора тестов и способа запуска.

Для запуска через sbt указывается команда и, при необходимости, маска отбора тестов. Для запуска через JMeter настраиваются рабочая директория проекта и параметры компонента run test.

Запуск сценариев тестирования с использованием JMeter#

Для запуска тестов через JMeter скачайте и установите JMeter.

После установки откройте подготовленный сценарий тестирования.

Примечание

Если JMeter-сценарий использует WebSocket-соединения, необходимо установить плагин JMeter WebSocket Samplers.

Сценарий содержит три варианта запуска:

  • TestByModule — тестирование по модулю;

  • TestByClass — тестирование по классу;

  • TestAll — запуск всех тестов проекта.

Для запуска сценария:

  1. Выберите нужный thread.

  2. Сделайте его активным через операцию контекстного меню Enable.

  3. При необходимости отключите лишние thread через операцию Disable.

  4. Разверните выбранный thread.

  5. Откройте параметры компонента run test.

  6. При необходимости замените рабочую директорию на директорию, в которой находится исполняемый файл sbt нужного проекта.

  7. В параметрах замените исполняемую команду. Используйте команды запуска из раздела Запуск из консоли sbt.

  8. Запустите тестирование операцией Start на панели инструментов.

  9. Дождитесь завершения тестирования.

  10. Проверьте результаты выполнения в View Results Tree.

Подробный отчет о выполнении тестов можно посмотреть на вкладке Response data.

Проверка результата#

Результат массового запуска проверяется по отчету инструмента, через который выполнялся запуск.

При запуске из консоли sbt необходимо проверить:

  • завершилась ли команда без ошибок;

  • какие тесты были выполнены;

  • какие тесты завершились ошибкой;

  • какие тесты были проигнорированы;

  • содержит ли вывод понятное сообщение о причине ошибки.

При запуске через JMeter результаты отображаются в View Results Tree. Для детального анализа используйте вкладку Response data.

Особенности массового тестирования модулей#

Выборочное исключение тестов из массового тестирования#

Если тест нужно временно отключить от массового запуска, замените вызов метода test на ignore.

В этом случае тест не будет выполняться, а в результатах запуска будет указано, что он проигнорирован.

Шаблон временного отключения теста:

ignore("наименование теста") {
  // тело теста
}

Используйте ignore только для временного отключения тестов. Если тест больше не нужен, его лучше удалить или переработать.

Изоляция и повторяемость#

Тесты, включенные в массовый запуск, должны корректно работать независимо от порядка запуска и состояния других тестов.

Если тест создает или изменяет данные, он должен выполнять очистку или откат. Не рекомендуется привязывать тесты к объектам, созданным вручную в тестовой БД, и использовать промышленные внешние сервисы.

Интеграция в массовый запуск или CI/CD#

Массовое тестирование можно использовать локально и в CI/CD.

В CI/CD обычно запускают:

  • набор тестов по модулю;

  • smoke-набор;

  • полный набор тестов проекта перед сборкой, выпуском версии или публикацией артефакта.

Для ускорения проверки можно использовать testQuick, если требуется запустить только тесты, связанные с последними изменениями.

Типовые проблемы#

При массовом запуске тестов часто возникают следующие проблемы:

  • тест зависит от состояния тестовой БД;

  • тест изменяет данные и не выполняет очистку;

  • тест обращается к промышленной базе данных или внешнему сервису;

  • тест проходит только при запуске после другого теста;

  • в команде testOnly указан неверный пакет или имя класса;

  • маска запуска через * выбирает больше тестов, чем ожидалось;

  • запуск всех тестов проекта занимает слишком много времени;

  • в JMeter указана неверная рабочая директория проекта;

  • в JMeter не заменена команда запуска тестов.

Рекомендации#

При настройке массового тестирования рекомендуется:

  • запускать тесты по модулю перед запуском всего проекта;

  • использовать testOnly, если нужно проверить конкретный класс или модуль;

  • использовать testQuick для проверки тестов, связанных с последними изменениями;

  • не запускать весь проект без уверенности, что тесты безопасны для файлов и БД;

  • проверять, что тесты не зависят от порядка запуска;

  • добавлять очистку или откат данных в тесты, которые изменяют БД;

  • временно отключенные тесты помечать через ignore, а не удалять без анализа;

  • регулярно возвращать временно отключенные тесты в общий набор.

Ограничения#

Массовое тестирование запускает только уже написанные тесты и не гарантирует полного покрытия системы.

Если тест нестабилен, зависит от ручной подготовки данных или обращается к промышленным сервисам, массовый запуск только сделает проблему заметнее.