Этот курс создан для того, чтобы 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 с запуском тестов
 
Полезные материалы: