Что такое автотесты в программировании
Перейти к содержимому

Что такое автотесты в программировании

  • автор:

Словарь тестировщика: автотесты, юнит-тесты и другие важные слова

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

А вот — инженерный. В этой статье разберём на базовом уровне основные подходы к инженерному тестированию.

Что такое автотесты

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

Автотест делается и работает так:

  1. Программист берёт часть программы, которую он тестирует, и прикидывает, какие данные она должна вернуть, если в неё попадут другие данные.
  2. Затем программист собирает нужные ему для тестов комбинации данных на вход и на выход, которые должны быть в идеальной ситуации.
  3. После этого он добавляет в тест специально неправильные данные и ожидаемый ответ в этом случае.
  4. Когда все проверочные данные готовы, он оборачивает их в код и пишет тест — программу-тестировщика, которая обращается к программе-жертве и смотрит, как та отреагирует на разные данные.

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

Автотесты делятся по масштабам тестирования на юнит-тесты, сервисные тесты и интеграционные тесты.

Юнит-тесты

Юниты — это отдельные модули или части программы, каждый из которых отвечает за что-то своё.

Юнит-тесты проверяют работу отдельных юнитов: берут модуль и прогоняют его по всем своим тестам. Чем меньше и проще модуль, тем проще сделать юнит-тест и прогнать его по модулю. Модулем может быть что угодно — функция, метод класса, часть API и так далее.

Юнит-тесты — самые простые в обслуживании и написании. Работают быстро, проверяют модуль вдоль и поперёк, но есть нюанс: если в программе больше одного модуля, то просто протестировать их по одному недостаточно — они могут работать классно поодиночке, но вместе работать плохо. Чтобы проверить работу нескольких модулей вместе, делают сервисные тесты.

Сервисные тесты

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

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

Интеграционные тесты

Эти тесты проверяют, как работают все модули сразу или даже как работает вся программа.

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

  • писать побольше юнит-тестов, прям чтобы было много;
  • сервисных тестов писать поменьше;
  • а интеграционных — ещё меньше, в идеале один или два, и всё.

Минусы автотестов

Если бы всё можно сделать автотестами, которые не пропускают ни одной ошибки в программе, то в разработке ПО наступил бы идеальный мир. Но у автотестов тоже есть минусы.

Стоимость разработки. Так как автотест — это тоже программа, на её разработку тоже нужны время и деньги. Чем сложнее автотест, тем больше ресурсов на него нужно. Иногда проще разбить один большой тест на много тестов поменьше, чем разрабатывать огромную универсальную тест-машину.

Поддержка. Там, где разработка, там и поддержка ПО. Автотесты тоже нужно поддерживать в актуальном состоянии: следить за правильностью тестируемых параметров, текущими названиями классов и методов и версиями тестируемого софта.

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

Вот пример: если бы мы автотестировали калькулятор, то мы бы могли сделать тесты с числами 1, 2, 3, 4, 5 … 9999. В нашей голове это максимальное значение, которое людям нужно в обычной жизни. Мы даже не подумаем, что кому-то в нашем калькуляторе понадобится число длиной 17 знаков. А ведь именно на таком числе наш калькулятор и сломался.

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

Где этому научиться

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

Автоматизация тестирования: что это такое и зачем вам нужно

Тестирование ПО можно условно разделить на два направления: ручное и автоматизированное. Ручное (также мануальное) тестирование не требует особых айтишных навыков, а тем более навыков программирования. Его часто описывают под соусом «вам хватит и этого, чтобы войти в профессию, если боитесь программирования». Обманывают ли вас? Нет, это и правда так: и сегодня на позицию джуниор-тестировщика можно претендовать без навыков автоматизации.

Зачем тогда нужна автоматизация?

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

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

Но что делать, если кодить — не ваше? Выход есть!

На более продвинутом уровне автоматизации без знания программирования не обойтись, но вначале вам могут помочь рекордеры. Это специализированное программное обеспечение, предназначенное для записи действий пользователя и быстрого преобразования их в шаги линейных тестов. Вот примеры некоторых из них:

Установив рекордер, вы можете записать происходящие действия, а потом воспроизвести тест-кейс, проверив его работоспособность.

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

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

На курсе ПОИНТ мы посвящаем автоматизации отдельный урок, в котором структурируем информацию, показываем практические примеры и путь к тому, чтобы стать автоматизатором. Мы понимаем, что разобраться в автоматизации с нуля сложно, и поэтому строим свой урок так, чтобы понять его мог любой человек, даже тот, кто никогда не сталкивался с программированием!

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

Достичь золотой середины в обучении поможет курс ПОИНТ. В его программе мы уделяем внимание всем аспектам тестирования, изучая все важные темы, такие как составление баг-репортов, тест-дизайн, SQL для тестировщика, тестирование мобильных приложений и многое другое. Окончив ПОИНТ, вы можете претендовать на вакансии джуниор-тестировщиков! Почитать отзывы и истории выпускников, нашедших работу, можно по ссылке.

Курс стартует каждый месяц. Следите за нашей группой VK, чтобы не пропустить конкурсы и акции!

Автоматизированное тестирование: что это?

Автоматизированное тестирование: что это?

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

Освойте профессию
«Тестировщик-автоматизатор»

Что такое автоматическое тестирование

Автотестирование (autotesting) — это способ тестирования продукта с использованием специальных программ. QA-инженер на основе тестового сценария пишет автотест, который проверяет код на ошибки, прогоняет на продукте разные пользовательские сценарии, тестирует базовый функционал, собирает ошибки в итоговый отчет. Данные автоматизированного и ручного тестирования собирают вместе, чтобы передать их разработчикам и улучшить продукт.

Какие виды тестирования можно автоматизировать

Автотестирование — это хороший способ избавить QA-инженеров от рутины постоянно повторяющихся тестов и снизить риски, что тестировщик пропустит серьезную ошибку. Написать автотесты можно для:

Профессия / 16 месяцев
Тестировщик-автоматизатор
Лучший выбор для быстрого старта в IT
3 474 ₽/мес 6 317 ₽/мес

cables (3)

  • Дымового тестирования (smoke testing). Это проверка базовых функций ПО: работает ли форма входа в приложение, можно ли открыть его на разных устройствах, доступен ли API.
  • Модульного тестирования (unit testing). Это проверка кода отдельного модуля, функции приложения.
  • Нагрузочного тестирования. Это тип тестирования, который можно выполнить только автоматизированно. В процессе автотест генерирует большое количество пользователей в приложении, чтобы проверить, сколько оно может обработать и не сломаться.
  • Интеграционных тестов. Проверяют, насколько хорошо отдельные модули работают вместе, и правильно ли они передают друг другу данные. Например, ведет ли форма покупки билетов туда, куда должна вас вести — к странице оплаты.
  • Регрессионных тестов. Они помогают защитить уже существующий качественный код от багов, которые возникают при обновлении.

Сергей Рудик, QA-ментор в Skillfactory:

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

Возможно ли автоматизированное тестирование без ручного?

Нет. Как минимум потому, что автоматизированное тестирование нужно организовать, а значит, сначала сделать что-то руками.

Сергей Рудик, QA-ментор в Skillfactory:

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

Также в тестировании очень важно помнить, что пользователь может вести себя непредсказуемо, поэтому каждому продукту нужен взгляд человека. Ручное тестирование важно при проверке UI и UX: автотест может подтвердить, что кнопки правильного цвета и работают, но не может сказать, насколько удобно и интересно взаимодействовать с приложением.

Станьте тестировщиком – это лучший выбор для быстрого старта в IT

Как начать автоматизацию тестирования?

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

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

Сергей Рудик, QA-ментор в Skillfactory:

Писать автоматизированные тесты можно на Java, Python, Go. Найти заготовки для различных тестов, на основе которых вы подготовите собственный тест, можно в библиотеках: например, PyTest, Selenium. Python и PyTest помогают писать тесты для проверки бэкенда, API. На Selenium можно проверить интерфейс и создать эмуляцию браузера. Этих инструментов достаточно для старта в автоматизированном тестировании.

По данным исследования Skillfactory, от продвинутых кандидатов на позицию тестировщиков-автоматизаторов также ждут:

  • Владение SQL, GraphQL, JSON — чтобы запрашивать нужные данные из базы, HTTP — чтобы искать ошибки в коде сайтов и веб-приложений.
  • Умение работать с ПО для разработки: Git — для хранения версий кода, Postman — для тестирования бэкенда сайта, DevTools — чтобы проверять фронтенд сайта.
  • Знание ПО для управления данными: ORACLE, PostgreSQL, Grafana, REST API.

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

Тестировщик-автоматизатор

Как ворваться в IT, даже если вы не умеете программировать? Стать тестировщиком. Для старта достаточно базовых знаний ПК. А начать работать можно уже через 4 месяца обучения.

Автоматизация тестирования: минусы

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

Конечная цель автоматизации тестирования представляет собой некий набор автотестов, которые, при нажатии на кнопку «GO!», будут поочередно запускаться. Ну или всегда можно запустить какой-либо автотест отдельно, если для этого есть необходимость. Каждый такой скрипт проверяет правильность работы определенной части приложения и фиксирует ошибки в случае, если что-то работает не так.
О том, насколько выгоднее использовать автоматизированное тестирование чем ручное, а так же о плюсах автоматизированного тестирования хорошо написано в этой статье. Я же хочу описать возможные проблемы, с которыми может столкнуться тестировщик, решивший использовать автоматизированные тесты.

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

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

Отдельная статья расходов на автоматизацию – это поддержка автотестов.

Поддержка

Автотесты всегда требуют поддержки. Так как написание автотестов – это программирование, то чтобы изменить\исправить логику автотеста нужно лезть в исходный код. Для этого нужно нанимать дополнительных специалистов, которые будут сопровождать написанные скрипты. Это новые расходы, без которых не обойтись и которые значительно повышают стоимость автотестов. Есть 2 основных случая, при которых может понадобиться вмешательство в исходный код:

1. Изменение входных данных к тесту

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

2. Изменение функционала

Особенно актуально для регрессионного тестирования – тестирования новых версий. При каждом обновлении интерфейса или функционала тестируемого ПО потребуется доработка автотестов. Автотесты не могут сами адаптироваться под новый интерфейс, и для продолжения их корректной работы приходится все изменять вручную. Чем больше количество тестов, и чем больше произошло нововведений в ПО, тем больше времени понадобится на актуализацию.
Пример: в старой версии программы было меню «Файл -> Опции», в новой версии этот пункт разделили на два: «Файл -> Настройки» и «Файл — > Параметры». Автотест по прежнему будет искать пункт «Опции», и хоть ты тресни, не найдет «Настройки».
Либо может измениться например время загрузки тестируемой страницы. Если раньше она загружалась моментально, то теперь на это уходит минута. Допустим, теперь скорость соединения слабая, или база тормозит. Автотест же этого не знает, ждет загрузки страницы 10-15 секунд и выдает сообщение «Ошибка: страница не загрузилась». Опять же понадобится доработка исходного кода скрипта.

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

И всё-таки

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *