Запуск отдельных тестовых примеров XCTest (UI, Unit) для приложений iOS из командной строки

Можно ли запускать отдельные тестовые примеры или отдельные тестовые пакеты из целевой тестовой программы приложения iOS вместо всех тестовых примеров из интерфейса командной строки?

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

Вы также можете сделать это с помощью scan от Fastlane, хотя я считаю, что вам запрещено выполнять все тесты сборки (как указано выше), поэтому он не отличается от xcodebuild.

Вы можете запускать специальные тесты с помощью xctool из Facebook, но он не использует xcodebuild и ограничивается только запуском на тренажерах, а не фактические тестовые устройства iOS.

Я нашел ссылку на запуск утилиты командной строки xctest напрямую, но она кажется недокументированной функцией и нацелена на DerivedData. Это осложняется тем, что UI Tests, имеют свои * xctest файлы в отдельном комплекте XCTRunner.

Ответы

Ответ 1

Теперь это возможно с Xcode 8, используя параметр xcodebuild -only-testing с xcodebuild:

xcodebuild test -workspace <path>
                -scheme <name>
                -destination <specifier>
                -only-testing:TestBundle/TestSuite/TestCase

Проверьте это видео: https://developer.apple.com/videos/play/wwdc2016/409/

enter image description here

Ответ 2

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

введите описание изображения здесь

Вы также можете добавить схемы для запуска подмножеств тестов. При запуске тестов из командной строки вы можете указать схему, используемую для теста (по крайней мере, в fastlane).

Ответ 3

Я был в такой же ситуации, как и вы, и создал python script, который запускает набор тестовых примеров /s, которые я хочу. Это немного сложный процесс, но работает для меня и был очень полезен с течением времени при внедрении методов DataProvider, Rerunning неудачных тестовых примеров и других необходимых мне настроек.

Некоторые соответствующие шаги для достижения того, чего вы хотите достичь.

  • Переопределить метод testInvocations, присутствующий в XCTestCase, для выполнения ниже шагов
    • В этом методе я читаю переменную окружения XXXX.
    • Эта переменная среды - это, в основном, имена методов тестового примера, разделенные запятой.
    • Теперь создайте NSInvocations для каждого тестового метода, который вы хотите вызвать.
    • Возвращает массив Invocations.
  • Как передать переменную среды?
    • В схеме добавьте переменную среды с именем XXXX.
    • Файлы схемы являются стандартными файлами xml, пишите script, который модифицирует файл схемы, чтобы содержать значения, разделенные запятыми, в переменной среды.

Если вам нужна дополнительная информация, добавьте комментарий, я отвечу на него.

Ответ 4

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

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

Наведение по тестовому алмазу

Затем вы можете повторно выполнить самые последние тестовые тесты с помощью ⌃⌥⌘ G.

Насколько я знаю, это невозможно сделать с помощью xcodebuild.

Ответ 5

-only-testing:<MyXCTargetForTest>/<MyTestSuite>/<MyTestMethod>
  • MyXCTargetForTest - цель
  • MyTestSuite - имя_класса
  • MyTestMethod - test_name

Например, если Test Navigator выглядит

enter image description here

параметр будет иметь следующий тип

-only-testing:SampleAppTest/SampleAppTest/testExample

Также вы можете пропустить тест, используя: -skip-testing

Узнайте больше здесь