Автоматизированное тестирование iOS с помощью Xcode UI Framework

⚡ Умное резюме

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

  • 🔘 Цикл TDD: Проектирование, тестирование, реализация и повторное тестирование — это четыре этапа, применяемые к тестированию iOS-приложений.
  • ☑️ Необходимые условия: Компьютер Mac под управлением OS X с Xcode Установлены IDE, фреймворк для автоматизации и iOS SDK.
  • Маршрут по приборам: Инструмент автоматизации записывает сценарий, отображает его в журнале сценариев и воспроизводит по запросу.
  • 🧪 Маршрут OCUnit: Целевой объект пакета модульных тестов, активная схема, группа тестов и класс тестов, написанные на Objective-C.
  • ⚠️ Устаревание: Инструмент UIAutomation был признан устаревшим в Xcode 8 и удалены; XCUITest является поддерживаемым преемником.
  • 🇧🇷 Современный эквивалент: Целевой объект UI Testing Bundle плюс запросы XCUIApplication заменяют записанный скрипт Instruments.

Автоматизированное тестирование iOS с помощью Xcode Фреймворк автоматизации пользовательского интерфейса, запускающий записанный скрипт в приложении.

Автоматизированное тестирование iOS с использованием Xcode

Для обеспечения качества вашего iOS-приложения следует следовать процессу разработки через тестирование, показанному на рисунке ниже.

Цикл разработки через тестирование (TDD) для автоматизированного тестирования iOS, включающий этапы проектирования, тестирования, реализации и повторного тестирования.

Разработка через тестирование (TDD) — это тестов модель, применяемая к тестированию iOS-приложений, и она вписывается в более широкую практику мобильное тестированиеВ этой модели тестировщик должен пройти следующие 4 этапа:

  • дизайн: Определите, что именно вы хотите протестировать, и разработайте тестовые сценарии.
  • Контрольная работа: Запустите все тесты и проверьте, не возникнут ли какие-либо тестовые случаи.
  • Воплощать в жизнь: RevИспользуйте свой код и исправьте ошибки, которые привели к сбою теста.
  • Проверьте еще раз: Если тест не пройден, откатитесь к исходному варианту. Если все тестовые случаи пройдены успешно, значит, код соответствует всем проверенным требованиям.

Настройка Xcode Проект по тестированию пользовательского интерфейса

Для создания тестовой программы для iOS вам потребуется Mac. На вашем Mac должны быть уже установлены следующие программы:

  • OS X — операционная система для Mac.
  • Xcode IDE — Инструмент разработки для iOS.
  • Автоматизированная среда тестирования — Автоматизация пользовательского интерфейса, OCUnit и так далее.
  • iOS SDK 4 или выше.

⚠️ Примечание к версии: Указанные выше предварительные требования описывают набор инструментов той эпохи, в которой были написаны два следующих пошаговых руководства. На современных компьютерах Mac, Xcode В комплект поставки входят фреймворки XCTest и XCUITest, а отдельный инструмент автоматизации пользовательского интерфейса больше не входит в состав установки. Оригинальные шаги сохранены ниже, поскольку они документируют работу фреймворка, а современный эквивалент описан далее.

Как создать автоматизацию iOS с помощью UI Automation Framework

Описанные ниже восемь шагов позволяют записать скрипт с помощью инструмента автоматизации и воспроизвести его в тестируемом приложении.

Шаг 1) Запуск инструментов

Открыть XCode -> Открыть инструменты разработчика -> Инструменты

Вступительные инструменты из Xcode Открыть меню «Инструменты разработчика»

Шаг 2) Добавьте инструмент автоматизации

В окне «Инструменты» выберите инструмент «Автоматизация».

Выбор инструмента автоматизации в окне выбора шаблона инструментов.

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

Шаг 3) Нажмите красную кнопку.

Запускается прибор — немедленно остановите запись. Чтобы начать запись, нажмите красную кнопку.

Красная кнопка записи на панели инструментов «Инструменты» используется для запуска и остановки записи. trace

Шаг 4) Создайте новый скрипт.

В окне «Скрипты» нажмите «Добавить» > «Создать», чтобы создать новый скрипт.

В окне «Скрипты инструментов» в меню «Добавить» и «Создать» можно создать новый скрипт автоматизации.

Шаг 5) Выберите цель

Вы сейчас находитесь в Tracокно. Используйте кнопку «Выбрать». Target Потяните вниз, чтобы перейти к отладочной версии вашего приложения.

Выбирайте Target выпадающее меню в разделе «Инструменты» TracОкно, указывающее на отладочную сборку.

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

В качестве тестируемого приложения используется пример интерфейса приложения SimpleDrillDown.

Шаг 6) Начните записывать свой сценарий

Запишите свой сценарий, нажав кнопку записи в верхней или нижней части инструмента.

Кнопка записи в углу окна «Инструменты» запускает захват сценария.

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

Шаг 7) Посмотрите свой сценарий

Чтобы увидеть свой сценарий, нажмите кнопку TracВ выпадающем меню e Log / Editor Log переключитесь в режим просмотра журнала сценариев.

TracВыпадающее меню «Журнал e» и «Журнал редактора» используется для переключения в режим просмотра журнала скрипта.

Вы увидите записанный сценарий.

Записанный скрипт автоматизации пользовательского интерфейса отображается в журнале скриптов Instruments.

Шаг 8) Воспроизведите свой сценарий

Нажмите кнопку воспроизведения. Скрипт запустится, и вы сможете остановить его после появления логов.

Воспроизведение записанного скрипта автоматизации с выводом логов в окне «Инструменты».

⚠️ Историческая справка: Инструмент автоматизации, использованный на этих восьми этапах, был признан устаревшим в Xcode 8, а затем удалено, поэтому оно больше не присутствует в текущей версии. Xcode Установка. Пошаговые инструкции сохранены здесь в качестве записи о том, как работала эта система; для новых задач используйте пошаговое руководство по XCUITest, расположенное ниже на этой странице.

Как создать автоматизацию iOS с использованием платформы OCUnit

Второй вариант предполагает проведение тестов внутри Xcode проект, а не внутри Instruments.

Шаг 1) Начало Xcode IDE, Добавить цель "Пакет модульных тестов"

Добавление цели "Пакет модульных тестов" к существующему Xcode Проект

Шаг 2) Напишите название нового пакета модульных тестов. Как показано на рисунке выше, затем нажмите «Готово».

Шаг 3) Сделайте модульное тестирование активной целью.

Выбор пакета модульных тестов в качестве активной цели в Xcode

Шаг 4) Добавьте группу для тестовых классов.

Создание проектной группы для размещения классов модульных тестов iOS.

Шаг 5) Добавьте класс модульного теста.

Добавление нового файла класса модульного теста в группу тестов в Xcode

Шаг 6) Теперь приступайте к реализации.

Пустой класс модульного теста в Xcode Редактор готов к реализации теста.

OCUnit использует язык Objective-C для создания тестовых программ, поэтому разработчик должен знать этот язык. Современный Xcode версии кораблей модульное тестирование Вместо этого используйте XCTest, который поддерживает как Objective-C, так и... SwiftОднако структура «цель-класс», показанная на этих шести этапах, остается неизменной.

UIAutomation против XCUITest: что изменилось?

Поскольку обе упомянутые выше платформы относятся к более раннему поколению инструментария Apple, стоит уточнить, что их заменило и почему.

Аспект Автоматизация пользовательского интерфейса (инструменты) XCUITest
Статус Устарело в Xcode 8 и удален из более поздних релизов Поддерживаемая Apple платформа для тестирования пользовательского интерфейса
Где проводятся тесты Скрипты внутри Instruments tracэлектронный документ Цель пакета тестирования пользовательского интерфейса внутри Xcode Проект
Язык JavaСценарий Swift или Objective-C
Тестовый бегун Инструмент автоматизации XCTest — тот же инструмент, что и для модульных тестов.
Непрерывная интеграция Неловко — благодаря инструментам Запускается из командной строки вместе с модульными тестами.
запись Кнопка «Запись» на панели инструментов «Инструменты» кнопка записи в Xcode редактор, который излучает Swift

Практическим следствием является то, что набор тестов XCUITest представляет собой обычный исходный код проекта. Он проверяется, версионируется и выполняется так же, как и остальной код, что и является основной причиной записи тестов.tracМодель исчезла.

Как написать тест пользовательского интерфейса iOS с помощью XCUITest

Современный эквивалент восьми шагов Instruments — короткий. Приведенная ниже структура отражает ту же идею записи и последующего воспроизведения, но результатом является исходный файл, а не файл. trace.

  1. Добавьте цель. In Xcode Выберите Файл > Создать > Target и выберите шаблон "Пакет тестов пользовательского интерфейса" или отметьте опцию включения тестов при создании нового проекта.
  2. Откройте сгенерированный тестовый класс. Xcode Создает подкласс XCTestCase с пустыми методами настройки и тестирования.
  3. Запустите тестируемое приложение. Создайте экземпляр XCUIApplication и вызовите на нем метод launch, который запустит приложение в отдельном процессе.
  4. Запрос и действие. Обращайтесь к элементам через запросы к элементам — кнопкам, таблицам, статическим текстам — и вызывайте на них действия tap, typeText или swipe.
  5. Утверждать. Используйте XCTAssert, чтобы убедиться, что ожидаемый элемент существует после выполнения действия.
  6. Запустить. Выполните тест из Xcode с помощью навигатора тестов или из командной строки, чтобы тот же набор тестов запускался в режиме непрерывной интеграции.

Минимальный тест имеет следующую структуру:

import XCTest

final class AppUITests: XCTestCase {

    func testTappingFirstRowShowsDetail() {
        let app = XCUIApplication()
        app.launch()

        // act on the first row of the list
        app.tables.cells.element(boundBy: 0).tap()

        // verify that the next screen appeared
        XCTAssertTrue(app.staticTexts.firstMatch.waitForExistence(timeout: 5))
    }
}

Функция записи по-прежнему существует: размещение курсора внутри тестового метода и нажатие кнопки записи в редакторе автоматически генерирует эти запросы, что является прямым продолжением шага 6, описанного выше. Более широкие принципы автоматизация тестирования Применять без изменений.

Пример автоматизации пользовательского интерфейса Code

В этой статье приведены примеры исходного кода. Они помогут вам лучше и быстрее понять материал учебного пособия.

Пример автоматизации пользовательского интерфейса — тестовый скрипт для демонстрации автоматизации пользовательского интерфейса.

Часто задаваемые вопросы (FAQ)

№ Xcode а симуляторы iOS работают только на macOSТаким образом, Mac необходим либо локально, либо в качестве размещенной машины для сборки. Облачные фермы устройств и поставщики услуг непрерывной интеграции существуют именно для того, чтобы команды, не имеющие оборудования Mac, могли по-прежнему запускать этот набор программ.

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

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

Appium Он управляет iOS через свой драйвер XCUITest, который заменил более старый драйвер UIAutomation. Преимущество заключается в наличии единого кроссплатформенного языка тестирования для iOS и iOS. AndroidКомпромисс заключается в наличии дополнительного уровня различения между тестом и собственным инструментом запуска тестов от Apple.

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

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

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

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

Подведем итог этой публикации следующим образом: