1 of 30

DataLayer QA Automation

2 of 30

Пару слов о Data Layer

3 of 30

Проблемы с Data Layer = проблема с аналитикой

4 of 30

Какие именно проблемы могут случиться с DL

  • Вместо акционной цены товара отправляется цена без скидки
  • Нет ивента на добавление в корзину на странице категории
  • Нет impressions после фильтрации или сортировки
  • Неправильно трекаются шаги чекаута
    • Трекаются несколько раз
    • Не трекаются вообще
  • Неправильный order_id на эта покупки
  • Категория товара содержит его название (делает ее уникальной и не агрегируемой)

5 of 30

Когда ломается отправка данных

  • Обновление сайта. Сюда же можно отнести работу с сэндбоксами. Например, на dev сайте все работало, потом сломалось на UAT из-за конфликта модулей.
  • Акционные товары. Во время акций цены на товары меняются и мы рискуем отправлять неправильные цены в аналитику.
  • Редизайнили кнопку и сломали event listener для data layer
  • Любые другие JS ошибки на разных устройствах, которые могут поломать скрипты аналитики

6 of 30

И во всех случаях тестировать данные нужно повторно

7 of 30

А если вы агентство, то количество проектов является мультипликатором боли

8 of 30

Процесс мануального тестирования DL

  • Ходим по всем страницам сайта
  • Открываем консоль/dataSlayer и вручную проверяем каждое поле
  • Создаем тикеты на исправление

Что можно сказать об этом процессе? Долго и много раз.

9 of 30

Начинаем создавать систему автотестов

10 of 30

Какие цели:

  • Сократить время на мануальные Data Layer тесты
  • Увеличить объем тестирования (количество страниц и товаров, которые можем проверить за единицу времени)
  • Сделать возможными регулярные проверки (раз в неделю или хотя бы после релиза)
  • Тесты должны легко адаптироваться под следующие проекты и платформы

11 of 30

Процесс авто-тестирования DL

  • Настройка файла конфигурации:
    • Указываем правильные селекторы
    • Ключи авторизации для BigQuery
    • Адрес, на который будут отправляться репорты
  • Установка тестов на сервер (любой, по вашему вкусу)
  • Первый запуск с оператором (не headless)
  • Корректировка скриптов/файлов конфигурации
  • Запуск тестов на регулярной основе
  • Обработка отчетов и формирование тикетов на исправление

12 of 30

Технический стек

  • Python 3.7
  • Selenium headless mode (имитается браузера, но без рендеринга)
  • Google BigQuery для складирования репортов

13 of 30

Что нужно иметь до начала работы с автотестами

  • Стандартизированный Data Layer
  • Карта ивентов + ТЗ
  • Стандартизированная разработка (если вы агентство) в рамках одной ecommerce платформы
  • Список популярных ошибок при внедрении Data Layer
  • Достаточно человеко-часов для покрытия вашего DL тестами

Желательно: список тест кейсов, на основе которых вы будете писать скрипты.

14 of 30

Как выглядели задачи в начале

15 of 30

Как выглядели задачи через 3 недели

16 of 30

Структура проекта

17 of 30

Про эстимейты...

18 of 30

Что пошло не так

  • Внезапные баги Selenium
  • Время загрузки DataLayer
  • Время загрузки страницы и работоспособность сэндбоксов
  • Пришлось рефакторить и переписывать код много раз
  • Объем работ оказался значительно больше

19 of 30

Основная проблема - надежность тестов

20 of 30

Что с надежностью

  • После написания тестов – каждый второй падал с ошибкой
  • Selenium умеет ожидать только DOM элементы (и их изменения), но не знает как ожидать JS объекты, страницы и тд
  • При ожидании элементов периодически происходит Timeout Exception, даже если элемент присутствовал
  • Selenium не умеет кликать - внезапно

21 of 30

Из этого сформировал задачи

  • Научить скрипты ожидать JS объекты
  • Научить скрипты кликать и ловить JS ошибки браузера, а не ошибки Selenium
  • Сделать перезапуск определенного куска кода, если он упал
  • Разбить код на модули

22 of 30

Про клики

Ошибка Selenium: element is not interactable когда пытаемся сделать клик

Вместо этого:

driver.find_elements_by_css_selector()[0].click()

Использую это:

driver.execute_script('document.querySelector(css_selector).click()')

23 of 30

Ожидание JS объектов

Как я делал: зашел в исходный код Selenium WebDriverWait, скопировал, заменил на входе ожидание элемента на ожидание объекта.

Написал функцию, которая ищет нужный ивент в dataLayer (это обычный foreach), которая возвращает JSON объект. Этот объект можно дать на вход функции ожидания.

24 of 30

Логи собираются в BigQuery

25 of 30

Результаты

26 of 30

Я не получил ожидаемого результата

Я получил не тот результат, который ожидал

27 of 30

  • Сократить время на мануальные Data Layer тесты ❌
  • Увеличить объем тестирования (количество страниц и товаров, которые можем проверить за единицу времени) ✅
  • Сделать возможными регулярные проверки (раз в неделю или хотя бы после релиза) ✅
  • Тесты должны легко адаптироваться под следующие проекты и платформы ❓

28 of 30

Итог

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

29 of 30

Ссылки

30 of 30

Контакты