Автоматизировать или нет: спорные кейсы, плюсы и минусы автотестов |
04.04.2022 00:00 |
Автор: Дмитрий Ремезов, QA-инженер, Технократия Миру требуется все больше и больше софта: любой магазин или автосервис хочет сайт или мобильное приложение. Но забагованный софт не хочет никто, нам нравится, когда все работает красиво и корректно. Эффективно искать баги помогает тестирование, и иногда оно проходит автоматически. Вот про этот случай мы и поговорим. Качество разрабатываемого продукта конечно зависит от всей команды, но давайте выделим тестирование, в нем я разбираюсь. Меня зовут Дмитрий Ремезов, я QA-инженер в Технократии, и в этом тексте я дам вам вводные об автоматическом тестировании: когда оно поможет, а когда от него стоит отказаться. Дам список из плюсов и минусов подхода, и в конце опишу проект, которому точно требуется автоматизация. Автотесты — инструмент Мы, тестировщики, хотим переложить бремя регресса на плечи автотестов. Однако автоматизация тестирования — не панацея, а инструмент. А чтобы инструмент работал и приносил прибыль, его сначала нужно правильно подобрать, а затем не забывать обслуживать и иногда менять на новый — лучший. Следующее предупреждение — существуют спорные кейсы, поэтому к процессу автоматизации стоит подходить обдуманно. Может случиться так, что польза от автоматизированного тестирования не сможет покрыть расходы, затраченные на этот процесс. Давайте подробнее рассмотрим такие кейсы. Тестирование версткиЗаказчики и пользователи смотрят на приложение глазами, поэтому красивый, качественный интерфейс играет важную роль. Но разные браузеры, их обновления, обновления фронтовых библиотек могут нашу красивую верстку сломать. Это может затронуть приложение только визуально, а может даже заблокировать функциональность. К примеру, так. Магазин одежды предлагает узнать боль. Нельзя отрицать плюсы в виде появления нового мема и повышенной посещаемости сайта. Но бывают более серьезные проблемы. Недавно я поменял телефон. Мой предыдущий девайс имел небольшую диагональ. В конце месяца я зашел в онлайн банкинг обновить категории кешбэка, но нужная мне позиция оказалась под футером и не скроллилась — выбрать эту позицию я не смог. Такая проблема — триггер негодования пользователей, горящей техподдержки, ухода некоторых пользователей и получения убытков. От этого спасает тестирование. Рассмотрим среднестатистический проект. имеем:
В ручную проверять верстку долго и не весело. Давайте автоматизировать В идеальном мире все выглядит так: выбрали фреймворк, затратили время. Автотестер нажимает кнопку, и программа сама пошла тестировать. Профит! Но погодите. Сейчас редко встречаются приложения со стабильно неизменяемым фронтендом. Чтобы не дать пользователю заскучать и привыкнуть, менеджеры и дизайнеры часто проводят редизайн, освежают интерфейсы. К этому добавим частое обновление UI-китов, выход новых устройств с новыми типами экранов —iPhone и новые MacBook с челкой—, обновление подключённых библиотек, обновления браузеров. Получается удручающая картина. Помните, я говорил, что тестирование — инструмент? Так вот, автотесты верстки придется постоянно обновлять. А это не всегда просто и быстро. Это надо иметь в виду. Эмуляция отказа сервераЭто следующий кейс. В чем смысл? Мы имеем микросервисную архитектуру и хотим проверить, как ведет себя приложение, если какой-то из сервисов отвалился. По-хорошему при отказе какого-либо сервиса приложение не должно падать:
Как это сделать в рамках ручного тестирования понятно. Тестировщик получает доступы к серверам. Руками через терминал «опускает» нужный сервис. Затем смотрит, как ведет себя приложение в данной ситуации. Другой вариант развернуть все локально, с помощью сниффера расставить брейкпоинты, и эмулировать отказ сервера. Что в данной ситуации будет делать автотестер?Пропишет скрипты с кредами? Тут встает вопрос о безопасности. Разворачивание безопасной тестовой инфраструктуры это процесс, который требует скилов и трудозатрат. Использовать моки? Грамотное мокирование подразумевает тестирование белого ящика, что не всегда под силу автоматизатору и требует помощи разработчика. Прогон тестов локально я даже не рассматриваю, так как все мы с тестами целимся в CI. Поднятия такого стенда на отдельной виртуальной машине опять требует допресурсов и, возможно, помощи девопса. Опять же злоупотребление моками и стабами негативно сказывается на качестве автотестов. Об этом написано много статей. Например, вот и вот. Так что не будем заострять на этом внимание. Нативные окна браузераВот где можно открывать ортопедический салон. Все с ними знакомы: они постоянно вылетают и запрашивают разрешения на действия, оповещают о возможных проблемах или предлагают сохранить креды. Сколько обсуждений в интернете, сколько собственных костылей, сколько стараний разработчиков фреймворков. И, вроде, все ясно и понятно, но каждый раз натыкаешься, и не всегда можешь справиться. Приведу пример из собственного опыта. Недавно перешел на новый проект. На стенде есть банальное флоу: кнопка связи с техподдержкой. После нажатия открывается новая вкладка с номером телефона и заглушкой, которые зависят от региона, введенного пользователем при регистрации. Нужно было проверить, что выводится правильный номер телефона и заглушка. Но есть нюанс, как в анекдоте, ага. Когда открывается новая вкладка, появляется нативное окно. Оно предлагает открыть дефолтное ПО для совершение звонка. И вот это нативное окно блокирует дальнейшие действия на странице, и я не могу на него ткнуть, могу только вкладку закрыть. Вошел в азарт, потратил 3 дня. Но так и не решил. В итоге проверяю линку, привязанную к кнопке, а проверку заглушки оставил для ручного тестирования. Как вы думаете в чем суть данного примера? Нужно рассчитывать свое время и силы. Потратил кучу времени, а толку так и не добился. А ведь мог остановиться раньше.
Я упоминал, что не все однозначно. У автоматизации есть плюсы и минусы. Так они выглядят, на мой взгляд. Плюсы:
Минусы:
Спорные моменты:
После всего этого составим картину проекта, которому требуется автоматизация тестирования:
Пора подводить итог. Есть кейсы, которые пока нельзя автоматизировать, кейсы, которые нужно автоматизировать, и спорные кейсы. То есть сразу не очевидна, будет ли выгода от них. Как вообще определиться автоматизировать данные кейсы или нет?
Таким образом, автоматизировать или не автоматизировать, решать вам. Примеры, которые я привел, можно покрыть автотестами. Я хочу сказать о том, что к автоматизации тестирования нужно подходить обдуманно. Нужно стараться, чтобы работа приносила максимальную пользу, а не упарываться в какие-то трудно выполнимые задачи. Таким образом автоматизируйте осмысленно! Да прибудет с вами сила! Также подписывайтесь на наш телеграм-канал «Голос Технократии». Каждое утро мы публикуем новостной дайджест из мира ИТ, а по вечерам делимся интересными и полезными мастридами. |