Как провести автоматическое тестирование сайта

Иван Ярославцев
Иван Ярославцев
14.02.23

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

    Автотест — это возможность исключить человека из процесса тестирования. А это значит, что проверять на ошибки чаще и проверять больше возможных сценариев. Это позволяет экономить и время и в перспективе финансы. 

    Фактически программа сама себя начинает проверять и сообщать о возможных ошибках.

    Для автоматического тестирования сайта мы используем: 

    1. PHPUnit. В том числе и для 1С-Битрикс.
    2. Jest для javascript.
    3. Playwright для End-2-End тестов. Используем при написании javascript.

    В каких случаях полезно

    1. Ловить критичные ошибки быстрее. Например, если у вас каждый час совершаются десятки заказов. Вам нужно быть уверенным, что форма заказа работает. И можно ее автоматически проверять каждые 5 минут. 
    2. Ловить проблемы, которые незаметны глазу. Например, ошибки в мобильной версии на определенных страницах и устройствах.
    3. Проводить утомительные тесты, где тестировщики морально устают и допускают из-за этого ошибки. Например заполнение длительных форм. 
    4. Когда нет документации по проекту и нам нужно быть уверенным, что при изменениях мы правильно поняли работу и ничего не сломали.
    5. Частые релизы. Если вам нужно каждый день или даже раз в пару дней выгружать новый функционал на сайт, то ручные QA-специалисты просто физически не успеют. 

    Когда не нужно автоматическое тестирование 

    Автотесты требуют больше времени специалиста, чем прохождение ручного теста 1-2-3 раза. Соответственно они имеют смысл, там где проверять нужно часто или быстро и не нужны, там где ваша система не меняется годами.

    1. Если у вас простой корпоративный сайт.
    2. Вы разрабатывали на готовом решении и не делали критических изменений. Например ваш сайт сделан на 1С-Битрикс и Аспро и вы ограничились настройкой внешнего вида в настройках.

    Что нужно подготовить для написания автотестов

    1. Список функционала, который нуждается в проверке.
    2. Список тест-кейсов и данных для них. Например, нам нужно проверять, что в зависимости от выбранного региона у вас правильно считается доставка. В таком случае нужно подготовить таблицу с регионами и ожидаемой стоимостью доставки. 
    3. В каком виде нужен отчет. Часть автотестов не нуждается в дополнительном отчете для клиента, достаточно того, что программист не сможет сделать изменения на сайте, если тесты не проходят. В других случаях — это может быть отчет на почту по мере выполнения каждого теста. Или отчет, если тест прошел с ошибкой. 

    Кейсы автоматического тестирования 

    Тестирование добавление филиалов

    На одном из проектов был реализован функционал дилерской сети.

    1. Для сети была возможность создавать свои филиалы для каждого дилера.
    2. Все пользователи привязывались к нужному дилеру и при авторизации на сайте переадресовывались на дилера, за которым закреплены.
    3. Если пользователь не привязан к дилеру, то должен попадать на основной филиал, после авторизации.

    С точки зрения архитектуры решение внутри 1С-Битрикс получилось чувствительным к изменениям. И прохождение тест-кейсов, связанных с этим функционалом, занимало не меньше 15 минут каждый раз. А релизы от разработчиков шли каждый день. Поэтому для этого функционала решили подготовить автоматические тесты. Решили использовать интеграционные тесты на основе PHPUnit.

    Было выбрано несколько тест-кейсов:

    1. Проверка на работу формы авторизации.
    2. Проверка на добавление филиала.
    3. Проверка на добавление пользователя.
    4. Проверка на переадресацию на нужный домен у нового филиала.

    Тест можно запустить вручную или он автоматически запуститься при попытке разработчика сделать commit. То есть провести изменения на рабочем сервере.

    В результате мы видим:

    9 из 9 тестов успешно пройдены. И заняли меньше 5 секунд. 

    Если мы попробуем умышленно сломать 1 тест, то он покажет нам ошибку.

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

    Тестирование связи района и адреса

    У одного из наших клиентов периодически возникали расхождения времени доставки и адреса получателя. Задача усложнялась тем, что время доставки настраивалось по району, а показывалась в зависимости от адреса. В этом нам помогал сервис dadata.ru.

    Так как часть логики была реализована на frontend и в силу специфики классической битрикс-разработки фронтенд и бэкенд плохо изолированы друг от друга, то мы решили разработать end-to-end тест на playwright.

    Playwright полностью эмулирует работу браузера. На примере ниже видно, как открывается сразу 3 окна браузера и параллельно проходят тест-кейсы:

    1. Открывают главную страницу.
    2. Добавляют первый товар в корзину.
    3. Заходят в корзину.
    4. Пробуют вставить заранее подготовленные адреса.
    5. Сравнивает ожидаемую стоимость и время доставки с фактической.

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

    Как мы видим, проведено 3 теста, и 1 из них успешно. Чтобы клиенту было удобнее обновлять набор данных для теста, мы вынесли данные для сравнения в отдельный excel-файл. 

    В результате дополнительно можно подключить HTML-отчет, который может посмотреть клиент по итогам каждого запуска.

    Сколько стоит автоматическое тестирование 

    Ранее упоминали, что автотесты занимают примерно 30% от времени разработки функционала. В том числе их поддержка, так как при изменении кода проекта, так же требуется убедиться, что автоматическое тестирование соответствуют изменениям. Минимальное количество времени на реализацию нескольких простых тестов — 10 часов. При стоимости часа 2500 рублей.

    Типовой план реализации:

    ПунктЧасы
    Подготовка тест-кейсовот 2
    Реализация автотестовот 8
    Подготовка удобного отчета на почтуот 2

    Что в результате

    1. Вы уверены, что тест-кейсы, которые автоматизированы будут проверены оперативно и так часто, как это потребуется.
    2. Экономия на проверке ручными тестировщиками.
    3. Повышает качество выпускаемого продукта, пользователь видит меньше ошибок.
    4. Опционально могут формироваться отчеты на почту.

    Для заказа автоматического тестирования сайта у нас, оставьте заявку в форме ниже или на странице.