В процессе автоматизированного тестирования артефакты играют ключевую роль. К артефактам относятся скриншоты, видеозаписи прохождения тестов, логи, отчёты о выполнении тестов и другие данные, которые помогают анализировать результаты и выявлять ошибки. Эффективная организация этих ресурсов позволяет ускорить отладку, облегчает интеграцию с CI/CD и повышает качество тестовой инфраструктуры.
Для упрощения работы с артефактами обычно создается отдельная папка,
например ./artifacts, с подкаталогами:
project-root/
│
├─ tests/
│
├─ artifacts/
│ ├─ screenshots/
│ ├─ videos/
│ ├─ logs/
│ └─ reports/
│
├─ wdio.conf.js
└─ package.json
screenshots/ – сохраняются скриншоты, автоматически или
по условию (например, при падении теста).videos/ – видеозаписи сессий тестирования (требуется
настройка соответствующих сервисов WebdriverIO).logs/ – текстовые и структурированные логи (например,
JSON), полезные для анализа нестабильных тестов.reports/ – HTML- или Allure-отчёты о выполнении
тестов.Такое разделение позволяет быстро находить нужный артефакт и интегрировать его в CI/CD пайплайны.
WebdriverIO предоставляет метод
browser.saveScreenshot(filePath), который сохраняет
скриншот текущего состояния браузера.
Пример сохранения скриншота при падении теста:
afterTest: async function(test, context, { error, result, duration, passed, retries }) {
if (!passed) {
const filePath = `./artifacts/screenshots/${test.title.replace(/\s+/g, '_')}.png`;
await browser.saveScreenshot(filePath);
}
}
Особенности:
Рекомендуется использовать replace(/\s+/g, '_') или
аналогичный метод для корректных имён файлов.
Можно включить timestamp, чтобы избежать перезаписи:
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
const filePath = `./artifacts/screenshots/${test.title}_${timestamp}.png`;Для записи видео WebdriverIO поддерживает интеграцию с различными
сервисами, например wdio-video-reporter или Selenium Grid с
поддержкой видео. В конфигурации:
const { VideoReporter } = require('wdio-video-reporter');
exports.config = {
reporters: [
['video', {
saveAllVideos: true,
videoSlowdownMultiplier: 3
}]
],
};
Основные принципы:
WebdriverIO позволяет записывать как системные логи браузера, так и собственные логи тестов:
const logs = await browser.getLogs('browser');
logs.forEach(entry => {
console.log(`${entry.level}: ${entry.message}`);
});
log4js или pino для структурированного
хранения.Пример настройки log4js:
const log4js = require('log4js');
log4js.configure({
appenders: { file: { type: 'file', filename: './artifacts/logs/test.log' } },
categories: { default: { appenders: ['file'], level: 'info' } }
});
const logger = log4js.getLogger('default');
logger.info('Тест стартовал');
WebdriverIO поддерживает множество репортеров: spec,
allure, junit, json.
Для организации артефактов рекомендуется сохранять их в
artifacts/reports/.
Пример конфигурации Allure:
exports.config = {
reporters: ['spec', ['allure', {
outputDir: './artifacts/reports/allure-results',
disableWebdriverStepsReporting: false,
disableWebdriverScreenshotsReporting: false,
}]],
};
Преимущества:
Для больших проектов рекомендуется реализовать:
const fs = require('fs');
const path = require('path');
const sessionDir = `./artifacts/session_${new Date().toISOString().replace(/[:.]/g,'-')}`;
fs.mkdirSync(sessionDir, { recursive: true });
artifacts/screenshots и
artifacts/videos в систему хранения.const rimraf = require('rimraf');
rimraf.sync('./artifacts/old-session-*');
Эффективная организация артефактов делает тестовую инфраструктуру прозрачной, ускоряет анализ ошибок и облегчает поддержку проектов с большим количеством автоматизированных тестов.