Наконец, пришло время поговорить о тестах и инфраструктуре.
Поборов проблемы со временем старта, вы продолжаете работать над приложением, добавлять больше функциональности в проект, обновлять окаменелые куски кода и тд.
Со временем, вы замечаете, что последние переработки функциональности, как и некоторые добавленные фичи, возвращаются назад с ручной регрессии или выливаются в виде очередного инцидента в Crashlytics.
Тут нет ничего удивительного, ваша кодовая база становится все больше и запутанней с каждым днем. Что же делать? Как избавиться от косых взглядов QA и красных глаз менеджера, у которого стоит KPI на стабильность?
Ответов на эти вопросы может быть несколько, но сегодня мы обсудим автоматизацию тестирования. В частности, тестирования связки компонент при помощи UI тестов.
В наши дни существует несколько способов проводить такое тестирование. Многие слышали о стандартном XCTest, с возможностью записи действий в симуляторе, KIF, EarlGrey и прочих подобных фреймворках.
Сегодня мы рассмотрим автоматизацию тестирования на примере стандартных UI тестов в XCTest. По двум причинам:
Во-первых, это классических способ тестирования, рекомендованный Apple. Для того чтобы начать его использовать, не нужно устанавливать и подключать дополнительные зависимости в проект.
Во-вторых, это blackbox тестирование, что подразумевает отсутствие доступа к кодовой базе проекта. Это создает условия, максимально приближенные к реальному взаимодействию пользователя с вашим приложением.
Мы не будем вдаваться в реализацию самих UI тестов, скажу лишь то, что для адекватной работы с тестами, я бы рекомендовал написание своего собственного фреймворка, на основе паттерна PageObject, который бы описывал интерфейсы ваших экранов и отдельных компонент.
Паттерн PageObject зародился в вебе, вот здесь можно посмотреть что это такое: webdriver.io/docs/pageobjec…
И так, представим, что все согласны с тем, что существует проблема проверки качества проекта, менеджмент видит необходимость написания UI тестов для проверки интеграции и совместимости компонент в проекте. Вам даже выделили проект и дали финансирование на создание инфраструктуры.
Так давайте разберемся что из себя эта инфраструктура может представлять.
Рассмотрим следующие аспекты такой системы:
🖥 Железо
⚙️ Выполнение
🏋️♂️ Масштабирование
📊 Аналитика
Последним, но не по значению аспектом вашей инфраструктуры, является аналитика. Как понять что с выполнением тестов нет проблем? Как узнать время выполнения каждого теста? И на многие подобные вопросы, вам поможет ответить аналитика вашей системы.
Машины
twitter.com/mobileunderhoo…
Выполнение
twitter.com/mobileunderhoo…
Масштабирование:
twitter.com/mobileunderhoo…
Аналитика:
twitter.com/mobileunderhoo…