└── README.md
/README.md:
--------------------------------------------------------------------------------
1 | # Интервью на позицию AQA iOS
2 |
3 | > :warning: **Attention**: В текущем документе нет вопросов по Swift, их вы можете легко найти на других ресурсах. Здесь вопросы и кейсы по XCUITest
4 |
5 |
6 | ## Вопросы
7 |
8 |
9 | Какие версии iOS поддерживают XCTest?
10 | XCTest поддерживает iOS 10 и выше и XCode версии 7.2 и выше
11 |
12 |
13 |
14 | Какие типы тестов можно написать используя XCTest?
15 | XCTest позволяет написать: unit, ui и perfomance тесты
16 |
17 |
18 |
19 | Как "под капотом" работает XCUITest?
20 | Когда мы добавляем ui-тесты в проект Xcode, они находят в отдельном таргете с препиской UITest. Это связано с тем, что ui-тесты компилируются и развертываются в отдельном приложении. Код ui-тестов, который мы пишем, выполняется в приложении для запуска тестов, а не в целевом приложении. Приложение для выполнения тестов действует как прокси, оно берет написанную тестовую логику и транслирует её в iOS Accessibility actions, которые выполняет с целевым приложением. Это делается для имитации использования приложения так же, как это делает человек. С точки зрения разработчика это означает, что мы не взаимодействуем напрямую с элементами UIKit в нашем приложении, такими как UILabel или UIButton, а скорее через прокси-элементы, называемые XCUIElement.
21 |
22 |
23 |
24 | По каким признакам xcode автоматически добавляет автотесты в таргет?
25 |
26 | Класс в котором находится тест должен наследоваться от XCTestCase
27 |
28 | Тестовый метод должен быть: без параметров, без возвращаемого значения и с именем, начинающимся со слова test в нижнем регистре
29 |
30 |
31 |
32 | В чем различие между accessibilityidentifier и accessibilitylabel
33 |
34 | accessibilityidentifier - Это строка идентифицирующая ui-элемент, используется в ui-тестах
35 |
36 | accessibilityLabel - Это краткое описание содержимого в элементе, например текст на кнопке, используется в Voice over
37 |
38 |
39 |
40 |
41 | Как задать предусловие и постусловие для автотеста?
42 |
43 | С помощью `setUp()` и `tearDown()` методов. Также мы можем задавать эти условия для всего сьюта тестов либо отдельно для каждого теста.
44 |
45 |
46 |
47 | Какие бывают ожидания и как реализовать их в XCTest?
48 |
49 | Ожидания бывают двух видов явные и неявные.
50 |
51 | Неявные ожидания можно реализовать несколькими способами:
52 | - `wait(for expectations: [XCTestExpectation], timeout seconds: TimeInterval)`;
53 | - `waitForExistence(timeout:)`.
54 |
55 | Явное ожидание можно реализовать - `Thread.sleep(forTimeInterval: 1)`
56 |
57 |
58 |
59 | Какой класс отвечает за поиск элемента в приложении и по каким признакам можно искать элемент?
60 |
61 | За поиск UI-элементов отвечает класс XCUIElementQuery. Элемент можно искать по:
62 | 1. по индефикатору, самый надежный вариант поиска.
63 | 2. по индексу типа элемента(например вторая кнопка на экране).
64 | 3. по вложенности(children и descedants).
65 | 4. по предикату.
66 |
67 |
68 |
69 | Для чего нужны тест планы в XCTest?
70 | Тест план предоставляет возможность запускать наборы тестов с различными конфигурациями. Тест план — это JSON файл с расширением .xctestplan, которым можно управлять через пользовательский интерфейс или из исходного кода. Его удобно использовать, когда у вас есть несколько наборов тестов: Smoke, Rregression или группы тестов которые должны гонять на разных локализациях или с разной геолокацией
71 |
72 |
73 |
74 | Как сбросить permissions при запуске тестов?
75 | Чтобы сбросить permissions, нужно вызвать метод resetAuthorizationStatus и передать в него значение из enum XCUIProtectedResource
76 |
77 |
78 |
79 |
80 | Можно ли запустить сторонее приложение из теста? Например Safari
81 |
82 | Да можно. Для этого нужно знать bundle id приложения и передать его в качестве аргумента в XCUIApplication.
83 |
84 | Пример `XCUIApplication(bundleIdentifier: "com.apple.mobilesafari").launch()`
85 |
86 |
87 |
88 | Какие ты знаешь нативные и не нативные фреймворки реализации автотестов? И какие у них плюсы/минусы
89 | Основная нативная библиотека для iOS - это XCTest, также можно воспользоваться фреймворками Earlgrey, Kif, Calabash.
90 |
91 | Не нативный фреймворк - Appium.
92 |
93 | | Критерий | XCTest | Appium|
94 | | ----------- | ----------- |----------|
95 | | Язык | Swift/Objective-C | Любой |
96 | | Стабильность тестов | Более стабильные | Менее стабильные |
97 | | Кросплатформенность | Нет | Да |
98 | | Скорость | Быстрее | Медленее |
99 | | Доступ к коду приложения | Нужен | Не нужен |
100 |
101 |
102 |
103 |
104 | Можно ли взаимодействовать с симулятором из командной строки?
105 | Да для взаимодействия есть утилита от apple - simctl
106 |
107 |
108 |
109 | Как можно ускорить прогон автотестов?
110 |
111 | Для ускорения тестов можно воспользоваться:
112 | - параллелизацией ui-тестов;
113 | - стартовать флоу с нужного экрана;
114 | - убрать дублирущие проверки в сценариях, если они есть;
115 | - перевести тесты на моки;
116 | - запускать тесты без сборки приложения, а на основании derived data
117 |
118 |
119 |
120 | Нужно улучшить текущий отчет об автотестах, что можно туда добавить и как будешь это реализовывать?
121 |
122 | В отчет можно добавить:
123 | - запись видео прогона теста;
124 | - логи сетевых запросов;
125 | - сделать более информативные вывод в ассертах;
126 | - разбить сценарий на шаги, используя XCTContext
127 |
128 |
129 |
130 | Как работает snapshot тестирование,как его можно реализовать?
131 | Snapshot тесты - это тесты которые делают скриншот экрана (эталонный скриншот) и сравнивают с актуальным скриншотом, который делается во время прогона тестов.
132 |
133 | Для реализации этого вида тестирование в iOS, есть две библиотеки: iOSSnapshotTestCase (previously FBSnapshotTestCase), SnapshotTesting.
134 |
135 | При реализации нужно будет обрезать status bar дабы он не аффектил результаты прогона теста
136 |
137 |
138 | ## Кейсы
139 |
140 |
141 | Нужно реализовать свайп до нижнего элемента в таблице с скролом, как будешь это реализовывать?
142 |
143 | При реализации метода учесть ограничение на кол-во свайпов и видимость элемента на экране
144 |
145 |
146 |
147 |
148 | Дать кандидату плохо написанный автотест и спросить что можно исправить.
149 |
150 |
151 | ---
152 |
153 | ### Примечание
154 |
155 | Данный документ будет пополняться. Если у вас есть интересные вопросы/кейсы, которыми можно дополнить этот документ, закидывайте их в Pull request
156 |
--------------------------------------------------------------------------------