Публикация отчетов о тестировании и уведомлений о сборке

Beginner

Введение

Сборки Jenkins становятся гораздо информативнее, когда они публикуют результаты своей работы. Отчеты о тестировании показывают, какие тесты были пройдены, а какие завершились с ошибкой, а уведомления помогают команде оперативно реагировать на сборки, требующие внимания.

В этой лабораторной работе вы используете панель управления Jenkins для создания проекта типа Freestyle, генерации небольшого отчета JUnit XML, его публикации в качестве отчета о тестировании Jenkins, настройки получателя уведомлений по электронной почте и запуска повторной сборки с одним неудачным тестом.

Создание задания, генерирующего JUnit XML

На этом этапе вы создадите проект Jenkins Freestyle, который записывает файл JUnit XML. JUnit XML — это распространенный формат отчетов, который Jenkins может считывать, даже если данные тестов поступают из простого shell-скрипта.

Откройте интерфейс рабочего стола. Firefox автоматически откроет Jenkins. Если этого не произошло, перейдите по адресу http://localhost:8080.

На панели управления Jenkins:

Нажмите New Item, введите test-report-demo, выберите Freestyle project и нажмите OK.

На странице конфигурации прокрутите вниз до раздела Build Steps, нажмите Add build step и выберите Execute shell.

Введите следующий shell-скрипт в поле Command:

mkdir -p reports
printf '%s\n' \
  '<testsuite name="LabExSuite" tests="2" failures="0" skipped="0">' \
  '  <testcase classname="demo.HealthTest" name="test_home_page"/>' \
  '  <testcase classname="demo.HealthTest" name="test_api_status"/>' \
  '</testsuite>' > reports/junit.xml
echo "Generated passing JUnit report"

Нажмите Save.

После сохранения откроется страница задания.

Jenkins test report job

Выполните следующую команду в терминале, чтобы зафиксировать сохраненный шаг shell:

docker exec jenkins sh -lc "grep -n -E 'reports/junit.xml|Generated passing JUnit report' /var/jenkins_home/jobs/test-report-demo/config.xml" | tee /home/labex/project/test-report-job-config.txt

Публикация отчета о результатах тестирования JUnit

На этом этапе вы добавите действие после сборки (post-build action), которое публикует файл JUnit XML. Шаг сборки создает файлы во время процесса, а действие после сборки обрабатывает их после завершения сборки.

На странице задания test-report-demo нажмите Configure.

Прокрутите вниз до раздела Post-build Actions, нажмите Add post-build action и выберите Publish JUnit test result report.

В поле Test report XMLs введите:

reports/junit.xml

Нажмите Save.

Jenkins JUnit publisher configuration

Выполните следующую команду, чтобы зафиксировать сохраненные настройки публикатора JUnit:

docker exec jenkins sh -lc "grep -n -E 'JUnitResultArchiver|<testResults>reports/junit.xml</testResults>' /var/jenkins_home/jobs/test-report-demo/config.xml" | tee /home/labex/project/junit-publisher-lines.txt

Вывод должен содержать как JUnitResultArchiver, так и reports/junit.xml.

Запуск сборки и проверка результатов тестирования

На этом этапе вы запустите задание и изучите опубликованный отчет о тестировании. Первый отчет содержит два успешно пройденных теста, поэтому Jenkins должен пометить сборку как успешную.

На странице задания test-report-demo нажмите Build Now.

Когда в истории сборок появится сборка #1, откройте ее и нажмите Test Result.

На странице результатов тестирования должно быть указано ноль ошибок, а также должен быть перечислен пакет demo.

Jenkins passing JUnit test results

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

curl -fsS http://localhost:8080/job/test-report-demo/1/api/json | grep '"result":"SUCCESS"' | tee /home/labex/project/passing-test-result.txt
curl -fsS http://localhost:8080/job/test-report-demo/1/testReport/api/json | grep '"failCount":0' | tee -a /home/labex/project/passing-test-result.txt

Вы должны увидеть:

"result":"SUCCESS"
"failCount":0

Добавление получателя уведомлений о сборке

На этом этапе вы добавите получателя уведомлений по электронной почте в Jenkins. В промышленном контроллере Jenkins потребовались бы настройки SMTP для отправки почты. В этой лабораторной работе важным концептуальным моментом для начинающих является понимание того, где именно в задании хранятся данные о получателе уведомлений.

На странице задания test-report-demo нажмите Configure.

Прокрутите вниз до раздела Post-build Actions, нажмите Add post-build action и выберите E-mail Notification.

В поле Recipients введите:

dev-team@example.com

Нажмите Save.

Jenkins email notification configuration

Выполните следующую команду, чтобы зафиксировать сохраненные настройки уведомлений:

docker exec jenkins sh -lc "grep -n -E 'hudson.tasks.Mailer|dev-team@example.com' /var/jenkins_home/jobs/test-report-demo/config.xml" | tee /home/labex/project/mail-notification-lines.txt

Вывод должен содержать публикатор почты Jenkins и адрес получателя.

Вызов ошибки в тесте и повторная сборка

На этом этапе вы обновите шаг shell так, чтобы отчет JUnit содержал один неудачный тест. Jenkins помечает сборки с неудачными тестами JUnit как UNSTABLE — именно такой результат сборки должен быть выделен уведомлением для команды.

На странице задания test-report-demo нажмите Configure.

Найдите шаг сборки Execute shell. Замените команду на следующую, генерирующую отчет с ошибкой:

mkdir -p reports
printf '%s\n' \
  '<testsuite name="LabExSuite" tests="2" failures="1" skipped="0">' \
  '  <testcase classname="demo.HealthTest" name="test_home_page"/>' \
  '  <testcase classname="demo.HealthTest" name="test_api_status">' \
  '    <failure message="API returned 500">simulated failure</failure>' \
  '  </testcase>' \
  '</testsuite>' > reports/junit.xml
echo "Generated failing JUnit report"

Нажмите Save, а затем Build Now.

Когда появится сборка #2, откройте ее и нажмите Test Result. На странице должен отобразиться один неудачный тест.

Jenkins unstable JUnit test results

Выполните следующую команду, чтобы сохранить доказательство нестабильной сборки:

curl -fsS http://localhost:8080/job/test-report-demo/2/api/json | grep '"result":"UNSTABLE"' | tee /home/labex/project/unstable-test-result.txt
curl -fsS http://localhost:8080/job/test-report-demo/2/testReport/api/json | grep '"failCount":1' | tee -a /home/labex/project/unstable-test-result.txt

Вы должны увидеть:

"result":"UNSTABLE"
"failCount":1

Резюме

Вы создали проект Jenkins Freestyle через панель управления, сгенерировали отчет JUnit XML, опубликовали его с помощью действия после сборки, изучили отчеты об успешных и неудачных тестах, а также настроили получателя уведомлений по электронной почте для данного задания.