Что делать, если вы маленькая команда из 2-3 человек, которая делает интересное решение в корпоративном секторе, но у вас проблемы со сроками, качеством продукта, а на ручное тестирование совсем нет времени?
Именно с такой проблемой столкнулись мои старые знакомые, которым я помог сэкономить на том, чтобы не нанимать отряд ручных тестировщиков, при этом повысив качество продукта и удовлетворенность клиентов.
В статье я постарался проанализировать проблему, описать решение, которое они пробовали, и рассказать о решении, которое им помогло.
Анализ проблемы команды разработки
Когда ко мне обратился один из членов этой команды, в первую очередь потребовалось выяснить "в чем вообще заключается проблема". Неужели они не закладывают время на написание и исполнение автотестов при планировании задач? Как оказалось - закладывают даже с избытком, и в целом эти тесты выглядят довольно адекватно.
Проблема была в том, что если на программном уровне все было "в порядке", то на уровне пользовательского интерфейса постоянно возникали несостыковки: то кнопочка отвязывается от события, то поля местами путаются, то целый блок появляется на несвойственной ему странице.
Возможно, это навыки разработки фронта так страдают у ребят, но это нельзя вылечить в один момент. Нанять еще одного, более опытного разработчика, чтобы "учил их уму разуму" - бюджет не позволяет, а уволить кого-то для высвобождения денег под нового спеца - для них непозволительно, этой команде много лет, как говориться "на свадьбах друг у друга гуляли и детей крестили вместе".
Значит выход один - нужно посвящать время ручному тестированию, но и тут проблема... В их решении довольно много экранных форм, кнопочек, полей, а количество сценариев около трех сотен. То есть, если они втроем сядут прокликивать все самостоятельно - это займет пару-тройку дней, что является непозволительной роскошью, особенно с учетом того, что релизный цикл у них "раз в неделю".
Как говорится: Не можешь выполнить сам - делегируй! То есть найми других людей, которые будут заниматься этим за тебя. Вот только и тут экономика не складывается: Чтобы успеть все оттестировать хотя бы за те же два-три дня, нужно нанять 3 человек для работы "на износ", плюс каждого обеспечить рабочей станцией, платить налоги, страховки, итд... Если взять зарплату "на руки" среднего тестировщика примерно в 60к, то в сумме на троих со всеми отчислениями получается что-то около 300к в месяц (3,6млн в год), и это не считая побочные расходы на работу рекрутера/кадровика, больничные, отпуска и так далее.
Почему до сих пор не автоматизировали ручное тестирование?
Следующий вопрос, который возник - "Почему вы не автоматизировали ручное тестирование хотя бы тем же Selenium?"... И тут я узнал, что ребята пробовали им пользоваться, но все равно это крайне неудобный инструмент для них: нужно постоянно копаться в структуре страниц, выискивать идентификаторы, селекторы (которые еще до кучи динамические)... В общем они сделали ровно три теста, плюнули и забили - слишком сложно и долго. Ниже самый простой код, который проверяет погоду через гугл:
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://google.ru")
time.sleep(5)
textfield = driver.find_element_by_xpath("//input[@name='q']")
textfield.send_keys("погода на завтра")
time.sleep(5)
submit_button = driver.find_element_by_xpath("//div[@jsname='VlcLAe']//input[@class='gNO89b']")
submit_button.click() # После нажатия на кнопку должны появиться результаты поиска
time.sleep(5)
driver.quit()
Вроде все читаемо и понятно, но другому разработчику, который взял тест за другим в поддержку, очень сложно понять что значит вот эта строчка:
"//div[@jsname='VlcLAe']//input[@class='gNO89b']"
И это еще половина беды - у них в решении есть свое Windows-приложение, конфигурация для 1С + мобильные приложения, а все это в принципе не поддерживается Selenium-ом...
По их словам они вроде нашли какое-то решение, которое называется pyWinAuto, но вот незадача: С ним тоже все не так просто, а еще оно с 2018 года не обновляется... да и версия "0.6.8" (то есть даже еще не первый релиз) - не внушает никакого доверия.
Как в итоге автоматизировали ручное тестирование?
Я уже несколько лет занимаюсь автоматизацией сторонних приложений под Web и Windows и знаю, что есть специализированные инструменты, которые позволяют сделать автоматизацию пользовательских интерфейсов в разы проще. Называются такие инструменты: RPA-платформы, или "роботы". Используя эти инструменты достаточно просто мышкой выбрать элемент, а все остальное будет настроено автоматически:
Сам подберется точный селектор, так же сформируется "неточный" селектор (который предполагает, что искомый элемент может измениться: поменять свою позицию, какие-то параметры). Настройка взаимодействия с пользовательскими интерфейсами производится в виде специальных блоков действий: Прочитать текст, Ввести текст, Выбрать из списка, Установить/Снять флажок, Проверить наличие элемента интерфейса, Нажать (на самом деле действий гораздо больше, но не будем на этом заострять внимание).
Чтобы было понятнее, вот простой пример настройки робота, который подключается к 1С, вводит поля, нажимает кнопку и получает результат из поля:
Что касается мобильных приложений - некоторые RPA решения имеют готовые инструменты и инструкции как можно автоматизировать взаимодействие с ними. Чаще всего это делается либо с помощью специальных прослоек/эмуляторов, либо с помощью технологий Computer Vision.
А где же само тестирование?
Логичный вопрос для всех, кто сталкивался с такими инструментами - а как же реализовать нормальное тестирование? Это все вручную нужно писать, всякие там условия, куда-то что-то записывать?
Ответ такой: В обычных RPA именно так - все это нужно делать своими руками на авось. Но в особо продвинутых платформах есть готовые решения по тестированию. Дальше мы рассмотрим именно то решение, которое я предложил команде разработки, и которое им очень понравилось: UiPath Test Suite.
Важно понимать, что само решение разбито на несколько составных частей:
UiPath Studio
Студия разработки (очень похожая на Microsoft Visual Studio), в которой можно разрабатывать сценарии для работы с любыми Windows и Web-приложениями, а так же составлять сценарии тестирования по разным фреймворкам. Например, по умолчанию студия предлагает составлять BDD-тесты, состоящие из блоков:
Given - Что дано (подготовка окружения, запуск нужных приложений)
When - Непосредственное выполнение тестируемого сценария
Then - Проверка результатов выполнения
При этом для проверки значений есть уже готовые действия, которые регистрируют результат выполнения в интерфейсе, похожем на интерфейс тестирования Microsoft Visual Studio. Особо приятно то, что после выполнения тестов вы можете увидеть реальное покрытие ваших сценариев. И если вы видите, что не все ветки вашего сценария были затронуты тестовыми данными - стоит задуматься и добавить больше вариантов для проверок. Ведь неоттестированная ветка сценария = потенциальный сбой в работе ваших систем.
Кроме того, есть возможность загрузить целые наборы данных и запустить Data-Driven тестирование, получив результаты выполнения по каждому варинату, после чего повторить тестирование по тем вариантам, которые дали сбои. Здесь важно отметить, что работа с наборами данных - встроенная фича, вам не нужно реализовывать их загрузку, перебор и фильтрацию самому.
UiPath Robot
Приложение, которое может быть запущено на отдельно стоящем компьютере/сервере и выполнить всё тестирование не требуя непосредственного участия разработчика (зачем тратить драгоценное время на ожидание выполнения тестов на своей машине, если это можно сделать на другой?)
UiPath Orchestrator
Серверное ядро всей RPA-платформы. Здесь можно управлять роботами, планировать запуск тестов по расписанию, запустить их вручную из интерфейса и по команде через API, а так же наблюдать за ходом выполнения и анализировать результаты тестирования.
UiPath Test Manager
Так как оркестратор изначально - инструмент для управления роботами, использовать его для регулярного мониторинга результатов выполнения тестов является немного неудобным решением. Поэтому есть специальная отдельная точка входа, которая дает удобный интерфейс, понятный любому человеку, который занимается тестированием.
Очень важные и приятные дополнения: UiPath Test Manager может быть интегрирован с разнообразными ALM (например, с Jira), что позволит прокидывать требования из бэклога Jira напрямую в Test Manager, привязывать их к конкретным тестам в UiPath Studio, а все найденные ошибки во время тестирования - отправлять обратно в Jira.
Что там с экономикой?
Посмотрев на такое серьезное решение становится понятным, что оно просто не может быть бесплатным, и это правда. Помимо самой студии для разработки и роботов для выполнения тестов, необходимо иметь серверные компоненты (UiPath Orchestrator и UiPath Test Manager), которые в свою очередь могут быть установлены как на ваших мощностях, так и в облаке UiPath. Интересно то, что стоимости вариантов приобретения (On-Prem и Cloud) примерно одинаковы, но приобретая облако вам не нужно заниматься выделением серверов, установкой, настройкой и обслуживанием серверных компонент.
В целом по затратам на приобретение облачного решения с возможностью использования на ваших компьютерах одной студии и одного робота (который может смело заменить трех ручных тестировщиков) - выходит сопоставимо со всеми затратами на одного тестировщика (учитывая прямые и косвенные). Конечно, нужно учесть, что придется вложить время в то, чтобы настроить тестовые сценарии и это делается не за пять секунд, но, как показывает практика, время настройки одного сценария в студии сопоставимо со временем, которое вы потратите на то, чтобы объяснить "что нужно делать" обычному стажеру.
А если учесть то, что ваш робот никогда не опоздает на работу, не уйдет на больничный, в отпуск, не потребует повышения зарплаты, не уйдет к конкурентам и с удовольствием поработает ночью и на выходных - получается, что выгода от применения роботов в тестировании неоспорима.
Но неужели соединять визуальные кубики удобнее, чем писать понятный код текстом?
Конечно, здесь можно задуматься и сказать, что в этом случае для экономии можно потратить больше времени и сделать такие тесты кодом на питоне с использованием соответствующих решений, но с другой стороны нужно задаться вопросом: "кто и как это будет поддерживать, когда разработчик таких тестов уйдет?".
Сколько людей - столько и мнений. Честно признаться, когда я сам только знакомился с миром RPA - был большим скептиком и громко смеялся над словом "роботизация". Но когда я начал серьезно использовать инструмент и увидел, что за один день я делаю столько работы, сколько раньше делал за несколько дней - понял, что это реально классный инструмент.
Кроме того, создавая подобные тесты своим программным кодом - вы не получаете автоматом возможность настраивать автозапуски на других компьютерах, не имеете централизованного хранения логов, лишаетесь статистики покрытия кода тестами, не видите статистику по выполнению за определенный период в едином удобном интерфейсе. Конечно, все это можно реализовать методом проб и ошибок перебирая готовые бесплатные решения за очень большое время. Но будет ли это реально дешевле, если потраченное время выразить в зарплате разработчиков, которые будут заниматься этим вместо разработки самого продукта?
Мое настроение по поводу преимущества использования готового решения от UiPath разделила команда, о которой шла речь в самом начале статьи - они меньше чем за неделю освоили инструмент, научились делать тесты и встроили их в CI/CD пайплайн Jenkins: после коммита в релизную ветку запускается проверка тестов роботами и в случае успешного прохождения всех тестов - релиз публикуется на сервере приложений. То есть они даже не запускают роботов руками и не смотрят результаты, если не произошло ни одного негативного результата. А если это случилось - быстро получают доступ к отчету и исправляют ошибки в кратчайшие сроки.
А вы уже пробовали перевести свое ручное тестирование на рельсы автоматизации с использованием роботов? Если пробовали - с помощью какого решения и какой результат вы получили?
Комментарии (19)
lair
19.02.2022 18:59+1Два простых вопроса:
- Как обеспечивается версионирование тестов и поддержание согласованности версии тестов и версии тестируемой системы?
- Как воспроизвести конкретный упавший тест на компьютере разработчика?
Drazd Автор
19.02.2022 19:08-6Версионирование тестов осуществляется штатными средствами платформы, перед тем как запускать тесты на роботах - их нужно опубликовать на сервере (в оркестраторе), при публикации создается пакет с новым номером версии.
Согласованность с версиями стороннего ПО можно организовать на уровне ALM вашего ПО, либо непосредственно в UIPath Test Manager, если вы осуществляете тестирование стороннего ПО (например, которое вам делают подрядчики или публичные облачные службы).Все наборы данных и тесты попадают на исполнение из вышеупомянутых пакетов. Соответственно, разработчик может взять нужную версию и прогнать упавшие варианты, которые в нем доступны. Посмотреть что именно упало он может предварительно на сервере.
Возможно, множество ваших прочих вопросов будет исключено, если вы ознакомитесь с документацией продукта, либо же воспользуетесь публичной community-версией.
lair
19.02.2022 19:11+2Версионирование тестов осуществляется штатными средствами платформы
Я не знаю, что такое "штатные средства платформы". Можете пояснить?
Согласованность с версиями стороннего ПО можно организовать на уровне ALM вашего ПО
Можете пояснить?
Соответственно, разработчик может взять нужную версию и прогнать упавшие варианты, которые в нем доступны
Прогнать локально? Что для этого нужно?
Возможно, множество ваших прочих вопросов будет исключено, если вы ознакомитесь с документацией продукта, либо же воспользуетесь публичной community-версией.
Мне не настолько интересно пока, чтобы тратить время на пробную версию. А что касается документации — я даже прайсинг не смог найти за пять минут, только Contact Sales.
Drazd Автор
19.02.2022 20:11-2Многоуважаемый lair, пожалуйста, зайдите на официальную документацию продукта и там вы найдете ответы на все ваши вопросы. Я считаю неправильным превращать хабр в ксерокопию публично доступной информации в формате вопрос-ответ.
Если же вам интересно посмотреть все это вживую и позадавать дополнительные вопросы - я могу организовать для вас официальную демонстрацию от вендора. Для этого вам будет необходимо прислать название вашей компании, вашу должность и адрес рабочей электронной почты мне в личные сообщения.
lair
20.02.2022 00:32+4Ну то есть вы написали откровенно рекламную статью — заметим, не в корпоративном блоге — и даже не готовы отвечать на вопросы по рекламируемому продукту?
Drazd Автор
20.02.2022 00:49-3С таким подходом как у вас, можно назвать рекламными все статьи, которые посвящены применению Microsoft Visual Studio, InelliJ IDEA и прочим средам разработки. UiPath - это тоже среда разработки, которую использует очень много компаний по всему миру. А дальше лишь вопрос как эту среду разработки применять, об одном из способов применения я рассказал в этой статье.
Может быть вы поищете десяток статей про тестирование на MS VS, IDEA, PyCharm и тоже напишете в комментариях, что те статьи являются рекламными, если вам не ответят на вопросы, ответы на которые вы можете найти в документации? Или "это другое"?
Возможно, вам в принципе противно любое упоминание RPA, и я вас прекрасно понимаю. Еще года три назад я сам плевался ядом на любое упоминание такого подхода. Так что позволю себе роскошь и не буду в дальнейшем отвечать на ваши комментарии, которые полностью противоречат Хабраэтикету из официальных правил сайта: https://habr.com/ru/docs/help/rules/
Но я буду всегда рад увидеть вас в будущем в рядах интересующихся перспективными технологиями.
vabka
20.02.2022 03:30+10С таким подходом как у вас, можно назвать рекламными все статьи, которые посвящены применению Microsoft Visual Studio, InelliJ IDEA и прочим средам разработки
Только разница в том, что Microsoft и Jetbrains в своих блогах нормально отвечают на все вопросы о продуктах без выкриков рода "Иди читай документацию и пробуй пробную версию сам"
Drazd Автор
20.02.2022 09:30-3Возможно, вы немного запутались. Это статья на моей персональной странице хабра про мою частную практику, не относится ни к какому корпоративному блогу. Точно так же, как есть много статей, написанных частными специалистами про многие другие технологии, которыми они пользуются.
vabka
20.02.2022 17:57+3Возможно, вы немного запутались. Это статья на моей персональной странице хабра про мою частную практику, не относится ни к какому корпоративному блогу.
Возможно. Из статьи и комментов возникло ощущение некой аффилированности. Опровержения или подтверждения этому в профиле я не увидел.
Хотя всё-же, если вы продвигаете какую-то технологию, отказываться от её защиты и пояснения каких-то нюансов в комментариях — это необычное поведение.
Всё равно что я бы пришёл к менеджеру и стал говорить "смотри какой офигенный язык программирования, давай его в проект затащим", а на встречный вопрос типа "ок, а какие риски" я бы отвечал "ну фиг знает, сам посчитай"lair
20.02.2022 19:09+3Из статьи и комментов возникло ощущение некой аффилированности.
https://www.linkedin.com/in/drazd
Valentin Drazdov
Sales Engineer at UiPath
roboter
19.02.2022 20:41то целый блок появляется на несвойственной ему странице
Тестируется ли такое? А то протестировать что есть легко, а вот как протестировать то чего быть не должно.
conopus
19.02.2022 21:26Visual Testing? Не особо напрягаясь можно здесь пощупать: https://applitools.com/visual-testing/
Drazd Автор
19.02.2022 23:29Конечно, заранее продумать всё невозможно, но бывают случаи, когда можно догадаться + если уже встретили один раз какое-то несвойственное появление, стоит его ожидать и впредь.
Например, бывает такое, что внезапно появляется блок авторизации у пользователей, которые уже авторизовались. Или же по аналогии - призыв к действию для тех, кто уже совершил действие.
Проверяется методом поиска такого элемента на странице (в вышеупомянутом UiPath это делается методом Check App State). Если он найден тогда, когда не должен выводится - считаем, что ошибка.
Faenor
20.02.2022 10:35+2Я как тест с time.sleep увидел - понял что ничего хорошего от поста ждать не приходится...
Серьезно в 2022 году автоматизировать веб с помощью робота мышки и записи сценариев аля selenium IDE ?
В чем плюс этого инструмента? В универсальности?
Нет смысла смешивать разные виды тестирования в одном инструменте..
Опять же - ладно выбрали новый крутой(нет) инструмент, но поддержка, решение проблем и коммьюнити?
В общем к посту больше вопросов, чем ответов.
Drazd Автор
20.02.2022 10:51В чем плюс этого инструмента? В универсальности?
Плюс в том, что вы можете автоматизировать ручное тестирование одинаково для Windows, Web и мобильных приложений. А еще важно то, что вы можете сделать тест бизнес-процесса, где участвует сразу несколько приложений.
Например, вы можете проверить, что после загрузки клиентом документа на сайт - сведения об этом появляются во внутренней CRM (например, в SAP). С помощью инструмента, про который рассказано в этой статье, данный тест можно написать за несколько минут, при этом не нужно быть ни разработчиком веб-решения, ни разработчиком/интегратором CRM. Если вы мне расскажете каким еще способом можно написать такой тест при условии, что автор теста не умеет программировать SAP - я буду вам очень признателен и с удовольствием ознакомлюсь с материалами.
Конечно, если у вас только web, который вы пишете сами - использовать указанный в статье инструмент может быть слегка Overkill. Но здесь статья скорее обращена к тем, кто:
1) Помимо Web делает Windows-приложения (вы будете удивлены, но таких еще очень много)
2) Не обладают компетенциями в selenium и подобных средствах
Нет смысла смешивать разные виды тестирования в одном инструменте..
Приношу свои извинения, если где-то в статье выразился некорректно. Автотесты на программном уровне должны быть написаны в той среде разработки, в которой вы создаете ваши приложения. В статье речь идет именно про ручное тестирование. Это может показаться странным, но я знаю немало компаний, где сидят целые отделы ручных тестировщиков, которые весь день занимаются тем, что просто кликают мышкой по очередным сборкам систем и заносят отчеты в Jira или аналогичное ПО. Можете считать, что целевой аудиторией этой статьи являются именно такие компании и команды. Если вас не затрагивает эта проблема - я искренне рад за вас и даже немножко завидую (без иронии и сарказма).
но поддержка, решение проблем и коммьюнити?
Как и у любого серьезного инструмента (а инструмент, названный в статье - серьезный), существует как общемировое комьюнити (форум), официальная поддержка, так и несколько российских комьюнити. И дабы не быть обвиненным в рекламе - на самом деле есть множество других RPA решений, в том числе отечественных, которые активно развиваются как в плане качества, так и в плане поддержки и комьюнити. Просто инструмент, про который я рассказал в статье - лично мне нравится больше всего и им я пользуюсь уже года два с большим удовольствием.
Mike-M
20.02.2022 15:25Как обстоят дела у UiPath с основным бичом автоматизации — надежностью тестов?
Каков примерный процент тестов, которые «упали» без весомой причины, или выдали false positive/negative result?
Судя по time.sleep для элементарных операций, надежность не на высоте…Drazd Автор
20.02.2022 15:36time.sleep - это из примера Selenium, к дальнейшему рассказу про UiPath никакого отношения он не имеет. Там есть свои методы ожидания реакции, не требующие настройки таймеров. Что касается Selenium - даже если вы знаете как обходиться без time.sleep там, вы большой молодец, что не отменяет проблемы с удобством восприятия кода, где идет указание на элементы, с которыми идет работа в стиле div>div>div>div
Надежность тестов полностью зависит от поддержки их актуальности. Если вы доработаете/переработаете функционал, который проверяет тест, и при этом не заложите в тесты новых ожидаемых результатов - естественно, тест будет выдавать ложные результаты.
В случае, если вы держите тесты в порядке, они всегда содержат корректный порядок действий, содержат согласованный набор входных данных с ожиданием согласованного результата - они никогда вас не подведут.
Естественно, под "никогда" я имею ввиду, что вы не будете умышленно пытаться вмешаться в тестирование роботом. Например, принудительно закрывать приложения, которые тестирует робот, отключать Интернет тогда, когда робот тестирует ресурс в Интернете. В этих случаях робот обязательно сообщит об ошибках во время выполнения тестов.
В прочем, если вы получите в отчете о тестировании результат "Ошибка, нет доступа к ресурсу" - это тоже тот случай, когда нужно обратить внимание на тестируемый ресурс. А если вы понимаете "ну да, пропадал Интернет" - просто перезапускаете тесты (можно сделать выборку по проваленным и запустить только их).
propell-ant
выходит сопоставимо со всеми затратами на одного тестировщика (учитывая прямые и косвенные)
Цена зависит от нагрузки (количества тестов, запускаемых в сутки) или пока не насоздают ощутимую кучу, будут платить за пустоту по цене одного тестировщика?
Drazd Автор
Не совсем понял о какой именно цене идет речь, но предполагаю, что о цене на лицензию решения с одним роботом. Стоимость лицензии никак не зависит от того, как вы ее используете, она дает вам право использовать робота как вы захотите 24х7, а дальше уже ваше дело: загружаете ли вы робота по полной или он выполняет одну задачку за 1 час в сутки.
В статье сравнивались затраты на 1 полностью загруженного тестировщика (8 часов в день) и 1 робота, который может работать 24 часа в сутки. То есть, если переложить восьмичасовую работу одного сотрудника на робота, даже не принимая во внимание тот факт, что он справится с делом быстрее - он будет способен дать вам еще 16 часов работы (отсюда в тексте есть упоминание, что 1 робот может заменить 3 тестировщиков).
В случае, если у вас тестированием занимается один недозагруженный сотрудник (условно посвящает этому 4 или меньше часов в день) - здесь, скорее всего, очевидной выгоды от применения роботов не будет (хотя надо посмотреть сколько он получает, если он получает у вас 150к+ в месяц, то по расчетам выгода есть).