Мы в Форе нередко автоматизируем тестирование на наших проектах. В статье делимся опытом: что такое автоматизированное тестирование, как понять, что оно необходимо. А еще делимся списком самых популярных инструментов для автотестирования.

За последние годы все больше компаний создают нативные версии веб-приложений. И с ростом скачиваний приложений, их создателям рано или поздно придется автоматизировать тестирование, чтобы ускорить процесс выпуска новых версий. Время — деньги, скорость — преимущество, которое помогает обогнать конкурентов.

Согласно данным отчета MarketsAndMarkets рынок автотестов к 2027 вырастет с $24.7 млрд.(2022) до $52.7 млрд. с совокупным среднегодовым приростом в 16,4%. Чтобы не отставать, нужно регулярно следить за новостями индустрии.

Что такое автоматизация тестирования iOS приложения?

Автоматизация тестирования — это имитация действий реального пользователя по заранее заданному сценарию. Например, ввод данных, нажатие кнопок, покупка подписки и другое. Оно выполняется автоматически с помощью специальных программ, без участия человека.

  • Параллельное тестирование на множестве устройств. Это значит, что за один релиз можно провести больше тестов. Например, автоматизированное регрессионное тестирование — тестирование, которое проверяет, чтобы новая функция или изменения в коде не влияли на работу всей системы. Больше тестов — больше выявленных и исправленных ошибок — лучше качество продукта — лучше пользовательский опыт.
  • Более быстрый процесс тестирования. Вы экономите время и деньги, получая продукт лучшего качества.
  • Минимизация фактора человеческой ошибки. Бывают баги, которые появляются нечасто и их сложно отловить. И даже если тестировщику удается найти баг, он не всегда может понять, с чем именно он связан. Автоматизированное тестирование может помочь более точно определить причину ошибки в такой ситуации.
  • Прозрачность тестирования. При смене тестировщика все старые скрипты остаются, и приложение будет тестироваться как и раньше. То есть, регресс-тесты остаются такими же. А если нужно что-то поменять, или новый тестировщик захочет посмотреть всю логику работы приложения, то в этом случае скрипты будут выполнять роль документации. Это один из главных плюсов.

Минусы:

  • При обновлении iOS нужно ждать, пока обновятся инструменты для автотестов.
  • Изначальная разработка автотестов занимает достаточно много времени. Но в долгосрочной перспективе оно того стоит.

Когда нужно автоматизировать тестирование

А нужно ли вам вообще автоматизировать тестирование? Да, если:

  • В вашем приложении много функциональностей. И при этом вы собираетесь их поддерживать долго и постоянно добавлять новый функционал или улучшать старый. Они могут конфликтовать друг с другом. Поэтому здесь нужны автотесты. Например, вы добавили чат и сломались звонки, или с новым полем в профиле сломалась регистрация. Чтобы это отследить, тестировщик вручную тестирует всё приложение заново. Это занимает много времени, и при этом он еще может что-то упустить. Автотесты позволяют решить эту проблему. Тестировщику больше не нужно тратить время на ручное тестирование всего приложения после добавления новой фичи. То, что в приложении не менялось - проверят автотесты, которые нужно просто запустить и проанализировать результаты. Это помогает уменьшить время тестирования, а вместе с этим и стоимость разработки.
  • Вы собираетесь адаптировать приложение под каждую новую версию iOS и использовать новые возможности операционной системы. Каждое обновление iOS может что-то сломать в приложении. Даже если вы не собирались в ближайшее время обновлять приложение, возможно придется это сделать. В этом случае, автотесты тоже могут помочь, достаточно лишь запустить тестирование. После этого вы поймёте, что сломалось в приложении, и это можно будет исправить. Конечно, только ради этого внедрять автоматизацию не стоит. Но если у вас уже есть автотесты, то в этом случае они будут очень полезны.
  • В вашей команде есть тестировщики, которые имеют определенные знания в этом направлении. Они должны как минимум знать какой-нибудь популярный язык программирования, если вы выберете, к примеру Appium. Или они должны знать Swift, если вы выберете XCTest / EarlGrey / KIF. Также тестировщикам необходимо знать все возможные способы тестирования и необходимые для них инструменты. Если ваши тестировщики умеют тестировать приложения только вручную и не знают языков программирования, то вам либо нужно потратить время и обучить их, или нанять новых, но более высокооплачиваемых тестировщиков.

Когда можно обойтись и без автоматизации тестирования

Написание автотестов — то же программирование, только вы пишете не новые функции своего приложения, а программу, проходящую по вашему продукту и проверяющую его. Это затратно.

Будет нецелесообразно добавлять автоматизацию тестирования, если:

  • Приложение маленькое. То есть функционал не очень обширный и его легко можно протестировать вручную. И при этом вы не планируете в дальнейшем постоянно добавлять новые функции.
  • Вы планируете распространять и поддерживать приложение в течение не очень продолжительного периода времени. Например приложение для Чемпионата мира по футболу-2018 или Зимней Олимпиады-2014.
  • Приложение очень быстро и часто меняется. То есть, функционал нестабильный. Например, стартап, который ищет своего клиента и переделывает свои основные фичи.

Лучшие инструменты для автоматизации тестирования в iOS

Ниже — список наиболее популярных инструментов для автотестов. Большинство из них open-source = бесплатные.

XCUITest/XCTest

Инструмент, разработанный Apple, полностью нативный. Предназначен только для тестирования iOS-приложений. Так как он нативный, в проекте будут отсутствовать лишние зависимости. Разрабатываются тесты с помощью Swift или Objective-C, это помогает разработчикам и тестировщикам более эффективно взаимодействовать. Но вместе с этим разработка на Swift и Objective-C не так проста. Может случится так, что тестировщики слишком часто будут нуждаться в помощи разработчиков, и это внесет в работу некий беспорядок.

Также есть test recorder, который позволяет записывать реальные действия в приложении и создавать из них тест, но на практике использовать test recorder сложно. Он не достаточно точный, и его лучше использовать как вспомогательный инструмент, а основные тесты лучше разрабатывать с помощью Swift или Objective-C. Также XCUITest/XCTest работает в отдельном потоке, состояние приложения не считывается, и задержки в обновлении данных могут привести к невозможности обнаружения запрашиваемых элементов.

EarlGray

Фреймворк, разработанный Google. Тесты нужно писать на Objective-C или Swift. Фреймворк синхронизирует запросы, UI и потоки, это его плюс. Но фреймворк не особо популярный. Это связано с тем, что с его помощью можно тестировать только iOS-приложения, и так как он не особо отличается от XCUITest, но при этом не является нативным, то тестировщики чаще выбирают XCUITest.

KIF

KIF – фреймворк, который нужно добавить в проект, чтобы пользоваться им. Язык для тестов – Objective-C или Swift. Его главным преимуществом считается реализм. KIF может моделировать различные взаимодействия с пользователем, поэтому он очень хорошо подходит для UI-тестов.

Выше были перечислены инструменты только для iOS-приложений, но, когда речь заходит о мобильной разработке, часто разрабатываются и iOS-, и Android-приложения. Поэтому существуют кроссплатформенные инструменты для автоматизации тестирования.

Detox

Язык для написания тестов – JavaScript. Detox умеет обращаться к памяти и отслеживать выполняемые процессы. Фреймворк работает как с эмуляторами, так и с реальными девайсами. Он задействует нативные методы прямо на устройстве. Под капотом работает рассмотренный нами EarlGray. Считается, что Detox очень хорошо подходит для тестирования приложений, написанных на React Native, так как в React Native используется JavaScript (как в Detox). Это позволяет писать одни и те же тесты для iOS и Android.

Appium

Appium — наиболее популярный сегодня инструмент. Он позволяет тестировать приложения практически вне зависимости от платформы, типа и версии системы. Писать тесты под каждую из платформ можно с помощью единого API, не прибегая к преобразованию приложения в какой-либо особый, совместимый с фреймворком вид.

Он не требует добавления в исходный код приложения, а работает как отдельный инструмент. Давайте рассмотрим его преимущества:

  • Большой выбор языков, с помощью которых можно писать тесты: Java, C#, Python, Ruby и так далее. То есть, он позволяет уйти от Swift и Objective-C. Это значит, что писать автотесты смогут все тестировщики компании, а не только работающие конкретно с iOS-приложениями.
  • Не нужно перекомпилировать приложение или изменять его для автоматизации тестирования. Это важно, потому что исходный код тестов и исходный код приложения не находятся в одном проекте и разрабатываются отдельно. Одно не зависит от другого, поэтому можно избежать многих проблем. К примеру, если тесты написаны неправильно и не будут компилироваться, это никак не повлияет на приложение в целом.
  • Кроссплатформенность. Тестировщики смогут разрабатывать тесты для iOS и Android в одной среде, на одном языке и даже очень часто переиспользовать код. Это поможет уменьшить время разработки тестов и, соответственно, уменьшить стоимость разработки.
  • Обширный функционал. Можно запускать и останавливать приложение, проверять видимость элементов на экране и использовать жесты. Также можно использовать как симулятор, так и реальные устройства.

Но у Appium есть и минусы. По сути, Appium — это надстройка над нативными драйверами iOS и Android. Тесты могут ломаться чаще из-за ошибок в коде самой надстройки, но нужно отметить, что Appium очень популярен и развивается быстро, поэтому многие проблемы могут решиться в будущем.

Заключение

Подведем итоги.

Вам точно стоит задуматься об автоматизации тестирования, если:

  • у вас сложное приложение со множеством функциональностей
  • вы не вносите масштабные изменения слишком часто
  • вы хотите сэкономить время и деньги на тестировании базовых функциональностей типа логина, бронирования и т.д.

Инструменты и методы:

В списке выше — самые популярные инструменты автоматизации тестирования на iOS. При выборе одного конретного, учитывайте особенности вашего приложения, проверьте, подходит ли тот или иной инструмент для тестирования Android-продуктов. И, конечно, не забывайте про предпочтения вашей команды! 🙂

Хотите автоматизировать процесс тестирования мобильного приложения и опередить конкурентов? Свяжитесь с нами! Мы ответим в ближайшее время, обсудим детали и вернемся с оценкой по стоимости и срокам.

  • Технологии