Quantcast
Channel: Найцікавіше на DOU
Viewing all articles
Browse latest Browse all 8115

DOU Проектор: Testein — сервис для автоматизации тестирования без написания кода

$
0
0

В рубрике DOU Проекторвсе желающие могут презентовать свой продукт (как стартап, так и ламповый pet-проект). Если вам есть о чем рассказать — приглашаем поучаствовать. Если нет — возможно, серия вдохновит на создание собственного made in Ukraine продукта. Вопросы и заявки на участие присылайте на editors@dou.ua.

Привет! Меня зовут Дмитрий Бондарчук, я уже около 5 лет работаю в различных проектах (от e-Commerce до Microsoft и Dell). Теперь пришла очередь и собственного проекта. Я основатель стартапа Testein. Наша команда старается облегчить создание, менеджмент и запуск автоматизационных тестов (automation tests) без написания кода.

В нашей команде пока только 2 человека: я, CEO проекта, и Виталий — CTO, который проработал несколько лет в качестве тимлида автоматизации и, насмотревшись всякого, отвечает за все автоматизационные фичи.

Наша команда

Идея

Думаю, многие здесь знакомы с понятием автоматизации тестирования и знают, зачем это нужно. Если нет, то в двух словах — автоматизация тестирования (automation testing) позволяет тестировать различные компоненты продукта, будь то UI, API или performance, с помощью специально написанного софта.

Для тестирования веб-продуктов, да и мобильных, и десктопных тоже, чаще всего используют Selenium фреймворки специальные так называемые драйверы — программы для управления браузерами — Chrome, Firefox, Safari и т. д. Существуют драйверы даже для iOS, Android и десктопных приложений.

Это все дает огромный плюс в плане переносимости кода: API одинаковое, между браузерами переключаться легко (если вы заставите их работать — поговорим об этом чуть позже), и получается одинаковая логика для других платформ.

Автоматизированное тестирование позволяет сделать тестирование продукта более легким, доступным и стабильным. Оно дополняет мануальное тестирование, встраивается в существующий CI/CD процесс и делает разработку, тестирование и релиз продукта более надежным.

Но есть некоторые нюансы:

  1. Чтобы создавать автоматизационные тесты, нужно писать код, а для этого нужны специальные люди, которые стоят дороже мануальных тестировщиков.
  2. Создание собственного фреймворка занимает пару месяцев, и запустить первый тест получится нескоро.
  3. Развертывание собственной инфраструктуры. Чтобы выполнение сьюта занимало как можно меньше времени, нужно иметь несколько машин для запуска. Желательно на разных платформах (Windows, Linux, Mac OS X) и с разными браузерами. Установка и поддержка такой инфраструктуры занимает много времени и сил. Конечно, есть различные сервисы, которые предоставляют облачную инфраструктуру, но стоят они немало.

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

Представляем вам Testein — облачный сервис для создания, запуска и управления автоматизационными тестами без особых усилий и написания кода.

Реализация

Наша система состоит из двух основных частей — бекенд + UI и агент. Агент представляет из себя программу, которую клиент ставит на свои машины. Он очень похож по смыслу на агенты, которые предоставляют Jenkins, TeamCity или VSTS. Агент забирает задачи с бекенда и запускает их на машине. Благодаря тому, что агент ставится на машину клиента, есть возможность создавать тесты, которые требуют доступ к внутренней сети. Например, если сайт находится в разработке и нет публичного доступа к нему извне.

Так как агент написан на Java, это позволяет нам поддерживать Windows, Mac OS X и Linux без проблем.

Список тестов в аппликейшене

Для бекенда был выбран .Net Core и AngularJs для фронтенд-части. .Net Core оказался очень приятным в использовании, и каких-либо проблем с ним не было замечено. Сервисы успешно крутятся на Linux-машинах в облаке Azure, что позволяет сэкономить приличную сумму на содержание инфраструктуры.

Разработка шла достаточно долго — около 6 месяцев. За это время было реализовано много интересных фич. Например, видеозапись исполнения теста, снятие скриншотов, объединение тестов в тест-сьюты и аппликейшены, репорты (как для отдельного теста, так и для сьюта или аппликейшена). А самая интересная, которую мы планировали на следующий релиз, но включили в нашу бету, — параллельный запуск нескольких тестов на одной машине. Это круто позволяет экономить время на общий запуск тестов.

К примеру, у нас есть сьют на 5 тестов, который в последовательном варианте занимает ~6 минут. А в параллельном режиме на 4 потока — всего 2:30. Это позволит отказаться от большой инфраструктуры, различных Selenium Grid и прочего. Все, что нужно, — одна машина и несколько потоков!

Создание теста

Итак, что же нужно, чтобы создать первый тест? Всего ничего — создать новый проект (например, Testein), аппликейшн (к примеру, Landing или Application) и создать тест с помощью отдельных блоков — тест-степов (например, открыть браузер, перейти по URL-адресу, нажать на ссылку и т. д). Для каждого степа нужно заполнить необходимые аргументы, будь то селектор или URL-адрес.

Можно также настроить дополнительные параметры. Такие как игнорировать ошибки во время данного степа, исполнять, если даже тест уже упал, или condition, которые позволяют запускать только в определённых случаях (к примеру, на скриншоте степ «Click on ’Sign Up’ link/button» запустится только на агентах на Mac OS X). В общем создание теста похоже на создание build definition в различных билд-серверах.

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

Поддержка автоматизационных тестов — достаточно сложная задача. Нужно редактировать различные селекторы и степы в разных местах. Для облегчения поддержки тестов в актуальном состоянии мы разработали такие фичи, как Elements и Snippets. Elements позволяют указать селектор нужного элемента лишь один раз, а дальше просто подставлять его, где нужно. При этом редактировать сам селектор с одного места. Предположим, у нас есть ссылка на страницу регистрации, и мы используем её в 10 тестах. Если разметка страницы изменится, нам нужно было бы пройтись по 10 тестах, чтобы исправить нужный селектор. Благодаря Elements можно выполнить это только 1 раз, и при следующем запуске теста будут корректные значения.

Аналогично работают и Snippets — готовые наборы степов, которые можно залинковать в свой тест. Предположим, все наши тесты требуют авторизации. Значит, в каждом тесте нужно будет каждый раз создавать степы для ввода логина/пароля, нажатия на кнопку и ожидания ответа. Благодаря Snippets блок авторизации можно создать всего раз и использовать его в различных тестах. Также есть возможность конвертации существующего теста в Snippet.

После запуска теста можно наблюдать лог выполнения и скриншоты в реальном времени. После завершения — получить детальный репорт (как на почту, так и скачать самому) и видео, а в случае неудачного выполнения — получить скриншот текущего состояния.

Тесты в аппликейшене можно объединять в сьюты для удобного совместного запуска, назначать как всему аппликейшену, так и отдельному сьюту триггеры для запуска, получать репорты и статистику.

Тест, сьют или аппликейшн можно запускать также с помощью развернутого API, который позволяет делать все то, что делает наш UI. Также мы работаем над расширениями для различных билд-серверов, чтобы можно было настраивать CI/CD процесс. К примеру, после деплоя вашего продукта будет возможность выполнить все тесты, которые покрывают данный аппликейшн.

Статистика по аппликейшену:
зеленый — successful тесты, желтый — canceled, красный — failed, серый — not run yet

На данный момент у нас готово расширение для Microsoft VSTS. Для остальных (Jenkins, TeamCity) расширения находятся в процессе разработки.

Фича, которой мы особо гордимся, — создание тестов с заданных шаблонов. К примеру, все интернет-магазины имеют плюс-минус похожий функционал: найти товар, добавить его в корзину и т. д. Соответственно, и тесты плюс-минус одинаковые. Для таких случаев и существуют шаблоны. Все, что нужно, — это подставить свои значения (селекторы в основном), и тест уже создается за считанные минуты!

Пример шаблона для добавления товара в корзину

Наша библиотека шаблонов пока небольшая, но постоянно расширяется. Каждый созданный тест — это шаг к новому шаблону :)

Кроме браузерных степов, есть и степы для работы с имейл (к примеру, нужно проверить, что приходит подтверждающее письмо после регистрации), командной строкой (cmd, PowerShell, Bash) и т. д. Также, если не хватает встроенных степов (их набор постоянно пополняется), есть возможность создавать собственные степы с помощью Java или JavaScript.

Недавно мы выкатили API тесты. Их уже можно создавать и использовать.

Пример создания API теста

Ну и прочие радости для команд — юзеры и юзер-группы, разграничение прав доступа к проектам и аппликейшенам.

Как мы зарабатываем?

У нас есть 4 вида ежемесячной подписки в зависимости от ваших нужд. Также для индивидуальных тестировщиков есть бесплатная подписка. Подписки отличаются количеством максимальных тестов, агентов, пользователей, а также максимальным количеством параллельных тестов на одном агенте и временем хранения логов.

SoloSmall teamTeamEnterprise
1 User3 User10 UserUnlimited User
15 Tests35 Tests80 TestsUnlimited Tests
1 Agent2 Agent5 AgentUnlimited Agent
1 parallel execution/agent2 parallel execution/agent4 parallel execution/agent8 parallel execution/agent
1 month retention policy1 month retention policy3 months retention policy6 months retention policy
FREE35$/mo80$/mo300$/mo

Каждый клиент при регистрации получает месяц бесплатногоиспользования независимо от выбранного плана.

Также в следующих релизах мы добавим аренду облачной инфраструктуры с дополнительной оплатой.

Проблемы, с которыми столкнулись

Конечно, при разработке любого продукта всегда сталкиваешься с разными проблемами. Мы — не исключение :)

Самая большая проблема — драйвера для браузеров. На удивление, самым адекватным оказался Chrome. Особых проблем не замечено, работает одинаково хорошо на всех платформах, поддерживает весь нужный функционал. Пробовали также и Edge, Safari, Firefox. Некоторые не запускались, некоторые работали нестабильно; не все поддерживают необходимые функции и т. д. Поэтому в бета-релизе только Chrome, но дальше будем добавлять и остальные.

Также сложным вопросом стала поддержка драйверов в актуальном состоянии. Браузеры и драйверы обновляются очень часто, и очень важно иметь соответствующую версию драйвера. Поэтому вариант с поставкой драйвера в комплекте с агентом отпал. Частые обновления агента (хоть он и делает это автоматически) + больший размер файла агента не будут радовать при скачивании. Вторым вариантом рассмотрели скачивание драйвера при каждом запуске теста, но и он не подошел. Скачивание драйвера добавляло примерно 30 секунд к каждому тесту, что тоже влияло на производительность. На данном этапе остановились на скачивании драйвера примерно раз в час. Это позволило сделать холодный и горячий запуск тестов (когда драйвер еще не скачался и когда он уже есть на клиенте). В результате сильно сократилось время теста при горячем запуске.

Большой проблемой оказалась производительность Azure SQL. Поначалу отправка логов на сервер занимала дикие пару секунд (!). Это очень ухудшало время выполнения тестов, если сравнивать с просто выводом в консоль. Мы провели оптимизацию всех возможных запросов к базе, это дало неплохой результат, но все же недостаточный. Поэтому решили поиграть с размером базы в Azure. И вуаля — время отправки логов уже 700 мс! Это намного лучше, но пока не идеал. Больше база — больше денег.

С ростом пользовательской базы можно увеличить размер инстанса, но пока цены, которые просит ажур оказались достаточно большими, чтобы влезть в нашу подписку в 150$ в месяц. Все дело в том, что Azure имеет разграничение по IO операциям. И для маленького инстанса базы — значение очень маленькое, и, соответственно, невысокая производительность. Об этом можно почитать здесь.

Также после апдейта проекта до .Net Core 2.0 у нас отпал билд-сервер. Это было связано с тем, что мы использовали самый маленький инстанс с Ubuntu на борту в Azure с всего 0.75 GB RAM. Этого оказалось недостаточно для нового билдера. Пришлось слегка проапдейтить инстанс :)

Конечно, было много и других проблем, например с кодировкой видео. Либа снимает в кодеке TSCC — TechSmith Screen Capture Codec, а для веба нужен MP4-формат. Поэтому мы немного намучились с кастомным билдом FFmpeg для нашего случая: для каждой платформы свой файл, только с нужными кодеками и функциями и минимальным размером файла. На удивление, самым сложным оказался Linux — когда вручную пришлось компилировать все зависимости.

Было еще много-много других проблем. Если кому-то будет интересно — спрашивайте, расскажем.

Результаты и планы на будущее

На данный момент у нас готова публичная бета-версия, где каждый желающий может зарегистрироваться. Конечно, так как это бета-версия, есть ограничения (например, доступен только Chrome), неполная документация и все остальное. Но продукт готов к применению и ждет своих пользователей :)

С помощью нашего сервиса автоматизационные тесты создаются намного быстрее, а их поддержка становится намного проще.

Вот пример, как быстро можно создать тест, чтобы протестировать добавления продукта в корзину на сайте Amazon (представьте, как много времени нужно, чтобы создать это с нуля):

В планах на будущее есть много интересных фич:

  1. Интеграция с баг-трекинговыми системами — постинг бага при падении теста.
  2. Интеграция с билд-серверами для полного CI/CD процесса.
  3. Предоставление собственной облачной инфраструктуры.
  4. Возможность создавать тесты для мобильных и десктопных приложений, нагрузочные тесты.
  5. Инструмент для выбора селектора, или как мы его называем «Пипетка». Этот инструмент позволит использовать наш сервис даже тем, кто не знает слова «селектор».
  6. Тестирование мобильных и десктопных приложений.

Мы будем рады любому фидбэку и приглашаем протестировать наш сервис, чтобы вы могли протестировать свой :)

Спасибо!


Viewing all articles
Browse latest Browse all 8115

Trending Articles