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
AIの性能が向上しても未解決な組織の重大問題は何か?/An Unsolved Organizational Problem in the Age of AI
moriyuya
4
620
RAG を使わないという選択肢
tatsutaka
1
200
DevOps Agentで始めるAWS運用 〜フロンティアエージェントが変える運用の現場〜
nyankotaro
1
390
NAB Show 2026 動画技術関連レポート / NAB Show 2026 Report
cyberagentdevelopers
PRO
0
170
10倍の生産性を実現するAI駆動並列エージェントのすべて
kumaiu
5
1.4k
AIのReact習熟度を測る
uhyo
2
200
現地で盛り上がった WWDC26 Keynote
zozotech
PRO
1
210
Microsoft Build Keynoteふりかえり
tomokusaba
0
120
Snowflakeと仲良くなる第一歩
coco_se
4
430
AIっぽい文章を採点して人間らしく直すアプリを作ってみた
yama3133
2
130
ポケモンの型をTypeScriptの型システムで表現してみた
subroh0508
0
370
Building applications in the Gemini API family.
line_developers_tw
PRO
0
3.1k
Featured
See All Featured
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
Producing Creativity
orderedlist
PRO
348
40k
Designing for Performance
lara
611
70k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4k
The Pragmatic Product Professional
lauravandoore
37
7.3k
Exploring anti-patterns in Rails
aemeredith
3
400
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
170
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
730
The Mindset for Success: Future Career Progression
greggifford
PRO
0
360
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
850
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
Спасибо за внимание!