Этот курс создан для того, чтобы Manual QA поняли, как писать ui-тесты на iOS.
Есть мнение, что если человек что-то понял, он автоматически научился. Не достаточно пройти 1 курс, который хорошо всё объясняет, и ты сразу можешь делать всё то, о чём там говорится. Чтобы человек научился что-то делать, он должен тренироваться - то есть что-то делать. “Читать” или “Слушать” - это не “делать”.
Если хочешь научиться автоматизировать, нужно как можно чаще: писать и дебажить автотесты. Но просто делать тоже не достаточно. Нужно делать правильно, получая обратную связь. И будет круто, если у вас получится найти ментора, который поможет вам в этом
- Xcode версии ≥ 12
- Знание Swift на базовом уровне(SwiftBook / книжка Усова)
- Знание Git на базовом уровне(checkout, merge, rebase, revert, git workflow, branch)
- Пройти курс Raywenderlich: iOS and SwiftUI for Beginners
- Свой проект для покрытия автотестами
Цель: научить работать с github
- создать аккаунт на github;
- настроить ssh ключ;
- добавить проект в удаленный репозиторий, созданный в рамках прохождения курса “iOS and SwiftUI for Beginners”, либо добавьте свой проект;
- отвести ветку, в которой будете выполнять задания.
Полезная информация:
Цель: научить работать с локаторами: проставлять, находить и хранить их
- проставить accessibilityidentifier в:
- storyboard
- viewController
- content(SwiftUI)
- найти accessibilityidentifier в объектах при помощи:
- accessibility Inspector
- debug view hierarchy
- console(debugDescription)
- test recorder
- создать enum для хранения локаторов
Полезные материалы:
- Погружение в автотестирование на iOS. Часть 1. Как работать с accessibilityidentifier объектов
- Идентификаторы элементов в XCUITest
- How to find elements on XCUITest
- Easily manage accessibility attributes and accessing UI elements with XCTest on iOS
- XCUITests — Best Practices for Organizing Locators with Swift Enumerations
Цель: научить взаимодействовать с ui-элементами в автотестах
- создать методы нажатия на элементы, которые нажимают по:
- accessibilityidentifier
- индексу элемента
- координатам
- по определенному лейблу в элементе(использовать NSPredicate)
- создать метод закрытия алерта
- создать метод нажатия на кнопку “назад” в Navigation bar
- создать ассерты на:
- элемент выделен
- placeholder в textField равен текстовому значению
- элемент отображается на экране
Полезные материалы:
- Статья о том как взаимодействовать с ui-элементами iOS приложения в тестах
- Xcode UI Testing Cheat Sheet
- XCUITests — Set Date Time or Select value from Picker view
Цель: научиться работать с жизненным циклом приложения во время прогона тестов
- открыть при старте приложения Safari
- добавить launch argument и environment
- сбросить любой пирмишен перед стартом приложения
- использовать все методы жизненного цикла(setUp, tearDown и.т.д)
Полезные материалы:
- Погружение в автотестирование на iOS. Часть 3. Жизненный цикл iOS приложения во время прогона тестов
- XCUITests — Mobile Web Testing Using Safari
- XCUITests — Pass Launch Arguments to the Target Application
Цель: научиться использовать задержки
- написать явную задержку
- написать неявную задержку используя:
- XCTNSPredicateExpectation
- XCTWaiter
- XCTDarwinNotificationExpectation*
- XCTNSNotificationExpectation*
- XCTKVOExpectation*
Задачка со звездочкой: эти классы редко используются в задержках, но знакомство с ними может быть сильно полезным
Полезные материалы:
- Погружение в автотестирование на iOS. Часть 4. Ожидания в XCUITest
- XCUITests — Why & How to apply WAIT for element to fulfil Expectations?
- Waits in XCUITest
- Waiting in XCTest
- Clean waiting in XCUITest
Цель: Научиться работать с патернами POM(Page object model) и DRY(Don’t repeat yourself)
- создать папку для pages и tests
- создать базовые классы: CommonPage и CommonTest и вынести туда общую логику
- создать page для каждого экрана
- прописать в каждом page, объекты и методы взаимодействия с ними
Полезная информация:
- Implementation of Page-Object-Model (POM) to XCUITest (Native iOS Testing) with Swift
- UI Testing using Page Object pattern in Swift
- Page Object in XCTest UI Tests
- Introducing Page Object Pattern in iOS
- Writing DRY XCUITest Tests With Base Classes
Цель: написать ui-тесты и сгруппировать их
- покрыть ui-тестами каждый экран приложения не менее 2 тестов на экран.
- создать тест план для группировки тестов:
- из таргета с тестами
- пустой тест план и наполнить его тестами
- изменить конфигурацию тест плана
- переопределить launch arguments и launch environment для тестов
- измените геолокацию, регион и язык для тестов
- создать несколько настроек для тест плана(например: настройки для регрессионого прогона, для прогона на испанском языке и.т.д)
Полезные материалы:
- WWDC19: Приступим к работе с Test Plan для XCTest
- Get the Most Out of UI Tests With XCode Test Plans
- Hands On XCTest Test Plans
- XCUITests — Create Test Plan for Smoke, Regression suites
Цель: научиться работать с Snapshot testing
- выбрать библиотеку для Snapshot testing:
- реализовать метод:
- создание скриншота всего экрана
- создание скриншота отдельного элемента
- написать 1 снэпшот тест с полным скриншотом экрана и 1 с снэпшотом определенного элемента
Полезные материалы:
- Внедряем Snapshot testing в UI-тесты iOS
- iOS snapshot testing
- Snapshot Testing Tutorial for SwiftUI: Getting Started
- Automated Visual Testing With Snapshots(Part 1, 2)
- Snapshot Testing. Testing the UI and Beyond (Part 1,2,3)
- Snapshot XCUI Testing
Цель: научиться внедрять мок сервер в свой проект
- выбрать библиотеку для реализации мок сервера:
- пишем любой тест с использованием моков
Полезные материалы:
- UI тесты в Xcode с Embassy и Succulent
- Network Stubbing options for XCTest and XCUITest in Swift
- XCUITest (Swift) — Mock server setup for iOS automation with GraphQL
- Swift Localhost: Making XCUITest Great Again
- Mocking network calls while UI Testing
- Mocking API Calls in UI Tests
- XCUITest Stubbing Network Calls
Цель: научиться работать с ранерами и паралелить прохождение тестов
- распаралелить автотесты в xcode
- выбрать раннер по душе:
- написать скрипт для запуска тестов по:
- схеме
- тест плану
- без компиляции проекта на основе существующей derived data
- распаралелить автотесты используя CLI
Полезные материалы:
- Ускоряем прохождение iOS UI-тестов. Часть 1. Запуск тестов без сборки проекта
- Ускоряем прохождение iOS UI-тестов. Часть 2. Распараллеливание тестов
- Creating a scheduled XCUITest(iOS) regression pipeline using GitLab
Цель: научиться работать с CI запускать тесты удаленно на билд агенте
- выбираем ci на своё усмотрение:
- создаем билд агент
- на основании скриптов из прошлых уроков, создаем pipeline с запуском тестов
Полезные материалы: