Для будущих студентов курса Infrastructure as a code in Ansible и всех интересующихся подготовили перевод полезного материала.
Также приглашаем записаться на открытый урок по теме Управление Kubernetes при помощи Kubespray.
terraform fmt -check
и
terraform validate
.terraform plan
.TFLOG=debug terraform apply
для
дотошной проверки.terraform plan
.checkov
и платформе с очень
подходящим названием terraform-compliance
обе они
написаны на python. Они удовлетворяли всем моим описанным выше
требованиям.Checkov это инструмент статического анализа кода для инфраструктуры как кода.
Он сканирует облачную инфраструктуру, подготовленную с помощью Terraform, Cloudformation, Kubernetes, Serverless или шаблонов ARM, и выявляет неправильную конфигурацию с точки зрения безопасности и соблюдения нормативных требований.
terraform
.
Платформа может работать сразу после terraform init
.
Ей нет дела до вашего terraform plan
со всеми
преимуществами и недостатками. Платформа выполняет то, что
заявлено, а именно статический анализ кода. Помните о возможных
последствиях, а также любых соображениях относительно логики для
ваших ресурсов.terraform-compliance
.Terraform-compliance это облегченная платформа тестирования, предназначенная для проверки безопасности и соблюдения нормативных требований в terraform для обеспечения совместимости вашей инфраструктуры как кода с отрицательным тестированием.
terraform-compliance
с применением BDD. Он позволяет
выполнять достаточно сложное сквозное тестирование.terraform-compliance
использует вывод
terraform plan
. В результате это позволяет формировать
полные планы выпусков и тщательно тестировать их. Например,
контролировать использование правильной пары ключей шифрования [для
вашего поставщика облачных услуг] для учетной записи, среды и т.п.
У вас будет большая свобода для творчества, и самое важное работать
с платформой очень просто.terraform
конфигурации terraform,
которая создает EKS с указанной группой запуска. Давайте
удостоверимся, что в нашем коде инфраструктуры
terraform
не применяется instancetype
, а
используется одобренный вариант a1.xlarge
или
a1.2xlarge
.t2.small
, чтобы
имитировать непрохождение теста.terraform-compliance
оценить плат с использованием тестовых сценариев:
#terraform-compliance -p plan.out -f
./<test-cases-folder>
instancetype
, то все результаты будут зелеными
SUCCESS.instancetype
, то результаты
будут красными FAIL.@warning
, как показано в примере
ниже.e2e terraform plan
и вариантами
нестандартного тестирования, которые предлагает
terraform-compliance
.terraform-compliance
, имеющая более богатый набор
функций для валидации terraform plan
. Лучше всего то,
что, будучи платформой BDD, terraform-compliance
очень
проста в освоении.Узнать подробнее о курсе Infrastructure as a code in Ansible.
Записаться на открытый урок по теме Управление Kubernetes при помощи Kubespray.
Привет! Меня зовут Мария Лещинская, я QA-специалист в Surf. Наша компания разрабатывает мобильные приложения с 2011 года. В этом материале поговорим о тестировании устройств Android, на которых нет поддержки Google Services.
Huawei без Google-сервисов начали массово выпускаться в 2019 году. Мы в Surf, разумеется, задумались о будущем: как сильно пострадают наши процессы и что нужно незамедлительно осваивать.
Я поделюсь впечатлениями от работы с Android без Google-сервисов и расскажу, какие возможности имеют такие мобильные устройства при тестировании.
В начале статьи общая информация про AppGallery и AppGallery Connect. Если вы всё это уже знаете, переходите сразу к сути к особенностям тестирования Android-платформы c поддержкой Huawei без Google-сервисов.
Приложения под iOS- и Android-платформы можно встретить в официальных магазинах AppStore и Google Play. Туда мы идём в первую очередь, когда хотим установить новое мобильное приложение на телефон.
С 2018 года во всем мире (а в Китае ещё раньше) появился другой магазин мобильных приложений AppGallery, а с ним и AppGallery Connect.
AppGallery это менеджер пакетов и платформа распространения приложений, разработанная Huawei для операционной системы Android. AppGallery Connect универсальная платформа для поддержки всего жизненного цикла приложения: разработки, распространения, управления, тестирования и анализа.
За AppGallery последовал и выпуск устройств на базе Huawei: с 2019 года для нихв принципе отсутствует возможность работать с Google-сервисами, поэтому работа с Android стала сложнее. Нужно было оперативно включиться в работу и придумать, какизменить процессы тестирования платформы.
Казалось бы, зачем менять процессы и подстраиваться под ещё один магазин? Как много багов может добавиться к уже существующим? Стоит ли тратить время и деньги? У нас есть два аргумента.
Во-первых, при разработке приложения автор ориентируется не только на качество ПО, но и на качество продукта. Если продукт доступен бОльшей части потенциальных клиентов, это говорит об ответственном подходе к приложению. Нам кажется, что работать с AppGallery можно и нужно, ведь пользователь важное звено в разработке ПО.
Во-вторых, у AppGallery солидное количество пользователей. Магазин появился в 2018 году, к октябрю 2020 года приложение доступно в 170 странах мира, число уникальных пользователей 700 миллионов человек. Как говорит статистика, ежемесячная аудитория составляет 490 миллионов активных пользователей.
При этом для Huawei написали всего 96 000 приложений. Для сравнения в Play Store 2.9 миллиона приложений: это значит что более двух с половиной миллионов приложений отсутствуют в AppGallery.
В AppGallery нет, например, Instagram, Facebook и WhatsАpp. Их, конечно, можно скачать и установить вручную без ограничений: найти по отдельности в браузере или через какой-нибудь агрегатор. Также в сети появились сервисы, с помощью которых можно скачать самые популярные приложения. Но не каждый пользователь захочет выполнять дополнительные манипуляции.
Как только кAndroidс Google-сервисами прибавились Huawei с сервисами HMS, некоторые устройства стали автоматически поддерживать оба вида сервисов (например, как Huawei до 2020 года выпуска).
Ниже представлено сравнение трёх типов устройств Android: с Google-cервисами, без них и с поддержкой обоих.
Android без Google-сервисов |
Android только с Google-сервисами |
Android с поддержкой Google-сервисов и App Gallery |
|
.apk/.aab |
Установочный файл может быть один на все виды устройств Android, или их может быть два: отдельно с сервисами Huawei и отдельно с сервисами Google. Мы в Surf обычно делаем один .apk/.aab для обоих видов устройств Android. Логика работы приложений на разных устройствах определена внутри сборки. Но также могут быть два установочных файла одного приложения: один идёт в Google play, другой в AppGallery. На мой взгляд, удобнее использовать именно один установочный файл для тестирования и релиза в различные магазины. Проще и быстрее сделать одну сборку, чем две, но как только подключается CI, разница минимизируется. Использование двух сборок теоретически может уменьшить вес приложения особенно если в нем используются разные фреймворки для реализации фич на Android с Google Services и без. |
||
инструменты |
AppGallery Connect и сервисы, не использующие Google. |
Сервисы, использующие google, в том числе Firebase. |
AppGallery Connect, сервисы, не использующие Google, и сервисы, использующие Google в том числе Firebase. Какие инструменты выбрать,стоит продумать до начала разработки: проанализировать особенности проекта и устройств, потенциальную аудиторию, сервисы, необходимые для реализации фич. |
При работе с Huawei без Google-сервисов всегда нужно помнить про отсутствие возможности работы с Google-сервисами. Как бы тавтологично это не звучало, бывают моменты, когда уже готовые решения, которые можно использовать в разработке определённого проекта, опираются на сервисы Google. Какие-то сразу об этом сообщают тогда проблем нет.Какие-то используют их глубоко в фреймворке, и тогда приходится немного покопаться в реализации. Если такая библиотека случайно попадёт в приложение, используемое на Huawei без поддержки Google, могут возникнуть проблемы. Именно поэтому важно тестировать отдельно и на таких устройствах тоже. |
|||
баги |
Баги по общей логике приложения, конечно, будут распространяться на оба вида устройств. Существенные отличия могут появиться при работе сервисов типа Google Pay, push-уведомлений, deep links и dynamic links и так далее. |
Устройства разные, особенности взаимодействия и тестирования тем более. Казалось бы, все понятно: нужно знать, как с ними работать и никаких проблем. Но ещё очень важно понимать, из чего составить этот рабочий процесс: как выбрать инструменты, чему обучить команду и к каким проблемам подойти с правильной стороны.
Проблемы начинаются при использовании разных библиотек на двух видах устройств Android. Мы в Surf пользуемся различными сервисами для работы с push-уведомлениями, аналитикой, dynamic или deep links, performance-мониторингом. Поэтому когда стали брать на вооружение работу с Huawei без Google-сервисов, волновались, насколько сильно изменится работа QA: получится ли тестировать push-уведомления и dynamic links в привычном ритме или придётся адаптироваться к абсолютно новому процессу? К счастью, сам процесс меняется несильно. Но есть вещи, о которых необходимо знать, прежде чем браться за работу с устройствами без поддержки Google.
Huawei без Google-сервисов не имеет доступа к инструментам, которые работают с Google, например, Firebase. Сервисы для тестирования и работы мобильного приложения нужно настраивать через AppGallery (к счастью, AppGallery Connect имеет базовые возможности из коробки) или другие доступные инструменты. А возможно, придумывать и свои решения.
Ниже приведены базовые инструменты AppGallery Connect, позволяющие без особого труда наладить основные процессы по работе с пуш-уведомлениями, аналитикой, удалённой настройкой и прочими инструментами для удобства тестирования и поддержки.
При тестировании аналитики полезно просматривать события в реальном времени это помогает обеспечить качество реализации отправки событий в мобильном приложении. Проверять аналитику в AppGallery Connect в реальном времени можно, например, с помощью Отладки приложения (аналогично DebugView в Firebase).
Отладка приложения (App Debugging) позволяет смотреть события, приходящие от МП, и их параметры в реальном времени. Чтобы подключить устройство к Отладке приложения в AppGallery Connect, нужно подключить устройство к компьютеру и в терминале выполнить команду:
adb shell setprop debug.huawei.hms.analytics.app <package_name>
Чтобы отключить устройство от отладки, выполнить команду:
adb shell setprop debug.huawei.hms.analytics.app .none.
Чтобы быстрее найти <package_name>, можно воспользоваться командой adb:
adb shell pm list packages
Общий сбор аналитики в AppGallery Connect тоже доступен. Он называется Просмотр в реальном времени (аналогично Events в Firebase)
Просмотр в реальном времени (Real-Time Overview) собирает все события с МП в одном месте. Можно строить графики по выбранным критериям, активировать фильтры и в целом проводить анализ по мобильному приложению.
Удалённая настройка (Remote Configuration) позволяет управлять различными параметрами для приложения, и при необходимости обращаться к AppGallery Connect прямо из МП для работы с ними (аналогично RemoteConfig в Firebase).
При работе с push-уведомлениями Surf использует разные инструменты: Flocktory, Mindbox, Firebase и другие. Не все инструменты пока ещё могут работать с Android без поддержки Google, но базовая возможность подключить push-уведомления для Huawei есть: это их фирменная реализация через AppGallery Connect. Настройка пyшей происходит в PushKit.
Важно отметить, что пушер бэкэнда обязательно должен уметь взаимодействовать с AppGallery PushKit. Иначе push-уведомления придётся отправлять вручную из AppGallery Connect.
App Linking сервис для работы с dynamic links. На основании deep links App Linking предоставляет пользователям доступ к нужному контенту непосредственно на веб-страницах и в мобильных приложениях: это повышает конверсию пользователей (аналогично Dynamic Links в Firebase).
Dynamic Links vs Deep LinksDynamic links это интеллектуальные URL-адреса, которые позволяют отправлять существующих и потенциальных пользователей в любое место в приложении iOS или Android. Dynamic links легко переводят пользователей с любого URL на контент в приложении. Если пользователь не установил приложение на устройство, он увидит контент, когда установит его.
Deep Links это тип локальных ссылок: они направляют пользователей непосредственно в приложение и только. Соответственно, если приложение не установлено, работа с deep links невозможна.
Простыми словами, dynamic links ссылки, которые могут редиректить пользователя откуда угодно прямо в приложение или магазин, если оно не установлено (а после установки и в приложение). Deep links ссылки, которые привязаны к конкретному экрану внутри приложения и работают локально внутри МП.
На данный момент при работе с AppGallery Connect нет возможности создавать кастомные dynamic links: например, которые были бы одинаковыми и для обоих видов устройств Android (с поддержкой Google и без). Но c deep links всё в порядке.
Чтобы ловить незаметные с первого взгляда баги, стоит мониторить crash-аналитику даже на debug-версиях. Это необходимо, когда приложение потенциально разрабатывается на большую аудиторию и релиз близко не говоря уже о ситуации, когда МП уже доступно магазине и им пользуется много людей.
Нам было важно, чтобы такой инструмент был доступен и для Huawei без Google-сервисов. Crash плагин, позволяющий отслеживать и анализировать баги, краши и ошибки в приложении (аналогично Crashlytics в Firebase).
Чтобы обеспечить качество клиент-серверного взаимодействия, удобно использовать инструмент, который бы помогал анализировать ответы от сервера и отрисовку экранов и элементов в приложении. В AppGallery Connect такой инструмент APM. Это сервис, который помогает искать и устранять проблемы производительности приложения и улучшать таким образом пользовательский интерфейс (аналогично Performance в Firebase).
Конечно, это не все необходимые сервисы, которые можно встретить в мобильных приложениях, но они базовые. Всегда приятно понимать, что не приходишь на пустое поле: есть с чем работать и можно сделать приложение лучше и доступнее для всех пользователей.
В первое время при работе с устройствами Huawei без Google-сервисов мы тратили много времени на анализ и выстраивание процессов. Сейчас всё наладилось.
В целом можно выделить следующие проблемы и решения.
На проектах мы часто шарим сборки через Firebase, или напрямую скачиваем .apk из Jenkins, или собираем вручную из Android Studio. Проблем со скачиванием или ручной установкой .apk для Huawei без Google-сервисов нет. Проблем с App Tester приложением Firebase для шаринга сборок тоже нет. Использовать непосредственно приложение не получится, но пройти по invite из почты в браузер для скачивания сборки удастся.
Лайфхак: сохраняйте страницу из браузера на рабочий стол телефона и не знайте горя.
Конечно, для тестирования необходимы устройства и эмуляторы без Google-сервисов.
Если на проекте планируется адаптация под AppGallery, можно отправить заявку Huawei. Они пришлют девайсы для тестирования.Правда, финальное слово всегда за самим Huawei: отправка запроса ничего не гарантирует. Но опция приятная.
Неплохой вариант использовать эмуляторы. Конечно, они не восполнят полную работу с устройством, но могут помочь в отдельных случаях.
Можно работать с эмуляторами через ферму устройств App Gallery.
Можно установить HMS Toolkit в Android Studio и работать с Huawei без Google-сервисов прямо из IDE.
Стоит отметить важные моменты, которые впоследствии помогут избежать проблем или продумать пути их решения заранее.
1. Push-уведомления. На Huawei без Google-сервисов не будут работать push-уведомления, реализованные на backend через Firebase (а такое встречается сейчас часто). Такие устройства имеют свой hms-токен, и для работы с ними нужна специальная реализация.
2. Dynamic links. Инструмент AppGallery Connect не поддерживает кастомный формат dynamic links, поэтому нельзя настроить унифицированную ссылку на оба вида конфигураций устройств Android. Решение: использовать deep links или другой инструмент по работе с ссылками, работающий без Google Services.
3. Библиотеки с Google-сервисами. Различия в реализации и потенциальное скопление багов в логике будут, если в проекте используются библиотеки с Google-сервисами. Для Huawei их придётся заменить на другие фреймворки или if-ответвления. Тогда понадобится более тщательно тестировать оба вида устройств.
Google Pay. На Android без Google-сервисов можно столкнуться с окном Оплата недоступна, так как для нее нужен доступ к Google-сервисам, которые ваше устройство не поддерживает. Аналогичную ошибку можно встретить при запуске других приложений, не предназначенных для Huawei без Google.
Google-карты. Работа с Google-картами может содержать проблемы с кластеризацией, поиском, отрисовкой текущего местоположения и так далее.
Google-аккаунт. Авторизация через Google-аккаунт на Huawei без поддержки Google недоступна. Но реализация авторизации-регистрации через Huawei-аккаунт была бы кстати.
Магазины. Если мобильное приложение может отправить пользователя в магазин (для оценки, например), то необходимо проверить, что Android без Google Services отправляет в App Gallery, а Android с поддержкой Google в Google Play. Если устройство поддерживает обе конфигурации, было бы здорово, если бы пользователь мог выбрать между магазинами.
4. Сервисы с поддержкой Google. Для Huawei без Google придётся найти аналоги или разработать их самостоятельно. Хорошо, что важные базовые инструменты, как упоминалось выше, доступны в AppGallery Connect из коробки.
Например, на Android-устройствах можно открывать ссылки из приложения тремя разными способами:
WebView,
CustomTabs (разработка Google),
браузер.
Для Huawei без поддержки Google, по умолчанию доступны только два способа или дополнительная разработка вручную.
Базовые активности QA:
планирование,
ревью ТЗ и дизайна,
написание проверок,
прогоны по фиче, итоговые, регрессионные,
написание отчётности
Это пример активностей QA в среднем по больнице. Мы исключаем особенности компании и проектов и говорим немного в вакууме.
При работе с Huawei без Google-сервисов точно добавляется время к каждой из активностей:
Ревью ТЗ и дизайна, написание проверок. Будут дополнительные кейсы, отражающие особенности работы с такими устройствами. Можно смело увеличивать оценку временных затрат на это в 1,41,6 раза. Здесь время уйдёт либо на обработку дополнительных сценариев в ТЗ и дизайне, либо на анализ и подтверждение, что никакой особенной реализации для Android без Google-сервисов нет.
Прогоны. Во время прогонов (по фиче, итоговых, регрессионных) рекомендуется проводить тестирования как на Android с Google-сервисами, так и без. Особое внимание устройствам, где доступны оба вида сервисов. Здесь сокращение количества устройств может когда-нибудь неприятно выстрелить. Время может увеличиться в 1,82 раза и уйдёт на осуществление прогона на всех трёх видах устройств.
Обратная связь. Под обратной связью мы в Surf подразумеваем просмотр маленьких задач (которые не требует прогона по фиче например, Смену статичного текста) и исправленных багов. При работе с обратной связью, а также при анализе и просмотре импакта от багов и прочих задач, снова не стоит забывать про тот же список устройств (без и с Google-сервисами, а также с двумя видами сервисов) для тестирования. Время увеличивается примерно в 1,3 раза снова для того, чтобы осуществить ретест или проверку задачи на этих видах устройств.
Послерелизные активности. При релизе приложения в AppGallery необходимо продолжать мониторить работу МП как минимум по crash-сервису, чтобы поддерживать качество и исправлять ошибки вовремя. Если в проекте не используется один инструмент мониторинга обоих видов устройств, то времени на работу с двумя инструментами и анализом багов будет уходить больше. Пожалуй, тут лучше увеличить время в 2 раза.
Тестируемые устройства. И, конечно, на время может повлиять количество выбранных устройств для тестирования (автоматизированного или ручного). Подходить к выбору устройств стоит ответственно, проанализировав множественные факторы проекта и аудитории.
При тестировании на Android с Google Services хочется покрыть наибольшее количество устройств: разные операционные системы, оболочки, разрешения экранов, внутренние особенности и возможности. Устройств становится ещё больше, когда добавляются девайсы Huawei с HMS-сервисами.
Таким образом, необходимо покрыть бОльшее количество устройств: не забывая про Android с Google-сервисами, Android без их поддержки, и Android с поддержкой HMS-сервисов помимо Google.
На процесс и время могут повлиять особенности работы конкретной компании. Если у вас есть дополнительные задачи, активности, роли, рекомендуем провести предварительный анализ, чтобы не столкнуться с неожиданностями в бою.
Время общего тестирования фичи увеличится:
в 1,82 раза в случае разных инструментов для реализации фичи;
в 1,31,5 раза в случае одного инструмента для реализации фичи (в том числе при отсутствии отличий на первый взгляд);
в 1,41,6 раза в случае дополнительных требований и отличительной части реализации.
Мы оценили фичи по пунктам, о которых говорили выше ревью, написание проверок, прогоны по фиче, обратная связь.
Фича |
Поддержка Android только с сервисами Google |
Поддержка Android с Huawei и Google Services |
Авторизация по логину и паролю, а также через соц.сети |
X |
1,5X |
Push-уведомления (реализация через Firebase и AppGallery Connect) |
X |
1,8X |
Аналитика, около 15 событий (реализация через Firebase и AppGallery Connect) |
X |
2X |
Аналитика, около 15 событий (реализация через один сервис, например, Amplitude) |
X |
1,4X |
Значение Х время на тестирование Android с Google-сервисами. Оценка Y*X время на тестирование Android с двумя видами сервисов, где Y коэффициент увеличения времени на работу с Huawei с HMS-сервисами
Все временные оценки исходя из нашего опыта. Приводим их для примерного понимания.
Мы в Surf поддерживаем устройства Huawei без Google-сервисов на некоторых проектах и довольны процессами. Конечно, поработать головой иногда приходится чуть дольше: разработчикам чтобы найти универсальное решение. QA чтобы найти максимальное количество дефектов, широко покрыть фичи проверками и обеспечить качественное тестирование. И на мой взгляд, оно того стоит.
Нам нужно быть уверенными что при каждом пуше у нас не сломается вся инфраструктура, сможешь сделать? -Легко!
composer require overvoidjs/exotest:dev-master
<?php include_once 'vendor/autoload.php';
<?php include_once 'vendor/autoload.php';$i = new Exo;$url = 'http://localhost:7888/catalog/instrumentyi/';$i->is_ok($url, '<div class="product-card-name">');
php test.php
$payload = [ 'product_id'=>'3401', 'count'=>'1'];@$cart_id = $i->post_it('http://localhost:7888/api/cart/add',$payload);if(is_int($cart_id)){ echo "API Добавления в корзину ... Ok \n";} else { echo "API Добавления в корзину ... FAIL \n";}
echo "API Добавления в корзину ... \033[32m Ok\033[0m \n";
echo "API Добавления в корзину ... \033[01;31m FAIL\033[0m \n";
//Тут необходим CURL - но думаю он у всех есть$i = new Exo;$url = 'https://site.com/api/sameimg';$payload = [ 'data'=>'data'];$post_file_name = 'new_img';$post_file_path = './new_img.jpg';$test = $i->post_it_file($url,$payload,$post_file_name,$post_file_path);
input type="file" name="new_img"
Всем привет!
Автотесты под Android это непросто. Чтобы выстроить процесс автотестирования, надо запланировать и решить множество задач. Но самая большая беда заключается в том, что нигде нет полного описания, что вообще включает в себя автотестирование под Android, каковы его основные стадии. Отсутствует цельная картина. Этой статьей мы хотим восполнить пробел.
Она также выступит в роли схематичной дорожной карты работы Avokado Project. Мы верим в то, что в скором времени разворачивание автотестирования будет занимать куда меньше времени, чем сейчас. И активно работаем в этом направлении.
Есть мнение, что UI-тесты не нужны, если у вас достаточное количество юнит- и интеграционных тестов. Но от следующей метафоры никуда не деться. Представьте, что вы собираете велосипед. У вас есть два хорошо протестированных колеса, протестированная рама вместе с седлом, протестированная система педалей с цепью и рулем. То есть мы с вами имеем хороший набор интеграционных и юнит-тестов. А велосипед-то в итоге поедет? Чтобы это проверить, вы нанимаете ручных тестировщиков, которые перед каждым релизом должны убедиться, что безупречные детали корректно взаимодействуют друг с другом, и велосипед будет ездить и доставлять пользователю удовольствие.
Так же и с любым программным обеспечением для мобилок. К сожалению, в мобильном мире мы не можем откатить неудачные изменения быстро, ведь все обновления идут через Google Play Store и App Store, что сразу накладывает ограничения в виде долгой раскатки в сравнении с веб- и backend-аналогами, обязательной совместимости версий и зависимости от решения пользователя обновляться или нет. Поэтому нам критически важно всегда убеждаться перед релизом, что основные пользовательские сценарии приложения работают именно так, как ожидается.
При этом, когда релизный цикл у вас длиной в несколько месяцев, вполне достаточно работы ручных тестировщиков и некоторого покрытия кода юнит- и интеграционными тестами. Однако во времена, когда релизный цикл стремительно сокращается до одной-двух недель (а то и еще меньше), сил ручных тестировщиков зачастую уже не хватает, что вынуждает или жертвовать качеством проверки, или нанимать больше специалистов.
Все это естественным образом подводит к необходимости автоматизации проверки пользовательских сценариев, то есть написания end-to-end- или автотестов. У Авито есть рассказ о том, как автотесты помогают и сколько они стоят (2019 год). Однако большинство команд такой метод отпугивает своей сложностью и необходимостью вкладывать существенные ресурсы, чтобы выстроить процесс. Это возвращает нас к цели данной статьи и вообще к одной из целей Avokado Project стандартизировать процесс автотестирования в Android и существенно уменьшить его стоимость.
Итак, обещанная картина целиком.
Если вы чего-то не понимаете, не переживайте. Мы сейчас пройдемся подробно по всем пунктам.
На первом шаге давайте попробуем написать тесты у себя на машине и запустить их локально.
Стоит сразу определиться со стеком технологий, который мы будем использовать для написания тестов.
Первая развилка это выбор между кроссплатформенным решением (Appium и т. д.) и нативным решением (Espresso, UI Automator). Много копий сломано в этих спорах. Рекомендуем посмотреть выступление наших коллег, полное драматизма и накала страстей.
Спойлер мы за нативные решения. По нашему опыту, они:
Кроме того, Google поддерживает Espresso и UI Automator.
Больше почитать про сравнение вы можете в статьях:
На чистом Espresso и UIAutomator нынче редко кто пишет. Разработчики сделали различные удобные обертки, которые решают их проблемы. Сейчас у нас готовится статья об этих инструментах с классификацией и сравнением. Если кратко, то фреймворк, на который мы делаем ставку, это Kaspresso.
Kaspresso это фреймворк, который:
Вы можете прочитать о Kaspresso на GitHub и Habr.
Вы написали несколько тестов. Теперь их нужно запустить. За этот этап отвечает Test Runner, или просто раннер.
Что нам предлагает Google? Утилиту AndroidJUnitRunner и ее специальный режим Orchestrator. AndroidJUnitRunner делает то, что от него и требуется просто запускает тесты, позволяя еще и параллелить их выполнение. Orchestrator позволяет продолжить выполнение тестов, даже если некоторые из них упали, и дает возможность минимизировать общее состояние между тестами. Так достигается изоляция исполнения каждого теста.
Но со временем требований к раннеру становится все больше. Вот некоторые из них:
На рынке есть несколько сторонних раннеров. Среди всех них, самым перспективным мы считаем Marathon, который довольно быстро настраивается и удовлетворяет части обозначенных выше требований. Например, он поддерживает распараллеливание тестов и подготовку результатов прогона в формате, пригодном для отображения в Allure.
Однако, Marаthon, к сожалению, не обладает некоторыми важными, по нашему мнению, свойствами. В частности, в нем нет:
Кроме того, мы считаем, что раннер должен быть проприетарным, то есть либо для Android, либо для iOS. Это обусловлено уникальной спецификой каждой ОС и вытекающей отсюда сложностью внесения изменений в раннер.
Поэтому прямо сейчас мы работаем над Avito Runner, в котором хотим собрать все лучшие и зарекомендовавшие себя наработки и идеи. Ждите будущих анонсов!
Параллельно с вопросом о том, какой раннер выбрать для тестов, перед вами встает другой: а на чем лучше запускать тесты? Есть три опции:
Мы делаем ставку на Docker.
В сети есть разные Docker-образы Android-эмуляторов, мы рекомендуем
обратить внимание на следующие:
Как уже было упомянуто выше, подготовка образа требует некоторой сноровки. Плюс зачастую есть желание эмулятор преднастроить: выключить анимацию, залогиниться в аккаунт Google, выключить Google Play Protect и многое другое. Все эти вещи непросто организовать. Поэтому в скором времени мы хотим выкатить подробную документацию о том, как готовить и использовать образы быстро.
Вы написали сотни UI-тестов. Часть из них вы хотите запускать в рамках PR, а значит, весь тестовый набор должен проходить в максимально короткие сроки, например, до 20 минут. Вот тут наступает настоящее масштабирование.
Однако эта область темный лес для части Android-разработчиков и автоматизаторов. Оно и немудрено, ведь инфраструктура требует знаний железа, конфигурирования серверов, DevOps-практик и прочего. Поэтому обязательно наладьте контакты с людьми, которые во всем этом разбираются, у себя в компании или вовне, ведь они сильно помогут и уберегут вас от ошибок.
Итак, что вам примерно предстоит:
В ближайшее время мы планируем выпустить AvitoRunner и статьи, которые помогут настроить инфраструктуру.
Не забывайте про такие немаловажные моменты, как:
Про все это мы еще обязательно поговорим.
Мы постарались описать основные части становления автотестирования под Android. Надеемся, что теперь у вас в головах сложится тот самый пазл, который позволит видеть картину целиком.
Следите за анонсами на нашем сайте и в телеграм-канале.
Ведение документации для тестирования в Google-доках и
Google-таблицах не лучший способ работы с тестовой документацией.
Такой подход имеет свои недостатки.
В этой статье я расскажу, как мы перешли от хранения тестовой
документации с Google docs к специализированным SaaS-решениям,
сделаю сравнение трех разных инструментов (HipTest, Leantesting,
Test Management for Jira) и поделюсь результатами такого
перехода.
Меня зовут Татьяна и уже 2,5 года я работаю в компании Englishdom
на позиции qa engineer. Мы онлайн-школа английского языка, и наш
IT-отдел разрабатывает уникальную цифровую платформу учебник для
изучения английского, а также несколько приложений для тренировок и
домашних заданий. QA-команда тестирует эти продукты и для этого мы
ведем документацию.
Использование Google-доков и Google-таблиц имеет свои
преимущества:
Но у такого подхода есть и свои недостатки:
Когда я пришла на работу в проект Englishdom, в качестве
тестовой документации мы как раз использовали чек-листы в
Google-таблицах и в Confluence. Из-за недостатков, описанных выше,
одной из главных задач для улучшения процессов был переход с
чек-листов на тест-кейсы. А для этого требовался хороший инструмент
для их хранения и управления.
Итак, я получила задачу от QA-лида заняться ресерчем этой проблемы.
Для поиска хорошего инструмента я просмотрела множество статей,
презентаций и информации в различных интернет источниках и провела
сравнительный анализ существующих предложений. Также я опросила
многих QA-коллег, проанализировала их мнение и увидела
закономерность, что QA действительно не спешат внедрять такие вещи
в продукт прежде всего из-за того что:
В нашем случае первоначально стояла задача: найти бесплатный Test
Case Management Tool на минимальное количество пользователей, так
как на проекте было всего несколько тестировщиков и большое
количество юзеров для нас не имело значения, также количество
тестовых проверок на тот момент было не слишком большое. Ввиду
этого не было необходимости в платном и супер-крутом
инструменте.
Дальше настало время экспериментов. Первый инструмент, который
мы решили попробовать это HipTest https://hiptest.net/
Представлю краткий его обзор:
Преимущества:
Недостатки:
Пример тестового сценария в hiptest
Изначально интерфейс этого инструмента мне показался очень простым
и удобным, я вдохновилась преимуществами и мы начали переезд на
этот инструмент. Возникли некоторые проблемы с экспортом чек-листов
с google таблиц и confluence и пришлось вручную переписывать их в
HipTest. Дальше при презентации команде было принято общее решение
все-таки отказаться от этого тула в виду одной и самой большой
причины все-таки сильно неудобно, что в скриншот можно крепить
только один ко всему тесту, а не к каждому шагу. В итоге HipTest в
работе мы так и не использовали.
P.S. В моем рассказе HipTest представлен в том виде, который был на
момент нашего использования. На данный момент HipTest объединен с
Cucumber под одним брендом, запустив CucumberStudio и новый
улучшенный веб-сайт Cucumber.io. Однако теперь инструмент
платный.
Итак, поиски инструмента продолжились. Следующим был вариант
https://leantesting.com/
(по сути это бесплатный аналог Test Rail, однако есть возможность
приобрести расширенные возможности за дополнительную плату. Сейчас
мы рассмотрим особенности бесплатной версии.
Пример тестового сценария в LeanTesting
Преимущества:
Недостатки:
Изначально приняв решение о переходе на этот инструмент, мы
видели одно большое преимущество более удобный пользовательский
интерфейс, чем в HipTest, но спустя год активного использования
все-таки решили уйти от Lean Testing. Главной причиной для нас на
тот момент стало отсутствие интеграции с Jira (на проекте мы
активно ее используем для ведения всех задач и, конечно же, было бы
удобно хранить все в одном месте) и возможность прикреплять
скриншот только ко всему тест-кейсу, а не к каждому шагу. Также на
тот момент в бесплатной версии было ограничено количество
создаваемых кейсов.
То есть изначально при выборе инструмента, мы не задумывались о
таких вещах как интеграция с Jira, но впоследствии пришли к выводу,
что это было бы очень удобно и полезно для тестирования и
разработки. Мы не думали про то, что проект будет так стремительно
расти, а с ним и количество наших тестов. Изначально мы просто
хотели перенести документацию только для части функционала, а
остальную оставить в Confluence. Но со временем, пощупав удобство
пользования тест-кейсами в специальной системе их хранения, мы
решили переносить туда и другие тесты.
Спустя какое-то время поиска выбор пал на Test Management
(https://www.adaptavist.com/doco/display/KT/Test+Management+for+Jira+Server)
встраиваемый в Jira инструмент, простыми словами плагин.
Преимущества:
Недостатки:
Для нас главным и приоритетным преимуществом выбора инструмента
стала все-таки связь с Jira. Это значит, что во время прохождения
тест-сайкла на регрессии перед релизом вы заводите баг и
прикрепляете прямо к тест-кейсу, указываете на каком шаге фейлится
тест, разработчик заходит сразу в тест-кейс и видит нужную
информацию это же круто, экономия времени). Еще вариант
использования: продакт-менеджер создает задачу, qa прикрепляет
тест-кейсы к задаче, разработчик сразу видит тест кейс и шаги к
нему, которые ему необходимо пройти перед передачей функционала на
тестирование. И несмотря на то, что плагин платный, мы поняли, что
эти преимущества очень важны для нас и помогут улучшить процессы в
тестировании.
Визуализация тест сайклов
Визуализация создания тест-кейса (скрин1)
Визуализация создания тест-кейса (скрин2)
Методом проб и ошибок мы сменили инструмент, выбрав тот, который оказался самым удобным для нашего проекта, изменили подход к ведению тестовой документации, ее хранению и управлению, забыв про чек-листы в Google-таблицах и полностью перейдя на тест-кейсы в специальной системе Test Management. За все время использования еще ни разу не пожалели о выборе. Ведение тестовой документации прямо в Jira оказалось неимоверно удобным. Такой подход планируем использовать и в будущем.
Совет для тех, кто еще не решился уходите из Google-доков и
переходите на специальные инструменты для тестовой документации.
Какой решать вам, предложений по инструментам действительно много,
но точно найдется вариант под ваш проект и ваши цели. Я лишь
поделилась историей опыта нашего qa-отдела. Могу сказать, что это
сэкономило нам немало времени. Пара примеров: актуализация,
формирование тест-сайкла и распределение ответственных qa раньше
занимало приблизительно час, сейчас 40 мин. Также создание бага
раньше занимало до 15 мин, сейчас около 5 мин времени. Итого,
экономия времени составила до 30%.
Поэтому могу точно сказать, что переход на тест-кейсы с чек-листов
оказался для нас эффективным.
На днях я наконец-то получила свой долгожданный сертификат по работе с сервисом для генерации тестовых данных GenRocket. И теперь как сертифицированный специалист готова рассказать об этом сервисе.
НО изначально необходимо очертить проблему, которую можно решить при помощи этого сервиса.
Проблема генерации тестовых данных
Генерация тестовых данных в достаточном количестве для покрытия минимально возможных необходимых вариантов сценариев становится проблемой для многих проектов.
Почему "минимально возможных"? Потому что тут вспоминаются "Классы эквивалентности", которые сокращают количество тестовых данных от бесконечности до полезного набора.
Почему "необходимых"? А тут вспоминаются "Тестовое покрытие", которое говорит, что тестовые данные должны вести к покрытию максимально возможных сценариев.
Но, даже учитывая "Классы эквивалентности", генерация тестовых данных сейчас стала отдельной задачей для таких сфер, где работа идет непосредственно с данными, их обработкой и/или трансформацией. Вариаций таких данных огромное количество, а еще необходимо тестировать не только конечный результат, но и промежуточные значения.
Функциональность идеального сервиса генерации данных
Идеальный сервис по генерации тестовых данных должен иметь возможность:
генерировать данные в разных форматах (JSON, XML, CSV и т.д.)
генерировать данные с зависимостями (parent, child)
генерировать сложные зависиммые данные (if a then 1 or 2 else 3 or 5)
генерировать большие обьемы данный за небольшой промежуток времени
Хотелось бы иметь возможность:
загрузки данные в прямо в БД
интерграции в CI/CD
создавать модель данных автоматом из схем
GenRocket университет
Сервис GenRocket предоставяет тренинг-университет, пройдя который вы ознакомитесь с основным базовым функционалом, установкой и настройкой.
Изучить его я крайне рекомендую, первая половина - это чистая теория и немножно нудная, но вы узнаете все основные понятия, которыми оперирует сервис. Вторая же половина - это уже практические занятия с детализированным описание куда нажимать. Этот тернинг подойдет для любого уровня подготовки тестировщика, бизнес-аналитика или разработчика.
GenRocket сервис
GenRocket - это сервис для генерации данных, созданный в 2011 году Hycel Taylor и Garth Rose для решения проблемы создания реалистичных тестовых данных для любой модели данных. Сервис обладает функциональностью генерировать данные для автоматического тестирования, для тестирования нагрузки, тестирования безопасности и др.
Сервис состоит из двух частей: web часть и программная cli часть. В web части происходит создание сценария-инструкции для генерации данных, в программной cli части на самой машине происходит генерация данных.
Что бы начать работу с GenRocket пользователь должен быть авторизирован, затем что бы начать работу с GenRocket необходимо скачать архив для Runtime* для cli части, распаковать его и прописать в системных переменных путь к папке с GenRocket в переменную GEN_ROCKET_HOME и в переменно PATH прописать %GEN_ROCKET_HOME%\bin значение.
Затем открываем командную строку, набираем genrocket и видим картинку ниже.
GenRocket cli часть работает в двух режимах on-line и off-line, но для работы с off-line надо скачать сертификат, который будет валиден только 24 часа.
GenRocket домен и его атрибуты
Первые два из основных компонентов - это Домен и Атрибуты домена. Домен - это существительное, например, пользователь: адрес, кредитная карта и т.д. Каждый домен описывается атрибутами, например: имя, фамилия, e-mail, пароль и день рождения. На картинке ниже вы видите домент User (1), описанный атрибутами (2) и пример сгенерированных данных (3).
Атрибуты к домену могут добавляться вручную по одному (2), с помощью блокнота или импортируя DDL, CSV, JSON или другие форматы. Если мы говорим о табличных данных, то можно сказать, что домен - это таблица, а атрибуты - это клонки этой таблицы.
GenRocket генераторы
Следующий компонент - генератор (generator) - это функциональность, которая непосредственно отвечает за генерацию данных в различных форматах. Генераторов в GenRocket 150+ для различных типов данных. Например:
Каждому атрибуту домена GenRocket назначает свой генератор, опираясь на имя атрибута, автоматом. Например, для атрибута, который содержит слово Name, будет подобран генератор NameGen, а для атрибута с SSN будет подобран генератор SSNGen.
С свойствах генератора можно установить специфичные для проекта параметры: диапазон значений, формат, способ сортировки данных.
GenRocket получатель (receiver)
Следующий компонент - получатель (receiver) - это функциональность, которая отвечает за выгрузку данных в необходимом формате: XML, JSON, SQL, CSV, JDBC, REST, SOAP. В GenRocket 35+ подобных получателелей.
Так же получателем может быть база данных, для которой необходимо настроить JDBC соединение. Настройки для этого соединения настраивается в специальных properties файлах.
GenRocket сценарий (scenarios)
Следующий компонент - сценарий (scenarios) - это набор инструкций, которые определяют сколько и в каком порядке будут созданы данные. Сценарии бывают одиночные (2) и сценарии-цепочки (1), которые позволяют генерировать данные для несколько связанных доменов одновременно. За количество данных отвечает переменная loopCount в настройках домена. Причем у каждого домена значение этой переменной устаналивается отдельно, что позволяет генерировать разное количество данных для каждого домена в сценариях-цепочках.
Сценарий выгружается в виде grs файла (3) и должен быть исполнен на машине, где был установлен GenRocket. Открываем командную строку и выполняем сценарий при помощи команды genrocket -r UserInsertScenario.grs.
При выполнении сценария видим результат, в котором отображатеся время генерации данных. На изображении ниже 10 тыс записей были вставлены в таблицу за 26 сек:
Применение GenRocket на реальном проекте
Возьмем небольшую схему данных, в которой есть таблицы user, grantHistory и notificationSetting.
Используя импорт DDL создадим домен для user.
create table `user` ( id int(10) not null auto_increment, external_id varchar(50) not null unique, first_name varchar(25) not null, last_name varchar(25) not null, middle_initial char(1), username varchar(100) not null, ssn varchar(15) not null, password varchar(255) not null, activation_date date, primary key (id));
После создания доменов GenRocket подбирает подходящие генераторы для каждого атрибута. При необходимости настраиваем специфичные генераторы или модифицируем существующие. Например, изменяем generationType на random и сохраняем изменения.
Аналогичные действия проделываем для grant_history и notification_setting. Сгенерированные данные будут сохраняться в базу данных, для которой настроено JBDC соединение.
driver=org.h2.Driveruser=sapassword=saurl=jdbc:h2:file:~/lms_course/lms_alpha;AUTO_SERVER=TRUE;batchCount=1000
И так же для этой базы настраивается специфичные получатели H2InsertV2Receiver для вставки и SQLUpdateV2Receiver для модификации.
После всех манипуляций с настройками получаем файлы сценарии InsertScenarioChain.grs для вставки и UpdateScenarioChain.grs для модификации, после выполнения которых получаем картинку ниже.
И вуаля, данные в таблицах:
Заключение
Проведя иследование существующих на рынке предложений по сервисам генерации данных, могу сказать, что можно встретить два варианта сервисов:
бесплатный сервис, ограниченный в количестве генерируемых данных для несложных моделей данных
платный сервис с неограниченным количеством генерируемых данных и подходящие для сложных моделей данных, который может предоставляет ограниченный бесплатный функционал
Если у вас небольшой короткий проект с несложными данными, то данные для него можно получить при помощи бесплатных сервисов или при помощи самописного генератора. Но если проект долгосрочный с постоянно расширяющейся моделью данных, но идея покупки платного сервиса становится все привлекательней и привлекательней, но конечно решать вам.
Ниже расценка на доступ для GenRocket
Для сравнения я приготовила несколько ссылок бесплатных сервисов:
https://www.datprof.com/solutions/test-data-generation/ - только 14 дней бесплатного использования, похоже что цена договорная
http://generatedata.com/ - бесплатно, но возможна генерация только 100 записей
https://www.mockaroo.com/ - бесплатна возможна генерация только 1000 записей, остальное платно - для самого дорогого доступа $5000/year