Управление артефактами тестов

Понятие артефактов тестирования

В контексте автоматизированного тестирования под артефактами понимаются любые данные, создаваемые в процессе выполнения тестов, которые могут быть использованы для анализа, отладки и отчётности. К артефактам относятся: логи, скриншоты, видео прохождения тестов, отчёты о результатах, дампы состояния браузера, файлы с данными окружения и т.д. Управление этими артефактами критически важно для поддерживаемости тестового процесса, особенно при масштабировании проектов и интеграции с CI/CD.

Конфигурация хранения артефактов

Protractor использует Node.js и интегрируется с Jasmine, Mocha и другими фреймворками для тестирования. Хранение артефактов начинается с правильной настройки protractor.conf.js. Основные параметры включают:

  • Папка для отчётов:

    capabilities: {
        browserName: 'chrome'
    },
    onPrepare: function() {
        browser.manage().window().maximize();
        jasmine.getEnv().addReporter(new jasmine.Reporter({
            savePath: './test-results/'
        }));
    }
  • Настройка логов браузера:

    capabilities: {
        browserName: 'chrome',
        loggingPrefs: {
            browser: 'ALL',
            driver: 'ALL'
        }
    }

    Логи можно сохранять в отдельный файл, используя Node.js модуль fs.

  • Генерация скриншотов при падении теста:

    afterEach(async function() {
        if (this.currentTest.state === 'failed') {
            const png = await browser.takeScreenshot();
            const stream = require('fs').createWriteStream(`./screenshots/${this.currentTest.title}.png`);
            stream.write(Buffer.from(png, 'base64'));
            stream.end();
        }
    });

Управление и организация артефактов

  1. Структура директорий Для упрощения поиска и анализа артефактов рекомендуется организовать директории по типу данных и дате выполнения:

    test-results/
        2026-01-07/
            logs/
            screenshots/
            reports/
  2. Именование файлов Имена файлов должны быть информативными, включать имя теста, браузер и timestamp:

    login-test_chrome_2026-01-07T12-30-45.png
  3. Очистка старых артефактов Для поддержания чистоты проекта автоматизируют удаление устаревших файлов:

    const fs = require('fs');
    const path = './test-results/';
    fs.readdirSync(path).forEach(file => {
        if (fs.statSync(path + file).isDirectory()) {
            // Удаление директорий старше 7 дней
        }
    });

Интеграция с CI/CD

Для командной работы и непрерывной интеграции артефакты должны быть доступны после каждого запуска тестов:

  • Jenkins: настройка архивирования артефактов через Post-build Actions.

  • GitLab CI/CD: указание artifacts в .gitlab-ci.yml:

    artifacts:
      paths:
        - test-results/
      expire_in: 1 week
  • Allure: интеграция с Jasmine или Mocha позволяет визуализировать скриншоты и логи в красивых отчётах:

    const { JasmineAllureReporter } = require('allure-jasmine');
    jasmine.getEnv().addReporter(new JasmineAllureReporter({
        resultsDir: 'allure-results'
    }));

Продвинутые техники

  • Скриншоты только для критичных шагов: уменьшает объем хранимых данных и ускоряет CI.

  • Сжатие артефактов: ZIP или GZIP для длительного хранения.

  • Сохранение состояния браузера: возможность записи cookies, localStorage и sessionStorage для воспроизведения багов.

    const fs = require('fs');
    const storage = await browser.executeScript('return window.localStorage;');
    fs.writeFileSync('./test-results/storage.json', JSON.stringify(storage));
  • Отчёты о производительности: при необходимости можно сохранять метрики загрузки страниц и времени отклика.

Практическая рекомендация

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

Хорошо структурированные артефакты создают основу для масштабируемой и поддерживаемой системы автоматизированного тестирования на Protractor.