Как определить тестовый трафик Playwright, чтобы его можно было отфильтровать с помощью аналитики?

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

Есть ли способ идентифицировать тестовый трафик Playwright, чтобы его можно было отфильтровать из аналитических отчетов?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
139
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

const {webkit} = require('playwright');
(async () => {
  const browser = await webkit.launch();
  // Create a new incognito browser context with a proper user agent
  const context = await browser.newContext({
    userAgent: 'Playwright Bot for internal QA automation'
  });
  // Now the page will have the user agent 
  const page = await context.newPage('https://example.com');
  console.info(await page.evaluate(() => navigator.userAgent));
})();

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

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

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

Jaky Ruby 17.12.2022 19:05

Стоит отметить, что Драматург использует Кукловода.

Soviut 18.12.2022 00:24

Фильтрация внутреннего трафика по IP-адресу клиента

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

Более подробное и полное объяснение можно найти здесь.

Используйте специальную сборку с отключенным кодом GA

Второй вариант — использовать флаг функции, отключающий код инициализации GA/GTM при создании тестируемого приложения.

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

Передать специальный параметр запроса в URL-адреса, которые вы тестируете

Подробный, но вполне выполнимый подход добавления чего-то вроде параметра запроса к URL-адресам продуктов, которые вы тестируете.

Код продукта должен будет выбрать этот параметр на ранней стадии процесса начальной загрузки и быстро отключить код инициализации GA/GTM.

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

Мы также можем использовать полностью настраиваемый (запрос) HTTP-заголовок и файл cookie (который должен быть установлен сервером, а затем прочитан кодом JS), чтобы наше приложение знало, что это тестовый клиент, просматривающий его.

Мы можем использовать поле конфигурации network.extraHTTPHeaders playwright , чтобы добавить наш собственный заголовок запроса, но для этого потребуется изменить код сервера.

Используйте ?ga_debug_mode=true, чтобы отключить Google Analytics

Настроив storageState.origins[].localStorage, мы можем убедиться, что каждый экземпляр браузера, запущенный Playwright, имеет наш собственный флаг storageState.origins[].localStorage, установленный на ga_debug_mode в его true.

Затем, опять же, код продукта должен прочитать флаг и отключить (пропустить) код GTM/GA4, когда это необходимо. То есть:

<script>
  if (window.localStorage.getItem('ga_debug_mode') !== 'true') {
    // GTM or GTAG Initialization code
  }
</script>

Соответствующая часть конфигурации Playwright:

import type { PlaywrightTestConfig } from '@playwright/test';

const storageState = {
  cookies: [], // not used but required by type definition
  origins: [{
    origin: '*', // doesn't narrow hostname at all. Use with caution!
    localStorage: [
      {
        name: 'ga_debug_mode', // feel free to modify the property name
        value: 'true', // this is a string
      },
    ],
  }],
};

const config: PlaywrightTestConfig = {
  use: {
    baseURL: 'https://example.com/',
    browserName: 'chromium',
    headless: true,
    storageState,
  },
};

Дальнейшее чтение

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

Существуют различия в отключении (или пометке событий debug_mode: true) сценария GA, установленного с помощью сценария GTAG (старый подход), и сценария, инициализируемого с помощью диспетчера тегов Google.

Я подробно изучаю и описываю все эти варианты здесь: Как исключить тестовый трафик драматургов из Google Analytics. Надеюсь, вы найдете это полезным.

Другие вопросы по теме