Максим Зоткин
Специалист отдела контроля качества в IT-компании Intelsy
Меня зовут Максим, и я cпециалист отдела контроля качества в компании Intelsy. Поскольку наша компания специализируется на разработке сайтов, сервисов, приложений, ПО узкой направленности, то задач у отдела QA много, и для каждой из них подбирается свой набор инструментов. Об этом и расскажу.
Особенности автотестов, и чем они отличаются от обычного кода
Автотесты — это тесты, которые выполняет компьютер, а не человек. Внутри автотест — это тоже программа, цель которой — протестировать работу другой программы. По своей сути это скрипт, имитирующий поведение пользователя при эксплуатации программного продукта
Однозначным плюсом внедрения автотестов на проекте является сокращение времени на тестирование и сокращение возможности ошибки при тестировании человеком.
Из очевидных плюсов можно выделить главные:
скорость тестирования в разы выше по сравнению с ручной проверкой,
сокращение количества QA‑специалистов, необходимых для тестирования регрессов/релизов,
более точная проверка функционала, исключающая возможность ошибки,
исключение возможности «забыть» что‑то протестировать в регрессе,
возможность в нужное время запустить тестирование (в том числе и ночью),
информативный и понятный отчет о тестировании для всех отделов команды проекта.
В то же время у автотестов имеется и немало минусов, таких как:
время разработки самих автотестов,
необходимость поддержки уже написанных,
стоимость их разработки,
невозможность полностью покрыть все тестовые сценарии автотестами.
Для начала стоит определиться, какие тестовые сценарии стоит автоматизировать, а какие лучше оставить мануальным тестировщикам.
Автоматические тесты: когда стоит использовать, а когда - нет
Стоит автоматизировать, если:
имеются высокие риски, и сбои недопустимы — крайне актуально для банковской сферы,
тестовые сценарии регулярно повторяются,
тестовые сценарии очень сложны и утомительны для выполнения вручную,
тестовые примеры отнимают много времени.
Не стоит автоматизировать, если:
это новые тестовые примеры, которые не выполнялись вручную ни разу,
требования к сценариям тестирования часто меняются,
тестовые примеры выполняются на разовой основе,
длительность выполнения тестовых сценариев слишком большая (например, долгое ожидание ответа на api‑запрос (от 2-х минут и более)).
Выбор инструмента для автоматизации тестирования
На рынке доступно множество инструментов для функционального и регрессионного тестирования. Выбор инструмента для тестирования обычно обсуждается на начальных стадиях проекта, при составления тест-плана и выборе подхода к будущему тестированию.
Можно выделить несколько самых часто встречающихся на рынке инструментов.
Ranorex Studio
Ranorex Studio — это бесценный инструмент для автоматизации тестирования функций пользовательского интерфейса, регрессий, тестов, управляемых данными, и многого другого. Этот комплексный пакет имеет удобный интерфейс для автоматизации тестирования веб-, настольных и мобильных приложений.
Testim
Testim позволяет обеспечить отказоустойчивость сквозных тестов двумя способами: без кодирования и/или с кодированием. Вы можете создавать стабильные тесты без кода с помощью искусственного интеллекта или экспортировать их в виде кода. Такие компании, как Microsoft, NetApp, Wix и JFrog, используют Testim при проведении миллионов тестов ежемесячно.
21 Labs
Это сложная самообучающаяся платформа автоматизации тестирования и аналитики для приложений iOS и Android.
QTP (MicroFocus UFT)
Широко используется для функционального и регрессионного тестирования, касается всех основных программных приложений и сред. Чтобы упростить создание и обслуживание тестов, в нем используется концепция тестирования, управляемого ключевыми словами. Это позволяет тестировщику создавать тестовые примеры прямо из приложения.
Rational Functional Tester
Этот инструмент широко используется для функциональной и регрессионной оценки и подходит для всех основных программных пакетов и настроек. Для упрощения формирования и сопровождения тестов в нем применяется концепция тестирования по ключевым словам. Это позволяет тестировщику создавать тестовые случаи непосредственно из программы.
Watir
Это программное обеспечение с открытым исходным кодом для регрессионного тестирования, которое делает написание, чтение и поддержание тестов простым и понятным. В Windows он работает только с Internet Explorer, однако веб-драйвер Watir может работать с Chrome, Firefox, IE, Opera и т. д.
Selenium
Это инструмент, используемый для регрессионного тестирования, с открытым исходным кодом, который предоставляет возможность записи и воспроизведения.
Особенности:
обеспечивает возможность экспорта записанного скрипта на другие языки, такие как Java, Ruby, RSpec, Python, C# и т. д.,
можно использовать с такими фреймворками, как JUnit и TestNG,
может выполнять несколько тестов одновременно,
работает автозаполнение для общих команд Selenium,
выполняет пошаговые тесты,
идентифицирует элемент с помощью идентификатора, имени, X‑пути и т. д.
хранение тестов как Ruby Script, HTML и в любом другом формате,
предоставляет возможность утверждать заголовок для каждой страницы,
поддерживает файл selenium user‑extensions.js,
позволяет вставлять комментарии в середину скрипта для лучшего понимания и отладки.
Исходя из открытой статистики на большинстве ресурсов, Selenium используют около 70% опрошенных инженеров по автоматизированному QA.
Разберем Selenium подробнее
Selenium — это бесплатный пакет с открытым исходным кодом для организации тестирования с поддержкой основных языков программирования. Он используется в разных браузерах и операционных системах, включая мобильные платформы.
Преимущества
WebDriver: гибкий инструмент тестирования, удобно сочетающийся с различными тестовыми фреймворками и другими программами тестирования ПО.
Расширенный инструментарий тестирования.
Проект и приложения могут быть использованы для узкого спектра задач, таких как web crawling и тестирование производительности.
Широкое распространение. Появившись в 2004 году, Selenium получил широкое применение в крупных организациях, таких как Google.
Гибкость в использовании и выборе языка, платформы, браузера.
Selenium Webdriver построен на утвержденном веб‑стандарте W3C WebDriver.
Большая поддержка сообщества.
Selenium, будучи продуктом со стажем, уже успел решить многие проблемы. Каждые три месяца выходят минорные обновления, а разработчики активно предлагают свою помощь.
Поддержка параллельного запуска тестов (Selenium Grid).
Поддержка различных плагинов (Selenium IDE — один из самых популярных, используется для записи мануальных тестов с целью создания автоматических).
Поддержка мобильных устройств.
Недостатки
Они у проекта тоже имеются. Пример: Selenium не поддерживает функции тестирования сетевых и десктопных приложений по умолчанию. Можно «проверять» только веб-программы. А для того чтобы полноценно работать с Selenium, потребуется разобраться с навыками программирования и написания скриптов. Новичкам данный продукт не подойдет: он слишком сложный и требует углубленных знаний.
Почему Java выбрало большинство?
Язык программирования Java занимает большую часть рынка и предоставляет больше 30 тысяч рабочих мест для разработчиков. Поскольку Java является широко используемым языком в IТ-индустрии, существует огромное сообщество, поддерживающее его. Крупные компании, такие как Amazon, Ebay, PayPal и другие высоко ценят Java. Еще немного фактов в пользу Java.
Вот еще несколько преимуществ, которые дает Java:
Более 75% QA-инженеров Selenium используют Java.
Java — язык, работающий на виртуальной машине Java (JVM). Это означает, что он не зависит от платформы: независимо от того, какую операционную систему вы используете, ваш код будет работать при условии, что JVM установлена.
Java также является статически типизированным языком, а это значит, что интегрированная среда разработки (IDE) окажет вам большую помощь в поиске и исправлении ошибок в вашем коде. Это большое преимущество для начинающих тестировщиков.
Идеальное сочетание Java Unit с Selenium WebDriver может расширить возможности автоматического тестирования. Существует множество важных для тестирования фреймворков, разработанных с использованием Java, поэтому это один из наиболее подходящих тестовых скриптовых языков. Здесь нельзя не отметить Amazon Web Services (AWS). Java-приложения на AWS имеют следующие преимущества: библиотеки создают благоприятную среду для пользователей и разработчиков своей надежностью, Java хорошо сочетается с Eclipse, IntelliJ IDEA и т.д.
Java имеет уникальные характеристики, такие как многопоточность, независимость платформы, безопасность и ориентация объектов. Эти преимущества помогают запускать веб-приложения на основе Java на различных сервисах AWS. В общем, написание тестов или сценариев будет проще, если вы знаете Java.
В дальнейшем, с развитием в автоматизации, можно перейти с Java на другой язык программирования. Имея базу Java, сделать это будет гораздо проще.
Язык Java используется для поддержки массивных корпоративных систем. Около 3 миллиардов устройств по всему миру функционируют именно на работах данного языка. Процедуру автоматизированного тестирования можно выполнять на основе JUnit с Selenium Web Driver.
Естественно, язык имеет как положительные, так и негативные моменты. Из положительного можно отметить наличие PageFactory, который упрощает программный код для автоматизированных тестов. Java обладает внушительным сообществом, а значит, найти ответы на вопросы не представляет большой сложности. Из негативных моментов можно отметить только тот факт, что такой программный код читается немного сложнее, чем на Python.
Какие плюсы можно выделить у Python?
Этот язык кода отлично подходит для автоматизации тестирования ПО. Обладает открытым кодом, подходит для машинного обучения. Он может стать отличной отправной точкой для новичков в области автоматизации тестирования, поскольку является высокоуровневым и динамичным.
Преимущества
Является языком общего предназначения.
Наличие внушительной внутрисистемной библиотеки позволяет выполнять как сложные, так и простые задачи. PyUnit and Pytest является наиболее востребованным ПО для процесса автоматизации на Python.
Данный язык программирования по праву считается наиболее лаконичным, а значит, дает возможность добиться поставленной цели с минимальным количеством строк.
Содержит внушительное сообщество и открытый исходный код.
Язык программирования Python является базовым в большинстве университетов наравне с Pascal. Соответственно, даже человек, не являющийся разработчиком, скорее всего, уже с ним знаком в той или иной мере.
Немного о JavaScript и C#
Согласно исследованиям Stack Overflow Developer, именно JavaScript занял почетное первое место в категории «Наиболее популярная виртуальная технология». JS по праву считается наиболее качественным языком современного программирования под цели автоматизации тестирования ПО, который в большей степени используется front-end разработчиками.
Можно задаться вопросом, что же особенного в этом языке? Ответ прост: он использует методологию поэтапного тестирования (англ. shift-left testing), при которой программисты непосредственно участвуют в создании тестового кода.
Такая методика позволяет выстраивать тесное сотрудничество между отделами тестирования и разработки, что обеспечивает качественное автоматизированное тестирование текущих проектов.
Дополнительно стоит отметить массу полезных фреймворков, которые поддерживает язык JS и которые помогают создавать практичные юнит-тесты под любые цели:
Jest,
Mocha,
Jasmine,
Nightwatch.js.
C# — ещё один подходящий язык для начала карьеры в автотестировании. Начиная с 2016 года благодаря платформе .NET Core, основанной на концепции “create once, run anywhere”, С# является кроссплатформенным языком программирования, что позволяет применять его для ОС Windows, Linux, MacOS, Android, iOS и других систем.
Используя C# как основной язык программирования, можно с легкостью написать автоматизированные тесты для любого приложения, для UI отлично подойдет Selenium WebDriver и Playwright, для API — RestSharp, а для мобильной автоматизации — Appium.
Если нужно создать тестовые сценарии на понятном для бизнеса языке C#, можно использовать Gherkin-синтаксис и SpecFlow как основную библиотеку для автоматизации тестовых сценариев, таким образом следуя поведенческому подходу в тестировании приложений.
Так какой же выбрать язык для разработки автотестов на своём проекте?
Однозначно правильным выбором станет Java. И вот почему:
количество созданных под Java фреймворков на порядок больше, чем у других;
большое количество новых разработок для данного языка;
простота написания и чтения автотестов;
строгая типизация языка не позволяет написать код неправильно и непонятно для других разработчиков;
для компании намного проще будет найти специалиста, причем любого грейда (специалистов на Java буквально больше остальных);
возможность выбирать из большого количества специалистов на рынке того самого, который будет подходить компании, а не выбирать первого попавшегося от безысходности;
переучить специалиста с Python/JS/C# на Java не займет много времени, язык прост в понимании;
большая база знаний по практически любой ситуации и проблеме, с которой может столкнуться разработчик при написании автотестов, есть как на официальном сайте, так и на различных тематических;
можно привлечь, при необходимости, к написанию небольшого количества автотестов Java-разработчика;
можно использовать CUCUMBER, делающий автотесты понятными буквально любому члену команды, даже не знакомому ни с каким языком программирования.
При написании достаточно большого количества автотестов на непопулярном языке можно столкнуться со следующими проблемами:
переписать на популярный язык будет очень сложно, дорого, трудозатратно;
найти новых специалистов на проект будет довольно сложно;
время на написание и поддержку существующих автотестов значительно выше.
Ссылки на ресурсы со статистикой, используемой в статье (данные усреднены из всей выборки):
https://insights.stackoverflow.com/survey/2019#technology-_-programming-scripting-and-markup-languages
https://dou.ua/lenta/articles/language-rating-jan-2021/
https://anarsolutions.com/programming-languages-for-automation-testing/#:~:text=The top 3 programming languages for automation testing are Python,and libraries available for testing.
https://blog.testproject.io/2022/03/22/top-testing-programming-languages-for-2022/
https://research.aimultiple.com/test-automation-statistics/#:~:text=~33%25 of companies seek to,automation in their testing process.