В процессе тестирования с использованием Playwright важно не только проверить корректность работы приложения, но и получить полезную информацию о тестах, которые не прошли. Для этого необходимо сохранить артефакты, такие как скриншоты, логи, записи видео и другие данные, которые могут помочь в диагностике и устранении ошибок. В Playwright предусмотрены встроенные механизмы для автоматического сохранения таких артефактов при падении теста.
Playwright предоставляет возможности для настройки сохранения
артефактов на уровне конфигурации. Для этого необходимо определить
соответствующие параметры в файле конфигурации
playwright.config.js.
Пример конфигурации для сохранения скриншотов и видео:
module.exports = {
reporter: [['list'], ['json', { outputFile: 'report.json' }]],
use: {
screenshot: 'only-on-failure', // Снимать скриншоты только при падении тестов
video: 'retain-on-failure', // Записывать видео только при падении тестов
trace: 'retain-on-failure', // Сохранять трассировки только при падении
},
};
Эта конфигурация обеспечивает сохранение скриншотов, видео и трассировок только в случае неудачи теста. Важно понимать, что такие настройки могут сильно упростить диагностику, поскольку предоставляют полное состояние браузера на момент падения.
Скриншоты являются одним из самых простых и полезных артефактов,
которые можно сохранить при падении теста. Playwright позволяет снимать
скриншоты с различными уровнями детализации. В настройке
screenshot можно выбрать один из следующих вариантов:
on – всегда сохранять скриншот.only-on-failure – сохранять скриншот
только в случае падения теста.off – не сохранять скриншоты.Для сохранения скриншота при падении теста необходимо использовать конфигурацию как в примере выше. Скриншот сохраняется в текущей директории с именем, соответствующим имени теста, с добавлением суффикса, отражающего время ошибки или номер теста.
test('проверка формы регистрации', async ({ page }) => {
await page.goto('https://example.com');
await page.click('button[type="submit"]');
// Пример условной ошибки
expect(await page.locator('text=Добро пожаловать').isVisible()).toBe(true);
});
В случае ошибки теста Playwright сделает снимок экрана с содержимым страницы.
Для более детального анализа поведения приложения при падении теста полезно записывать видео. Видео позволяет воспроизвести последовательность шагов, которые привели к ошибке, и поможет быстрее понять, что именно пошло не так.
Для включения записи видео в тестах, необходимо в конфигурации
указать video: 'retain-on-failure'. Запись будет
сохраняться только в случае неудачи, и Playwright автоматически создаст
файл видео в директории, указанной в параметре
outputDir.
Пример использования:
module.exports = {
use: {
video: 'retain-on-failure',
screenshot: 'only-on-failure',
trace: 'retain-on-failure',
outputDir: './artifacts', // Указание директории для артефактов
},
};
В случае падения теста видео будет сохранено в указанной папке с именем, соответствующим тесту и времени его выполнения.
Трассировки содержат информацию о каждом шаге теста, что позволяет
точно определить, на каком моменте произошла ошибка. В Playwright
трассировки можно включить через параметр trace в
конфигурации. Параметр trace: 'retain-on-failure' будет
сохранять трассировки только при падении тестов.
Трассировки могут содержать подробную информацию о всех действиях пользователя, а также состоянии браузера на каждом шаге теста. Для просмотра трассировки можно использовать инструмент Playwright Trace Viewer, который позволяет визуально анализировать последовательность шагов и легко находить ошибку.
Пример конфигурации с трассировками:
module.exports = {
use: {
trace: 'retain-on-failure',
},
};
При возникновении ошибки трассировка будет сохранена в папке
artifacts (или любой другой, которую вы укажете), и её
можно будет загрузить в Playwright Trace Viewer.
Иногда полезно сохранять логи браузера или консольные логи для
диагностики ошибок. Playwright позволяет получать логи через объект
page или browser. Для этого необходимо
использовать обработчики событий, например:
page.on('console', msg => {
console.log('Console message:', msg.text());
});
Для сохранения логов в файл можно использовать стандартные средства Node.js. Пример сохранения логов в файл:
const fs = require('fs');
page.on('console', msg => {
fs.appendFileSync('console.log', msg.text() + '\n');
});
Этот метод позволяет собирать информацию о всех консольных сообщениях, которые выводятся в браузере, и сохранять их для дальнейшего анализа.
Для более сложных сценариев можно автоматизировать процесс сохранения артефактов при падении теста. Например, используя обработчики событий для каждого теста, можно сохранять дополнительные данные или изменять поведение в зависимости от типа ошибки.
Пример использования обработчика для автоматического сохранения артефактов:
test.afterEach(async ({ page, status }) => {
if (status === 'failed') {
await page.screenshot({ path: `screenshots/${test.title}.png` });
await page.video().saveAs(`videos/${test.title}.mp4`);
await page.context().tracing.stop({ path: `traces/${test.title}.zip` });
}
});
В данном примере после каждого теста, если он завершился с ошибкой, сохраняются скриншоты, видео и трассировка.
Для интеграции с системами непрерывной интеграции и доставки (CI/CD) важно корректно настроить сохранение и использование артефактов. В таких системах часто нужно хранить и передавать артефакты между различными этапами тестирования и развертывания. Playwright позволяет сохранять артефакты в заранее настроенные каталоги, которые могут быть использованы для последующего анализа.
Пример сохранения артефактов в CI/CD:
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Install dependencies
run: npm install
- name: Run tests
run: npm test
continue-on-error: true
- name: Upload screenshots
if: failure()
uses: actions/upload-artifact@v2
with:
name: screenshots
path: ./artifacts/screenshots
В этом примере артефакты сохраняются в папку
artifacts/screenshots, и в случае падения тестов они
загружаются как артефакты для последующего анализа.
Сохранение артефактов при падении тестов в Playwright помогает значительно упростить диагностику ошибок и ускорить процесс отладки. Использование скриншотов, видео, трассировок и логов позволяет воссоздать полную картину теста на момент его неудачи и точно выявить причину ошибки. Важно правильно настроить конфигурацию, чтобы не перегружать систему тестирования лишними данными, а сохранять только те артефакты, которые действительно нужны для анализа ошибок.