Тестирование аналитики — Автоматизация

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

Что такое аналитика?

При помощи сервисов (Google Analytics, Yandex Метрика и другие), можно собирать статистику о посетителях сайта. Статистика ведется по самым разным параметрам, начиная от географического положения и заканчивая возрастом. Для более детальной статистики, пользователь может придумать собственные цели(events) и измерять по ним нужные характеристики.

Вот пример pageview event с Хабра

аналитика на хабре

Пример того, зачем могут быть нужны цели.

  • Разработчик добавляет событие ‘onclick’ в нужном формате на кнопку Login
  • Пользователь заходит на сайт, нажимает кнопку Login и тем самым вызывает код, который был завязан на событие onclick
  • Посылается информация на сервис аналитики о том что пользователь кликнул на кнопку Login
  • В аналитике сохраняется информация о каждом таком клике

С такими данными, вы точно знаете чего вам хватает или не хватает и решаете что делать дальше. Вариаций таких целей очень много. Аналитика очень полезна в умелых руках.

Тестирование аналитики

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

К тому же отдел по работе с клиентами очень сильно привязан к данным из аналитики и часто ссылается на них. И если в какой-то момент прекратился сбор данных, то это Очень плохо.

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

Автоматизация тестирования аналитики

Как оказалось подходов для автоматизации аналитики не так уж и много. Мы с коллегами провели небольшой анализ этих подходов.

Sinon.js + Mocha.js + PhantomJS

Более подробное описание и даже код, есть в оригинальной статье. Если проще, то Sinon позволяет создавать Spy(шпион), который будет ожидать исполнения заданных вами функций. Mocha это тестовый фреймворк, позволяющий писать тесты на js, запускать их с нужными параметрами и еще кучей дополнительных возможностей.

Сценарий теста такой

  • Открываем страницу на которой будет проходить тест
  • Инклудим файлы библиотек и заранее подготовленный файл с функциями вызова event’ов
  • Выполняем действия для вызова Event’ов
  • При помощи spy проверяем что функции отработали

Подход хорош, но здесь нужно написать очень много пред-проверочного кода. Нужно в буквальном смысле вписать каждый тестируемый event и отдельно проверять их в тестах. На мой взгляд это долго и не эффективно. Еще один субъективный для меня минус это JavaScript. Мне просто не нравится синтаксис.

Из плюсов

Все хорошо структурировано, используемые библиотеки довольно известны и часто обновляются. Функционал явно можно расширять. Работает достаточно стабильно.

Парсинг HAR

HAR это HTTP архив. Проще говоря, это все то что отображается во вкладке Network в панели разработчика(или Firebug).

парсинг har файла

То есть каждый отправленный запрос(в том числе, на сервис аналитики) будет доступен в HAR. Собрать все это можно при помощи BrowserMobProxy. Это еще один эмулятор браузера, на основе selenium, но без интерфейса.

Тест будет выглядеть так:

  • Мы открываем страницу
  • Выполняем действия вызывающие event
  • Получаем HAR
  • Парсим HAR
  • Сравниваем с эталонными значениями

Минусы подхода

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

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

GoogleAnalytics-WebTester

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

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

Подмена endpoint и сохранение запросов в БД

Последний и самый действенный для меня вариант это подмена endpoint.

Что я имею ввиду? Когда мы генерируем event, то он отправляется на сервис аналитики. А именно на урл который предоставляет этот сервис. Например у Google это https://www.google-analytics.com/collect .

Итак мы создаем фейковый урл, запросы к которому будем слушать. Затем все полученные запросы мы сохраняем в БД и работаем с ними в тестировании.

Чем хорош данный вариант

Большой плюс в том, что он отлично встраивается в модель тестирования с фреймворком. Методы проверки самого event, не такие замысловатые как были бы в случае с HAR. Данный вариант не ограничен сервисом от Google, можно проверять буквально любой сервис аналитики. В отличии от первого варианта, в страницу не встраивается никакого кода, все происходит изолировано. БД сохранит все данные, поэтому делать сверки можно когда угодно, например спустя все пройденные функциональные тесты. Не обязательно делать проверки синхронно с действиями в браузере.

2 Комментарии

  1. А можно пример последнего?

    • Андрей Ким

      29.08.2016 в 08:39

      Примером к сожалению поделиться не могу. Но вариантов тут по большому счету 2. Мы меняем урл на который шлются ивенты и потом слушаем запросы к нему на сервере. Либо мы оставляем оригинальный урл, и в хостах меняем ему IP на нужный. И опять же слушаем запросы. В нашем случае запросы записываются в БД и потом тестами там же и проверяются.

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