Проверьте нестабильные тесты пользовательского интерфейса, используя Paraller Run и xcodebuild. - PullRequest
2 голосов
/ 05 июня 2019

У меня проблемы с ошибками некоторых тестов пользовательского интерфейса.Я хочу иметь возможность запускать один конкретный тест несколько раз в нескольких симуляторах.Идея состоит в том, чтобы применить это решение для localhost, а затем для серверов CI.

Идеальным решением было бы, если бы я мог пометить какой-либо тест в своем PR как flaky и затем во время xcodebuild test запустить их без явного указания их имени.

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

Я нашел Могу ли я запустить пакет XCTest несколько раз? Тема, в которой описано, как использовать measureBlock для запуска непрерывных тестов, но яне уверен, как указать количество прогонов.Мой фон - C #, где у меня есть доступ только к Repeat(x) и кейс Category, который я могу указать во время пробного запуска.Я ищу что-то подобное.

Пометить категорию теста как Flaky -> применить атрибут Retry(10) -> использовать командный инструмент для запуска всех тестов с Flaky категория

Ищите некоторую идею, что можно сделать для реализациитакое решение для моих тестов iOS.

1 Ответ

0 голосов
/ 06 июня 2019

Краткий ответ на вопрос о повторном запуске нестабильных тестов пользовательского интерфейса: нет , XCTest и xcodebuild не поддерживают эту опцию.Так что это не возможно изначально.

Более длинный ответ - да , это возможно, просто нелегко реализовать.

Вам потребуется:

  1. среда CI, которая будет запускать команду xcodebuild с полным набором тестов
  2. скрипт Python для получения неудачных тестов из результатов ваших тестов (или другого такого языка)
  3. административный доступ к вашему бегунку CI (или как минимум R / W доступ)

Как это сделать?

Ваши тесты будут запущены (а некоторые потерпят неудачу в процессе) в первый xcodebuild test....Вы дадите им закончить и проанализируете (с помощью написанного вами сценария) те тесты, которые не прошли.Вы можете получить эту информацию, например, из файла StandardOutputAndError.txt ( как вы его нашли? ), поэтому вам потребуется полный доступ к вашему бегунку CI.

После сбоя анализа скриптатесты из файла результатов, вы можете создать новую команду xcodebuild с помощью этого скрипта, которая будет запускать только те тесты, которые были проанализированы, потому что они не прошли.Новый xcodebuild будет использовать only-testing: флаги (да, вы можете иметь несколько в одном xcodebuild), чтобы указать тест, он должен быть запущен ( как использовать эти флаги? ).

После этого ваша новая созданная команда xcodebuild будет возвращена в среду CI и выполнена там.Я имел дело с чем-то похожим (создание xcodebuild в скрипте Python для запуска тестов только в соответствии с изменениями в проекте iOS и выполнение его в CI), и мой вопрос должен помочь вам в среде исполнения и CI.

Подводя итог: нет , нативной поддержки этому нет, но да это можно сделать, если вы достаточно смелы :-)

Надеюсь, это помогло.

E: о, и нет - вы не можете (и не должны) использовать measureBlock для этого.Они предназначены для тестирования производительности и не имеют такой функциональности, как повторный запуск неудачных тестов.

...