Автоматизация Тестирования Может Многое

Начну с того, что ни для кого не буду открывать «Америку», а хочу поделиться собственным опытом и лайфхаками для тех, кто хочет что-то изменить в своей работе, но еще не определился с подходом к тестированию.

и/или технологии.

Отдел QA, как правило, постоянно находится под нагрузкой: «контроль качества» в различных формах необходим ИТ-подразделениям на протяжении всего этапа разработки программного продукта, от получения требований до финального релиза.

Работы много, без автоматизации сложно обойтись.

Знаете, почему мне нравится работать в отделе контроля качества? Мы — «универсальные солдаты», которые задействованы во всех аспектах проекта, и поэтому нам нужен самый широкий спектр квалификации в различных вопросах.

Это чертовски круто, но очень сложно! Большинство людей воспринимают отдел контроля качества как последний рубеж, отделяющий процессы разработки от точки производства, но это не совсем так.

Наше участие необходимо на протяжении всей работы над проектом и для всех подразделений компании.

Наши «внутренние клиенты»: разработчики, DevOps и инженеры по обработке данных, аналитики, специалисты ML (машинное обучение) и CV (компьютерное зрение).

Что нужно подразделениям для стабильной работы? Запросы очень разные.

Команда аналитиков должна быть уверена, что данные из «витрин», на основе которых впоследствии строятся аналитические отчеты, достаточно точны.

Дата-инженеры ожидают, что механизмы загрузки данных работают корректно, для этого механизмы необходимо протестировать.

Разработчики хотят, чтобы все ошибки были обнаружены на ранней стадии.

Специалисты по ML и CV ожидают, что данные эталонного качества будут использоваться для построения моделей обучения.

DevOps-инженерам нужна системно протестированная функциональность, чтобы потом не приходилось проделывать одну и ту же работу повторно, выполняя «откаты» неработающих модулей.

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

Спектр необходимых знаний и навыков постоянно расширяется! Например, в последнее время нам стали незаменимы навыки, свойственные специалисту по «большим данным» — возникают задачи контроля качества данных — и знание инструментов искусственного интеллекта, без которых с большими данными не справиться.



Автоматизация тестирования может многое

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

Теперь поговорим о том, как это выглядит на практике на одном из примеров.

«Семь десятков зайцев не заменят лошадь!» Есть несколько способов сформировать команду тестирования:

  • Нанимайте большое количество «ручных» специалистов для ручного проведения тестирования, обеспечивая тем самым QA.
  • Наймите компактную команду инженеров по автоматизации, которые создадут необходимый набор автоматизированных тестов для проекта.

    Различные виды испытаний будут выполняться машинами, выполняться заказанное количество проверок и по результатам выдаваться необходимые отчеты – и все это с минимальным вмешательством человека.

На мой взгляд, оба метода приемлемы.

Благодаря первым можно сразу получить повышение качества продукта, однако процесс внедрения QA развивающегося продукта с каждым днем становится все сложнее и занимает все больше времени: появляется все больше задач, решение из которых требуется выполнение тестовых случаев в течение нескольких часов или даже дней.

Сложность процессов растет лавинообразно; проведение некоторых видов тестирования «вручную» оказывается либо нецелесообразным, либо практически невозможным.

Поэтому, как вы уже догадались, был выбран второй способ.

Итак, мы приходим к необходимости уметь автоматизировать тестирование.

Как это обычно бывает, при автоматизации на создание алгоритмов и реализацию их «в коде» уходит некоторое время, но «лучше потерять день и потом улететь за пять минут», как говорилось в известном фильме.

Правильный код всегда работает быстрее, чем «ручные» проверки, не устает, не спит и не теряет концентрацию, поэтому качество контроля остается на высоком уровне.

Что нужно для быстрого создания кода? Умение писать автономные фреймворки.

Здесь нужны хорошие инструменты, достаточно гибкие, привычные и в то же время универсальные по отношению к технологиям разрабатываемого продукта, а технологий может быть много, ох как много! Что «под капотом» фреймворка?

Автоматизация тестирования может многое

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

Современный фреймворк должен состоять из набора элементов, включающего как универсальные, так и специализированные инструменты.

Таким образом, наша основа состоит из следующих технологий.

Python — это язык программирования общего назначения, который можно использовать для реализации любых задач тестирования.

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

Это почти как эсперанто, только на Python. Pytest — специализированная среда тестирования, основанная на всё том же Python, которая используется для написания и выполнения тестовых скриптов.

Мы используем Pytest как систему для запуска тестов, создания наборов тестов, проверки входных и выходных данных, диагностики тестов и создания отчетов о тестировании.

Мы выбрали Pytest исходя из преимуществ, важных для наших задач: этот инструмент позволяет запускать параллельные тесты, имеет средства гибкого управления подмножеством тестов непосредственно во время их работы, имеет мощный набор декораторов для реализации логики создание тестовых систем и т. д. Синтаксис прост, инструмент полностью бесплатен.

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

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

GitLab — это инструмент для процессов CI/CD и управления репозиторием кода для Git. Jmeter — отличный инструмент для реализации нагрузочного тестирования, которым мы пользуемся уже некоторое время.

Но мы заменили ее собственной кастомной библиотекой, основанной на запросах и многопроцессорности.

«Лучше один раз увидеть…» Давайте рассмотрим несколько небольших примеров.

У них будут базовые, но вполне работающие компоненты автоматизированного тестирования, которые так или иначе участвуют в текущем процессе проверки.

Пример использования нативного коннектора к СУБД ClickHouse с использованием Python:

   

from clickhouse_driver.client import Client def clickhouse_connection(): client = Client( host=os.environ['DB_HOST'],

Теги: #программирование #тестирование #тестирование ИТ-систем #фреймворк
Вместе с данным постом часто просматривают: