Veeam Software: перспективы разработчика в автоматизации тестирования ПО

Для C# программистов, начинающих свой путь или уставших от рутины, в Veeam есть шикарные возможности в разработке автотестов.

Кратко и по делу

У нас многообразие платформ, инструментов и задач: погружаемся в решения VMware, публичные облака Azure, AWS и Google Cloud; взаимодействуем с продуктами Veeam через Web API, gRPC, SQL-запросы, PowerShell-ные командлеты и прочие интерфейсы; осваиваем новые технологии, подходы и смело их внедряем; допиливаем готовые решения (например, репортинговый портал); пишем внутренние сервисы и дашборды; создаем и поддерживаем всю цепочку запуска автотестов в CI/CD — от триггера по выходу билда и деплоя продукта до представления результатов автотестов в удобочитаемом виде. А еще у автоматизаторов в Veeam четкий и понятный карьерный путь.

Подробности

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

Для программиста идея о разработке автотестов в некотором смысле является разрывом шаблона: «Вот я разрабатывал продукт, а теперь буду тестировщиком, который пишет автотесты — какой же я теперь разработчик?» Иными словами, присутствует опасение потерять квалификацию, получить менее интересные задачи и откатиться назад в карьерном росте и зарплате. Есть хорошая новость: все с точностью до наоборот.

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

Задачи у автоматизатора интересные и зачастую сложные. В первую очередь стоит вспомнить про знаменитую пирамиду Фаулера. Модульные, интеграционные, UI-тесты подразумевают вдумчивый подход к структуре автотестов и выбору инструментов. Если говорить о продуктах, разрабатываемых в Veeam, то автоматизатору понадобится работать с REST, WebDriver, gRPC, MS SQL Server, PostgreSQL, Amazon Web Services, Microsoft Azure, VMware vCenter, Hyper-V — список не исчерпан. У каждой платформы свой API и свои скелеты в шкафу. Порой приходится писать код на различных языках программирования, использовать заглушки, семафоры, создавать свои обертки и т.п.

Одну и ту же задачу можно решить по-разному, и автоматизатор ищет наиболее эффективное решение. Например, вот сценарий, реализованный для продукта Veeam ONE. Один из компонентов продукта — Business View, который позволяет группировать элементы виртуальной инфраструктуры по различным критериям. Критериев и вариантов их комбинирования очень много, поэтому проверка этой функциональности вручную занимает много времени. Написание автотестов «в лоб» с имитацией действий ручных тестировщиков было бы неэффективным: тесты для графического интерфейса десктопных приложений, как правило, сложны и трудоемки в разработке, являются хрупкими, их тяжело модифицировать, и выполняются они долго. Мы нашли другое решение: поскольку действия пользователя в UI интерполируются в SQL-запросы к базе данных, мы используем SQL-запросы для создания категорий и групп. Это позволило нам в разумные сроки покрыть автотестами все свойства и операторы, задействованные в Business View.

Вот еще один пример с Veeam Disaster Recovery Orchestrator. В продукте есть четыре типа сценариев на случай форс-мажорных событий, и каждый из этих сценариев включает в себя энное количество этапов c большой вариативностью настроек. Решение «в лоб» — прокликать все параметры в UI. Но это долго, дорого, хрупко. Более эффективное решение — взаимодействовать с продуктом через Web API. Это позволило нам в кратчайшие сроки создать автотесты для всех сценариев, оперативно вносить изменения и снять ношу регрессионного тестирования с ручных тестировщиков.

Как сделать так, чтобы тесты, запускаемые параллельно ради уменьшения общего времени запуска, не мешали друг другу? Как измерить покрытие продукта в целом и отдельных пользовательских сценариев в частности? Как отслеживать падения сервисов? Как интегрировать автотесты с репортинговыми фреймворками? Как увязать автотесты со сборкой билдов в CI? Как прогонять тесты по pull requests? У нас много интересных и порой непростых задач.

Нужно обратить внимание на качество самих автотестов. Кто сторожит сторожей? Какому автотесту можно доверять? Автотест должен быть эффективным по критерию «количество затраченных на него усилий / полученный результат», автономным, стабильным (нехрупким), быстрым, надежным (никаких ложноположительных и ложноотрицательных тестов). В автотесте должен быть понятный, хороший код с точки зрения возможностей языка программирования, чтобы этот код можно было легко расширять и изменять.

Начинающий автоматизатор приступает к написанию простых тестов в соответствии с согласованными планами/подходами/инструментами. Решает самые простые задачи, учится справляться с трудностями, находить решения, обрастает знаниями и навыками. Задачи становятся все более серьезными, кредит доверия автоматизатору растет. Если автоматизатор не останавливается в своем росте, то спустя какое-то время он дорастает до разработки комплексных технических решений, глубокого участия в обсуждении стратегии и приоритетов в создании автотестов (технический путь развития до позиции архитектора). Либо выбирает управленческий вектор развития, строит команду и принимает под свое крыло начинающих автоматизаторов, которые хотят приносить пользу и расти.

Место встречи

В компании Veeam мы рады новым боевым товарищам с опытом программирования на C# (например, web-интерфейсы, десктопные приложения, консольные утилиты и т.п.). В Veeam есть много продуктов, и технологии в них могут различаться. В автотестах для нескольких продуктов мы пишем код на C# и PowerShell, опираемся на REST / Web API и WebDriver, запускаем тесты в TeamCity. Если у вас нет опыта с этими технологиями, но вы уверенно себя чувствуете в написании кода на C# и питаете интерес к автоматизации тестирования, то, возможно, мы также найдем точки соприкосновения. Название вакансии: C# Developer in QA.

Мы будем рады вашему резюме и паре абзацев в сопроводительном письме о том, что вас привлекает в автоматизации, о ваших сильных сторонах и профессиональных планах.

До встречи.