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
Bet AI Day 2026丨Production-Ready AI Agents — エンタープライズの実務を任せるための設計と運用
layerx
PRO
3
1.9k
現場に行くだけでは足りない——プロダクトエンジニアが業務の流れを捉える観点と、その鍛え方
takumiengineering
0
180
多摩川(.dev)ランニング入門 / Tamagawa.dev#3
fujiwara3
3
300
魔法少女がClaude Codeを監視する / ccportal-deck
noriyukitakei
3
120
[RSJ26] NarrativeFlow: Flow-Based Vision-Language-Action Model Using Robot Velocity Fields
keio_smilab
PRO
0
140
Point Cloud as a Foreign Language for Multi-modal Large Language Model
takmin
0
360
[RSJ26] AnoleVLA: Lightweight Vision-Language-Action Model with Deep State Space Models for Mobile Manipulation
keio_smilab
PRO
0
120
いま、生成AIにKaggleをどこまで 任せられるか — ROGIIコンペでの進め方とTips
k951286
2
1.3k
DGX Sparkを2台使って いろいろ動かす話
sonoda_mj
1
120
データエンジニアリングワークショップ:Auto LoaderとSparkで学ぶデータパイプライン構築
databricksjapan
PRO
0
120
Beyond the Hype: Practical AI for Your Oracle Database with MCP
thatjeffsmith
1
200
APIセキュリティを組織で実現するには~注力する点と設計・実装に入れたい対策~
riiimparm
3
910
Featured
See All Featured
Joys of Absence: A Defence of Solitary Play
codingconduct
1
460
[RailsConf 2023] Rails as a piece of cake
palkan
59
7k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Being A Developer After 40
akosma
91
590k
What does AI have to do with Human Rights?
axbom
PRO
1
2.3k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
260
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
570
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
510
The Curious Case for Waylosing
cassininazir
1
490
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
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
Спасибо за внимание!