Skip to content

BorisLys/ios-automation-interview

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 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