🔥

Тред #11


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

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

В момент сборки проекта для запуска тестов, происходит сборка 2 основных компонент: Приложение Бандлы тестов

Ваше приложение состоит из основного исполняемого файла и всех его зависимостей связанных статически или динамически (тема прошлого поста).

Тестовый раннер принимает на вход тестовые банлды, собранные из таргетов, указанных в схеме сборки. В прогоне тестовых сценариев использованы только те тесты, которые попадут в раннер. Задание этих тестов происходит в схеме (.xcscheme), для которой выполняется команда xcodebuild.

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

Чтобы совершить сборку проекта и раннера без перехода к выполнению тестов, необходимо использовать опцию build-without-testing при вызове xcodebuild. Результатом выполнения этой команды, будет файл .xctestrun, в котором хранятся указания к выполнению тестовых сценариев.

Подробнее, про содержание файла можно почитать тут: manpagez.com/man/5/xcodebui…

Как только у вас есть все артефакты сборки, вы можете перейти к прогону своих тестовых сценариев.

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

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

Найти “упавшие” тесты, вы можете с помощью тестового лога, который ведет сам xcodebuild. При прогоне нескольких тестов в параллель, тест-логи будут находиться внутри .xcresult файла.

Поменяв форматирование имен тестов, вы можете передать их в xcodebuild test-without-building, через параметр ‘-only-testing:’, для повторного выполнения. Введение таких ретраев, позволит увеличить стабильность ваших тестовых прогонов и сэкономить пару нервных клеток разработчикам

Запускать тесты оказалось не таким уж и хитрым делом. Но как мы можем подготовиться к росту их количества?
Продолжение: twitter.com/mobileunderhoo…

Саша АприамашвилиСаша Априамашвили