Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Automation-Mobile-Testing/ios-automation-interview

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

30 Commits

Repository files navigation

Интервью на позицию AQA iOS

⚠️ Attention: В текущем документе нет вопросов по Swift, их вы можете легко найти на других ресурсах. Здесь вопросы и кейсы по XCUITest

Вопросы

Какие версии iOS поддерживают XCTest? XCTest поддерживает iOS 10 и выше и XCode версии 7.2 и выше
Какие типы тестов можно написать используя XCTest? XCTest позволяет написать: unit, ui и perfomance тесты
Как "под капотом" работает XCUITest? Когда мы добавляем ui-тесты в проект Xcode, они находят в отдельном таргете с препиской UITest. Это связано с тем, что ui-тесты компилируются и развертываются в отдельном приложении. Код ui-тестов, который мы пишем, выполняется в приложении для запуска тестов, а не в целевом приложении. Приложение для выполнения тестов действует как прокси, оно берет написанную тестовую логику и транслирует её в iOS Accessibility actions, которые выполняет с целевым приложением. Это делается для имитации использования приложения так же, как это делает человек. С точки зрения разработчика это означает, что мы не взаимодействуем напрямую с элементами UIKit в нашем приложении, такими как UILabel или UIButton, а скорее через прокси-элементы, называемые XCUIElement.
По каким признакам xcode автоматически добавляет автотесты в таргет?

Класс в котором находится тест должен наследоваться от XCTestCase

Тестовый метод должен быть: без параметров, без возвращаемого значения и с именем, начинающимся со слова test в нижнем регистре

В чем различие между accessibilityidentifier и accessibilitylabel

accessibilityidentifier - Это строка идентифицирующая ui-элемент, используется в ui-тестах

accessibilityLabel - Это краткое описание содержимого в элементе, например текст на кнопке, используется в Voice over

Как задать предусловие и постусловие для автотеста?

С помощью setUp() и tearDown() методов. Также мы можем задавать эти условия для всего сьюта тестов либо отдельно для каждого теста.

Какие бывают ожидания и как реализовать их в XCTest?

Ожидания бывают двух видов явные и неявные.

Неявные ожидания можно реализовать несколькими способами:

  • wait(for expectations: [XCTestExpectation], timeout seconds: TimeInterval);
  • waitForExistence(timeout:).

Явное ожидание можно реализовать - Thread.sleep(forTimeInterval: 1)

Какой класс отвечает за поиск элемента в приложении и по каким признакам можно искать элемент?

За поиск UI-элементов отвечает класс XCUIElementQuery. Элемент можно искать по:

  1. по индефикатору, самый надежный вариант поиска.
  2. по индексу типа элемента(например вторая кнопка на экране).
  3. по вложенности(children и descedants).
  4. по предикату.
Для чего нужны тест планы в XCTest? Тест план предоставляет возможность запускать наборы тестов с различными конфигурациями. Тест план — это JSON файл с расширением .xctestplan, которым можно управлять через пользовательский интерфейс или из исходного кода. Его удобно использовать, когда у вас есть несколько наборов тестов: Smoke, Rregression или группы тестов которые должны гонять на разных локализациях или с разной геолокацией
Как сбросить permissions при запуске тестов? Чтобы сбросить permissions, нужно вызвать метод resetAuthorizationStatus и передать в него значение из enum XCUIProtectedResource
Можно ли запустить сторонее приложение из теста? Например Safari

Да можно. Для этого нужно знать bundle id приложения и передать его в качестве аргумента в XCUIApplication.

Пример XCUIApplication(bundleIdentifier: "com.apple.mobilesafari").launch()

Какие ты знаешь нативные и не нативные фреймворки реализации автотестов? И какие у них плюсы/минусы Основная нативная библиотека для iOS - это XCTest, также можно воспользоваться фреймворками Earlgrey, Kif, Calabash.

Не нативный фреймворк - Appium.

Критерий XCTest Appium
Язык Swift/Objective-C Любой
Стабильность тестов Более стабильные Менее стабильные
Кросплатформенность Нет Да
Скорость Быстрее Медленее
Доступ к коду приложения Нужен Не нужен
Можно ли взаимодействовать с симулятором из командной строки? Да для взаимодействия есть утилита от apple - simctl
Как можно ускорить прогон автотестов?

Для ускорения тестов можно воспользоваться:

  • параллелизацией ui-тестов;
  • стартовать флоу с нужного экрана;
  • убрать дублирущие проверки в сценариях, если они есть;
  • перевести тесты на моки;
  • запускать тесты без сборки приложения, а на основании derived data
Нужно улучшить текущий отчет об автотестах, что можно туда добавить и как будешь это реализовывать?

В отчет можно добавить:

  • запись видео прогона теста;
  • логи сетевых запросов;
  • сделать более информативные вывод в ассертах;
  • разбить сценарий на шаги, используя XCTContext
Как работает snapshot тестирование,как его можно реализовать? Snapshot тесты - это тесты которые делают скриншот экрана (эталонный скриншот) и сравнивают с актуальным скриншотом, который делается во время прогона тестов.

Для реализации этого вида тестирование в iOS, есть две библиотеки: iOSSnapshotTestCase (previously FBSnapshotTestCase), SnapshotTesting.

При реализации нужно будет обрезать status bar дабы он не аффектил результаты прогона теста

Кейсы

Нужно реализовать свайп до нижнего элемента в таблице с скролом, как будешь это реализовывать?

При реализации метода учесть ограничение на кол-во свайпов и видимость элемента на экране

Дать кандидату плохо написанный автотест и спросить что можно исправить.

Примечание

Данный документ будет пополняться. Если у вас есть интересные вопросы/кейсы, которыми можно дополнить этот документ, закидывайте их в Pull request

About

Вопросы с ответами для подготовки к интервью на позицию AQA iOS

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

AltStyle によって変換されたページ (->オリジナル) /