Меня зовут Сергей, я занимаюсь нативной автоматизацией тестирования мобильных приложений (iOS) в компании РТЛабс. 

В данной статье я расскажу, как внедрялась отчётность на наших проектах, какие средства использовались и о порядке действий для получения результатов прогона автотестов в Allure.

Краткое содержание статьи:

1. Введение

2. Анализ подобранных вариантов ведения отчётности
2.1. Вариант fastlane-plugin-test_center
2.2. Вариант XCTestHTMLReport
2.3. Вариант xcresults (в связке с Allure)

3. Подключение Allure
3.1. Внедрение аннотаций
3.2. Установка необходимых компонентов
3.3. Формирование отчёта
3.4. Анализ отчёта

4. Заключение

Введение

Мы используем следующий стек инструментов для создания UI-тестов мобильного приложения для iOS и прогона тестовых наборов:

  • Swift;

  • XCTest;

  • XCode;

  • Jenkins.

Наш отдел выполняет тестирование мобильных приложений на продуктивной среде (проде) ежедневно. После внедрения UI-тестов мануальным тестировщикам требовалась исчерпывающая информация о том, как прошел смоук-набор автотестов, в связи с чем возникла потребность подобрать оптимальный вариант предоставления отчёта для них.

Стандартный отчёт *.xctestresult, который генерирует XCode, не предоставлял полной и подробной информации для обработки результатов при разборе прогона. 

Необходимо было, чтобы отчёт содержал название тест-кейса, ссылку на него, шаги кейса, скриншоты, а также, чтобы он был простым и наглядным.

Анализ подобранных вариантов ведения отчётности

При выборе решения в качестве вариантов мы рассмотрели плагины fastlane-plugin-test_center, XCTestHTMLReport и xcresults (в связке с Allure).

Наиболее подходящим решением стал плагин xcresults (в связке с Allure), так как информация, предоставленная им, имеет самый расширенный функционал:

  • процентное соотношение пройденных, проваленных, скипнутых и др. тестов; 

  • таймлайн; 

  • графики с количественной статистикой по статусам, длительности, ретраям и др.; 

  • подробное отображение информации по каждому тесту (название теста, ссылка на кейс, шаги, скриншот, длительность теста и каждого шага, ретраи и др.).

Помимо перечисленного, Allure – основное решение при автоматизации других направлений (web, API). Поэтому оно будет удобно и привычно при использовании и на мобильном приложении. 

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

Вариант fastlane-plugin-test_center

Для внедрения fastlane-plugin-test_center необходимо выполнить установку fastlane и плагина fastlane-plugin-test_center, сконфигурировать файл Fastfile (более подробная инструкция в документации https://docs.fastlane.tools/ ), а затем запустить прогон автотестов.

Для этого в cmd нужно выполнить следующую команду в директории проекта:

fastlane test

где test – имя lane из файла Fastfile.

Итоговый отчёт выглядит следующим образом:

* Изображение взято с сайта https://docs.fastlane.tools/actions/scan/
* Изображение взято с сайта https://docs.fastlane.tools/actions/scan/

Данный отчёт содержит минимальную информацию, такую, как количество пройденных или упавших тестов, результат выполнения, названия тестов (но не самих кейсов), шаги, длительность тестов.

Вариант XCTestHTMLReport

1. Для подключения XCTestHTMLReport необходимо установить плагин.
Для этого в cmd нужно выполнить следующую команду:

brew install XCTestHtmlReport/xchtmlreport/xchtmlreport 

2. Перейти в директорию проекта.
Для этого в cmd нужно выполнить следующую команду:

cd pathToProject

3. Запустить прогон автотестов.
Например, выполнив в cmd команду:

xcodebuild test -workspace workspacename.xcworkspace -scheme schemename -destination 'platform=iOS Simulator,name=iPhone 12,OS=15.2' -testPlan NameTestPlan -resultBundlePath TestResults

4. Сформировать отчёт.
Для этого в cmd нужно выполнить следующую команду:

xchtmlreport -r TestResults

5. Открыть отчёт – файл index.html.

Итоговый отчёт выглядит следующим образом:

Полученный вариант более информативный, чем первый. Отчёт содержит данные о количестве пройденных и упавших тестов, результат выполнения, названия тестов (но не самих кейсов), шаги, длительность тестов, сведения об устройстве запуска, скриншоты.

Вариант xcresults (в связке с Allure)

Более подробно остановимся на порядке действий для подключения Allure-отчёта, так как он был выбран в качестве оптимального ведения отчётности из-за возможности предоставлять максимально подробную информацию.

Подключение Allure

Внедрение аннотаций

1. Для начала необходимо подготовить аннотации в коде проекта.
Для этого нужно создать новый файл в модуле с автотестами:

Метод feature используется для названия тест-кейса.
Метод link используется для указания ссылки на тест-кейс.
Методы label и links – вспомогательные.

Аналогично в данный файл можно добавить методы id, epic, story и другие для указания дополнительной информации.
Например:

2. Следующий шаг – добавление аннотаций в автотесты:

3. Чтобы в отчёте отображалось названия шагов, есть два способа:

Первый способ

В файл с аннотациями добавить метод step:

В автотесте использовать аннотацию step:

* Примечание: в данном примере для наглядности проверки осуществляются непосредственно в методе теста, на самом деле корректно выносить их в отдельный файл и вызывать методы проверки в методе теста.

Второй способ

В файлах с методами проверок использовать XCTContext.runActivity:

4. Чтобы в отчёт попадали скриншоты, необходимо в методе tearDown вызывать метод, сохраняющий скриншоты, например, takeScreenShot:

Установка необходимых компонентов

Для локального запуска автотестов понадобится:

1.  Установить Allure
Для этого в cmd нужно выполнить следующую команду:

brew install allure

2. Установить xcresults
Для этого в cmd нужно выполнить следующую команду:

wget https://github.com/eroshenkoam/xcresults/releases/latest/download/xcresults

Если не установлен wget, установить его, выполнив команду: 

brew install wget

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

3. Сделать исполняемым установленный файл
Для этого в cmd нужно выполнить следующую команду:

chmod +x xcresults

Для запуска автотестов на Jenkins:

Добавить shell-команды в разделе «Сборка»:

wget https://github.com/eroshenkoam/xcresults/releases/latest/download/xcresults
chmod +x xcresults

Формирование отчёта

Для локального формирования отчёта:

1. Перейти в директорию проекта.
Для этого в cmd нужно выполнить следующую команду:

cd pathToProject

2. Запустить прогон автотестов
Например, выполнив в cmd команду:

xcodebuild test -workspace workspacename.xcworkspace -scheme schemename -destination 'platform=iOS Simulator,name=iPhone 12,OS=15.2' -testPlan NameTestPlan -resultBundlePath TestResults

В итоге должно быть получено два файла TestResult и TestResult.xctestresult.

3. Создать директорию для формирования отчёта
Для этого в cmd нужно выполнить следующую команду:

mkdir allure-results

4. Запустить экспорт xctestresult-отчёта в allure-отчёт
Для этого в cmd нужно выполнить следующую команду:

xcresults export TestResults.xcresult allure-results

Если будет получено command not found: xcresults, заменить команду на следующую:

./xcresults export TestResults.xcresult allure-results

5. Запустить генерацию Allure-отчёта: 
Для этого в cmd нужно выполнить следующую команду:

allure serve allure-results

Для Jenkins:

После команды запуска автотестов (например, следующей командой):

xcodebuild test -workspace workspacename.xcworkspace -scheme schemename -destination 'platform=iOS Simulator,name=iPhone 12,OS=15.2' -testPlan NameTestPlan -resultBundlePath TestResults   

Добавить shell-команды в разделе «Сборка»:

mkdir allure-results
xcresults export TestResults.xcresult allure-results

Анализ отчёта

После выполнения всех действий будет получен отчёт:

В него попадают название теста, ссылка на тест-кейс, шаги и скриншот падения:

Как видно из скриншотов, информация Allure-отчёта более содержательная и ее удобно анализировать.

Внедрение отчёта предоставило ручным тестировщикам удобный переход по ссылке непосредственно к тест-кейсу, отображение название кейса (а не теста), простую навигацию по набору тестов, подробную информацию о прохождении (шаги, ошибки при падении, скриншоты и др.).

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

Заключение

В дальнейшем мы планируем переход к TestOps, и выбранное решение для отчётности в виде использования плагина xcresults (в связке с Allure) также будет актуальным.

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

Спасибо за внимание!

Комментарии (2)


  1. TheKnight
    06.09.2022 00:30

    А у вас при таком подходе таймлайн нормально рисуется?

    У меня вот не рисовался :(

    Ну и xcresults, который вы скачиваете в 3.2 - это разве плагин, не отдельный бинарь, как allure?


    1. SergeyKrivorotko Автор
      06.09.2022 07:15

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