Привет! Представляю вашему вниманию перевод статьи «WWDC19: Getting Started with Test Plan for XCTest» автора Shashikant Jagtap.
На прошедшей конференции WWDC компания Apple показала новые классные фичи для разработчиков. В Xcode 11 так же добавлено несколько потрясающих фич. О них можно почитать в release notes. Один из наиболее значимых инструментов, анонсированных в этом году, — Test Plan для XCTest и Xcode UI тестов. В этой статье мы детально рассмотрим, как функционал Test Plan будет работать с XCTest. Если вы хотите узнать больше подробностей, посмотрите видео сессии “Testing on Xcode”
Xcode Test Plan
До Xcode 11 тестовая конфигурация была частью Xcode схем. Если разработчики хотели сконфигурировать разные наборы тестов для разных условий, они или создавали новую схему, или редактировали существующую под определенные тестовые нужды. Тестовая конфигурация была тесно связана с Xcode схемами, поэтому приходилось создавать множество схем для для разных задач при тестировании.
Новая функциональность в Xcode 11 позволяет разработчикам и QA инженерам конфигурировать тесты согласно своим потребностям. Test Plan позволяет определить:
- какие тесты запустить в сборке;
- как запустить эти тесты (например, в случайном или алфавитном порядке);
- как управлять тестовыми артефактами (например, аттачментами и скриншотами);
- как использовать runtime инструменты как часть тестирования.
С Xcode Test Plan вы можете конфигурировать тест-сьюты независимо от Xcode схем. Это значительное улучшение в технологиях тестирования, которое может вывести ваши тесты на новый уровень. Теперь давайте посмотрим на Xcode Test plan в действии.
Сценарий
Предположим, что мы создаем тест-план для функциональных тестов со следующими требованиями:
- В функциональных тестах должны присутствовать наборы для смоук- и регресс-тестов;
- Смоук-тесты должны запускаться в Лондоне (UK), а регрессионные — в Сан-Франциско (USA);
- Смоук-тесты должны запускаться в алфавитном порядке, а регрессионные — в случайном, чтобы отловить проблемы между тестами.
Мы создадим этот тест-план для Xcode для различных платформ Apple.
Создание Test Plan в Xcode
Xcode 11 позволяет нам определять эти требования в Test Plan. Xcode позволяет создавать Test Plan из текущей конфигурации схемы. Когда вы редактируете схему и переходите к текущим тестовым действиям, Xcode отображает опцию для создания Test Plan. Вы можете создать Test Plan со следующими настройками:
- Blank Test Plan: Создает пустой шаблон и позволяет сделать свой собственный план;
- Test Plan from Scheme: Берет конфигурацию схемы и создает Test Plan;
- Choose Test Plan: Если у вас уже есть созданный Test Plan, вы можете выбрать и добавить его в схему.
Для ознакомления создадим Test Plan из конфигурации схемы.
Нужно назвать Test Plan и указать правильный тестовый таргет. Когда Test Plan создан, он прикреплен к схеме. Однако схема может переопределить любой Test Plan, созданный после, с помощью флага при вызове команды Xcodebuild. После создания Test Plan, вы можете прикрепить его к определенному таргету. Давайте добавим текущий план к таргету с UI тестами и присвоим ему имя.
Вы обнаружите новый файл с расширением functional.xctestplan. Это и есть ваш Test Plan. Его можно редактировать при необходимости. Можно сделать составной Test Plan в том же таргете в зависимости от потребностей тестов. В этом месте у нас есть доступный Test Plan для нашего таргета с UI тестами.
Test Plan файл
Файл Test Plan — простой json-подобный конфигурационный файл, который содержит информацию о том, как конфигурировать ваши тесты для запуска независимо от любой схемы. Здесь находятся различные настройки для конфигурации тестов, доступные в Test Plan. Базовый Test Plan содержит три ключевых элемента:
- Configurations (Конфигурации);
- Test Targets (Тестовые таргеты);
- Settings (Настройки).
Каждая конфигурация в Test Plan содержит набор тестов, привязанных к нему с различными настройками. В соответствии с требованиями к нашему тест-плану нам понадобятся две конфигурации: одна для смоук-тестов, другая — для регрессионных тестов.
Теперь давайте откроем файл functional.xctestplan в Xcode и переименуем configuration1 в smoke-uk, а затем кликнем на кнопку “+” вверху плана и добавим другую конфигурацию regression-usa.
Теперь у нас есть две конфигурации в Test Plan и Test Plan уже привязан к таргету с UI-тестами. Добавим некоторые настройки к каждой конфигурации. Когда smoke-uk конфигурация выбрана, мы можем изменить локацию на Лондон и внести другие изменения в настройках. Подобным образом изменим конфигурацию regression-usa. Вот так будет выглядеть Test Plan для запуска регресса:
Настройки доступные в Test Plan:
- Arguments — позволяет переопределить launch arguments и launch environment для тестов;
- Localization — позволяет конфигурировать тесты для различных геолокаций, локалей и языков. Это очень крутая настройка для тестирования интернационализации и локализации;
- UI Testing/Attachment/Test Execution/Code Coverage — специфичные опции для UI тестирования и тестовых артефактов. Вы можете решить, оставлять ли артефакты или удалять их при первой возможности. Также можно выбрать порядок запуска тестов и подсчет покрытия кода;
- Xcode Code Diagnostic tools — несколько инструментов Xcode для диагностики кода, как например, Address Sanitizer или Thread Sanitizer, доступны для поиска runtime-ошибок. Вы также можете использовать другие опции, которые помогают искать утечки памяти и т.п.
Создание Test Plan с нуля
Если вы не хотите создавать Test Plan, используя Xcode схему, то вы всегда можете создать новый Test Plan через Xcode → Product → Test Plan.
Cоздав Test Plan таким образом, прикрепим его к некоторому тестовому таргету путём добавления тестов к нему. В примере ниже мы создали новый Test Plan и добавили в него тесты.
Создание Test Plan из исходника
Как было упомянуто ранее, Xcode Test Plan — это всего лишь конфигурационный файл, где мы установили все определенные нами конфигурации. В нашем сценарии мы создали functional.xctestplan, и исходный код для него выглядит примерно так:
{
"configurations" : [
{
"name" : "smoke-uk",
"options" : {
"language" : "en-GB",
"locationScenario" : {
"identifier" : "London, England",
"referenceType" : "built-in"
},
"region" : "GB",
"testExecutionOrdering" : "lexical"
}
},
{
"name" : "Regression-usa",
"options" : {
"addressSanitizer" : {
"enabled" : true
},
"language" : "en",
"locationScenario" : {
"identifier" : "San Francisco, CA, USA",
"referenceType" : "built-in"
},
"region" : "US",
"testExecutionOrdering" : "random"
}
}
],
"defaultOptions" : {
"codeCoverage" : false
},
"testTargets" : [
{
"target" : {
"containerPath" : "container:XCTestPlan.xcodeproj",
"identifier" : "9B0E393A22A6EB5400F666A1",
"name" : "XCTestPlanUITests"
}
}
],
"version" : 1
}
Вы можете создать конфигурацию таким образом и сохранить ее в файл с расширением .xctestplan в Xcode 11.
Запуск Test Plan
Теперь мы понимаем процесс создания файла Test Plan в Xcode. Давайте посмотрим, как запускать Test Plan и получать отчеты в Xcode. Вы можете запускать тесты через Xcode → Product → Test как обычно, запуская прикрепленные Test Plans к схеме. В нашем случае это запустит обе тестовые конфигурации — смоук и регресс.
Есть несколько опций командной строки в Xcodebuild для просмотра и запуска Test Plans. Можно выполнить следующую команду:
$ Xcodebuild -showTestPlans -scheme YOUR_SCEME
Она выведет все Test Plans для текущей схемы. Вы также можете запустить отдельный тест:
$ Xcodebuild -project XCTestPlan.Xcodeproj/ -scheme XCTestPlan -destination 'platform=iOS Simulator,OS=13.0,name=iPhone XR' test -testPlan functional
Этот скрипт запустит тест, используя конфигурацию Test Plan.
Отчеты Test Plan
После выполнения тестов для определенного Test Plan, вы можете посмотреть хорошие отчеты, сгенерированные в Xcode. Отчеты генерируются отдельно для каждой конфигурации.
В Xcode, в разделе test navigator, вы можете фильтровать отчеты по Test Plans. Отчеты по Xcode Test Plan могут быть сконфигурированы на Xcode сервере.
Исходный код демо доступен на Github: XCTestPlan
Xcode Test Plan: применение
Вкратце о том, где может быть использован Xcode Test Plan и как он изменяется в зависимости от конфигурации схемы. Вот несколько примеров использования Xcode Test Plan:
- Различные виды тестирования, как было показано в демо: смоук, регрессионное и т. д.;
- Тестирование интернационализации и локализации приложения, например, если вы хотите протестировать ваше приложение для нескольких языков, вы можете создать различные конфигурации;
- Запуск тяжелых тестов, таких как, например, перфоманс, нагрузочные, и отделение их от функциональных тестов. Вы можете сконфигурировать тесты на работу вместе с инструментами для диагностики кода или с другими нефункциональными тестами.
Также возможно множество других сценариев, где Xcode Test Plans может помочь расширить процесс тестирования.
Заключение
С Xcode Test Plan, XCTest может быть выведен на новый уровень по возможностям управления конфигурацией и запуском ваших тестов. Xcode Test Plans позволяет лучше контролировать платформу тестирования на базе Apple.
Автор: Neifmetus