Все статьи

Особенности разработки автотестов различными инструментами, а также статистика по использованию

Спецпроект20 июля 2023

Меня зовут Максим, и я 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 подробнее

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, делающий автотесты понятными буквально любому члену команды, даже не знакомому ни с каким языком программирования.

При написании достаточно большого количества автотестов на непопулярном языке можно столкнуться со следующими проблемами:

  • переписать на популярный язык будет очень сложно, дорого, трудозатратно;

  • найти новых специалистов на проект будет довольно сложно;

  • время на написание и поддержку существующих автотестов значительно выше.

0