Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
UI-тесты для iOS. XCTest. Page Object. Local mo...
Search
Redmadrobot
November 22, 2019
Technology
2.6k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
UI-тесты для iOS. XCTest. Page Object. Local mock server
Redmadrobot
November 22, 2019
More Decks by Redmadrobot
See All by Redmadrobot
UI-автотесты: неочевидные очевидности в планировании и реализации
redmadrobot_msk
0
2.6k
No pain, no gain. Тестируем голосовые приложения
redmadrobot_msk
0
2.5k
«Модульность и оптимизация проекта»
redmadrobot_msk
0
1.8k
«Зачем нам OAuth и тем более 2.0: как настроить авторизацию сторонних сервисов в приложении»
redmadrobot_msk
0
1.8k
«Как спроектировать и задокументировать хорошую спецификацию API»
redmadrobot_msk
0
1.9k
Other Decks in Technology
See All in Technology
日本 Fintech 未来予測レポート 2027〜2028年(手動編集版)
8maki
0
2.1k
「エンジニア進化論」2028年の開発完全自動化、エンジニアはどう進化するか
cyberagentdevelopers
PRO
6
4.6k
Snowflakeと仲良くなる第一歩
coco_se
4
430
Claude Code の Sandbox 機能を Anthropic Sandbox Runtime(srt) で試そう!/lets-play-anthropic-sandbox-runtime
tomoki10
1
560
Microsoft Build Keynoteふりかえり
tomokusaba
0
120
非エンジニアがClaudeと挑んだ「1ヶ月間プロダクト30本ノック」
askokc
0
380
10倍の生産性を実現するAI駆動並列エージェントのすべて
kumaiu
5
1.4k
AIの性能が向上しても未解決な組織の重大問題は何か?/An Unsolved Organizational Problem in the Age of AI
moriyuya
4
620
脆弱性対応、どこで線を引くか
rymiyamoto
1
370
失敗を経て、Harness Engineering で 大切にしたいことを考える / Learning from Failure: What Matters in Harness Engineering
bitkey
PRO
1
320
2026.06.13_AI時代に事業会社が「SIer出身エンジニア」を求める理由 / Why Businesses Seek Engineers with a System Integrator Background in the AI Era
jumtech
0
1.1k
Bucharest Tech Week 2026 - Reinventing testing practices in the AI era
edeandrea
PRO
1
150
Featured
See All Featured
WCS-LA-2024
lcolladotor
0
630
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
140
Optimising Largest Contentful Paint
csswizardry
37
3.7k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
270
Claude Code のすすめ
schroneko
67
230k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
A designer walks into a library…
pauljervisheath
211
24k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
580
Unsuck your backbone
ammeep
672
58k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
250
The Curious Case for Waylosing
cassininazir
1
380
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.2k
Transcript
UI-тесты для iOS. XCTest. Page Object. Local mock server
2 Что такое XCTest? XCTest - фреймворк для написания тестов,
интегрированный в Xcode Unit ui perfomance
3 1. Не нужно устанавливать дополнительные компоненты. Достаточно установить Xcode
версии 7 или выше 2. Скорость 3. Test Recorder 4. Поддержка tvOS Почему XCTest?
XCTest API
5 XCUIApplication Класс, являющийся прокси между тестами и приложением
6 e.g. let app = XCUIApplication(bundleIdentifier:"com.apple.MobileAddressBook") ///Запустить приложение “Контакты” app.launch()
///Убить приложение “Контакты” app.terminate()
7 Tests Simulator Device App Я, у которого нет доступа
к коду приложения XCUIApplication(bundleIdentifier: "app.bundle.id")
8 XCUIElement Класс, который обеспечивает взаимодействие с UI-элементами на экране
приложения
9 1. Label 2. Accessibility identifier Как обратиться к элементу
из теста?
10
11 Текст /// Заголовок экрана app.staticTexts["title"]
12 Текстовое поле /// Поле логина app.textFields["email"]
13 Защищенное поле /// Поле пароля app.secureTextFields["password"]
14 Кнопка /// Кнопка "Войти" app.buttons["login"]
15 1. XCTAssert (XCTAssertTrue) / XCTAssertFalse 2. XCTAssertEqual / XCTAssertNotEqual
3. XCTAssertNil / XCTAssertNotNil Asserts
16 e.g. XCTAssert(loginButton.exists) /// true XCTAssertFalse(loginButton.isEnabled) /// true
Page Object
18 Что такое Page Object? Список элементов экрана и действий,
которые совершаются над этими элементами
19 e.g. class LoginScreen { /// Заголовок экрана var title:
XCUIElement { return app.staticTexts["title"] } /// Поле логина var loginField: XCUIElement { return app.textFields["email"] } /// Поле пароля var passwordField: XCUIElement { return app.secureTextFields["password"] } /// Кнопка "Войти" var loginButton: XCUIElement { return app.buttons["login"] } /// Кнопка Помощь var helpButton: XCUIElement { return app.buttons["ic16DpInfoPurple"] } func fillLogin(login: String) -> LoginScreen { loginField.tap() loginField.typeText(login) return self } func fillPassword(password: String) -> LoginScreen { passwordField.tap() passwordField.typeText(password) return self } }
20 UI-test case Test Base App Proxy for tests Common
test functions Screen Base Common screen elements Page Objects
Local mock server. Catbird
22 1. Надежность 2. Скорость 3. Независимость от бэка Почему
локальный мок?
23 1.Локальный мок 2.Статичный мок 3.Перезапись моков Catbird
24 APPLICATION Tests API Тесты без мока
25 Tests Application API Тесты с моком
26 https://github.com/RedMadRobot/catbird Пользуемся и ставим звездочки
Result
28 func testInvalidCredentials() { addMock(LoginMock.auth_401_invalid_credentials) step(“Попробовать авторизоваться") { loginScreen.login(login: “
[email protected]
",
password: “1234567890") assertion("Проверить, что отобразилась ошибка") { assertElementAppears(loginScreen .errorInvalidCredentials) } } } Test example
Спасибо за внимание!