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





Да, я мало работал с 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 . Однако у них есть ошибка, которую они не будут исправлять. Но похоже, что это только тогда, когда вы используете прокси, чего, я думаю, вы не будете. И даже если вы это сделаете, есть обходной путь, поэтому мы должны положиться на пользовательский агент.
Однако хорошо бы связаться с вашим аналитическим отделом и сообщить им, что вы собираетесь отправить им несколько обращений во время тестирования, указав, как они могут отфильтровать ваш трафик. Им может потребоваться время, чтобы создать правила в своих системах управления тегами, чтобы перенаправить отслеживание тестового трафика в базу данных аналитики более низкой среды на основе пользовательского агента. Не забудьте сказать им, что тесты планируется проводить в продакшене, так как это редкий случай, и они должны подготовиться.
Стоит отметить, что Драматург использует Кукловода.
Если ваша среда тестирования ограничена известным и стабильным диапазоном IP-адресов, вы можете пометить трафик, исходящий от них, как внутренний и впоследствии отфильтровать его с помощью встроенного фильтра внутреннего трафика GA4.
Более подробное и полное объяснение можно найти здесь.
Второй вариант — использовать флаг функции, отключающий код инициализации GA/GTM при создании тестируемого приложения.
Неприменимо здесь, потому что вопрос касается тестирования уже работающего производственного кода, который по определению не может использовать индивидуальную сборку. Не буду вдаваться в подробности здесь.
Подробный, но вполне выполнимый подход добавления чего-то вроде параметра запроса к 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. Надеюсь, вы найдете это полезным.
Конечно, это не вопрос, напрямую связанный с самим драматургом, это может повлиять на вас с помощью любого другого инструмента. Решение, которое вы дали, кажется мне действительно хорошим, вы всегда можете поговорить с отделом аналитики, чтобы отфильтровать запросы, сделанные с помощью вашего инструмента автоматизации, по пользовательскому агенту.