Reporter
Тестовый раннер уведомляет репортера о различных событиях во время выполнения тестов. Все методы репортера являются необязательными.
Вы можете создать собственный репортер, реализовав класс с некоторыми методами репортера. Убедитесь, что экспортируете этот класс по умолчанию.
- TypeScript
- JavaScript
import type {
Reporter, FullConfig, Suite, TestCase, TestResult, FullResult
} from '@playwright/test/reporter';
class MyReporter implements Reporter {
constructor(options: { customOption?: string } = {}) {
console.log(`my-awesome-reporter setup with customOption set to ${options.customOption}`);
}
onBegin(config: FullConfig, suite: Suite) {
console.log(`Starting the run with ${suite.allTests().length} tests`);
}
onTestBegin(test: TestCase) {
console.log(`Starting test ${test.title}`);
}
onTestEnd(test: TestCase, result: TestResult) {
console.log(`Finished test ${test.title}: ${result.status}`);
}
onEnd(result: FullResult) {
console.log(`Finished the run: ${result.status}`);
}
}
export default MyReporter;
// @ts-check
/** @implements {import('@playwright/test/reporter').Reporter} */
class MyReporter {
constructor(options) {
console.log(`my-awesome-reporter setup with customOption set to ${options.customOption}`);
}
onBegin(config, suite) {
console.log(`Starting the run with ${suite.allTests().length} tests`);
}
onTestBegin(test) {
console.log(`Starting test ${test.title}`);
}
onTestEnd(test, result) {
console.log(`Finished test ${test.title}: ${result.status}`);
}
onEnd(result) {
console.log(`Finished the run: ${result.status}`);
}
}
module.exports = MyReporter;
Теперь используйте этот репортер с testConfig.reporter. Узнайте больше о использовании репортеров.
import { defineConfig } from '@playwright/test';
export default defineConfig({
reporter: [['./my-awesome-reporter.ts', { customOption: 'some value' }]],
});
Вот типичный порядок вызовов репортера:
- reporter.onBegin() вызывается один раз с корневым набором, который содержит все другие наборы и тесты. Узнайте больше о [иерархии наборов][Suite].
- reporter.onTestBegin() вызывается для каждого запуска теста. Ему передается [TestCase], который выполняется, и [TestResult], который почти пуст. Результат теста будет заполняться во время выполнения теста (например, шагами и stdio) и получит окончательный
status
после завершения теста. - reporter.onStepBegin() и reporter.onStepEnd() вызываются для каждого выполненного шага внутри теста. Когда шаги выполняются, запуск теста еще не завершен.
- reporter.onTestEnd() вызывается, когда запуск теста завершен. К этому времени [TestResult] завершен, и вы можете использовать testResult.status, testResult.error и другие.
- reporter.onEnd() вызывается один раз после завершения всех тестов, которые должны были быть выполнены.
- reporter.onExit() вызывается непосредственно перед выходом тестового раннера.
Кроме того, reporter.onStdOut() и reporter.onStdErr() вызываются, когда стандартный вывод производится в процессе рабочего потока, возможно, во время выполнения теста, а reporter.onError() вызывается, когда что-то пошло не так вне выполнения теста.
Если ваш пользовательский репортер ничего не выводит в терминал, реализуйте reporter.printsToStdio() и верните false
. Таким образом, Playwright будет использовать один из стандартных терминальных репортеров в дополнение к вашему пользовательскому репортеру для улучшения пользовательского опыта.
Заметки по API объединенного отчета
При объединении нескольких отчетов blob
с помощью команды CLI merge-reports
, тот же API [Reporter] вызывается для создания окончательных отчетов, и все существующие репортеры должны работать без изменений. Однако есть некоторые тонкие различия, которые могут повлиять на некоторые пользовательские репортеры.
- Проекты из разных шардов всегда сохраняются как отдельные объекты [TestProject]. Например, если проект 'Desktop Chrome' был разделен на 5 машин, то в конфигурации, переданной в reporter.onBegin(), будет 5 экземпляров проектов с одинаковым именем.
Методы
onBegin
Добавлено в: v1.10Вызывается один раз перед запуском тестов. Все тесты уже обнаружены и помещены в иерархию [Suite]s.
Использование
reporter.onBegin(config, suite);
Аргументы
-
config
[FullConfig]#Разрешенная конфигурация.
-
suite
[Suite]#Корневой набор, содержащий все проекты, файлы и тестовые случаи.
onEnd
Добавлено в: v1.10Вызывается после того, как все тесты были выполнены или тестирование было прервано. Обратите внимание, что этот метод может возвращать [Promise], и Playwright Test будет ожидать его. Репортер может переопределить статус и, следовательно, повлиять на код выхода тестового раннера.
Использование
await reporter.onEnd(result);
Аргументы
result
[Object]#-
status
"passed" | "failed" | "timedout" | "interrupted"Статус выполнения теста.
-
startTime
[Date]Время начала выполнения теста.
-
duration
[number]Продолжительность выполнения теста в миллисекундах.
status
может быть одним из:'passed'
- Все прошло как ожидалось.'failed'
- Любой тест не прошел.'timedout'
- Достигнут testConfig.globalTimeout.'interrupted'
- Прервано пользователем.
-
Возвращает
- [Promise]<[Object]>#
-
status
"passed" | "failed" | "timedout" | "interrupted" (опционально)
-
onError
Добавлено в: v1.10Вызывается при возникновении глобальной ошибки, например, необработанного исключения в процессе рабочего потока.
Использование
reporter.onError(error);
Аргументы
-
error
[TestError]#Ошибка.
onExit
Добавлено в: v1.33Вызывается непосредственно перед выходом тестового раннера. На этом этапе все репортеры получили сигнал reporter.onEnd(), так что все отчеты должны быть построены. Вы можете запустить код, который загружает отчеты в этом хуке.
Использование
await reporter.onExit();
Возвращает
- [Promise]<[void]>#
onStdErr
Добавлено в: v1.10Вызывается, когда что-то было записано в стандартный поток ошибок в процессе рабочего потока.
Использование
reporter.onStdErr(chunk, test, result);
Аргументы
-
chunk
[string] | [Buffer]#Выходной фрагмент.
-
test
[void] | [TestCase]#Тест, который выполнялся. Обратите внимание, что вывод может происходить, когда тест не выполняется, в этом случае это будет [void].
-
result
[void] | [TestResult]#Результат выполнения теста, этот объект заполняется во время выполнения теста.
onStdOut
Добавлено в: v1.10Вызывается, когда что-то было записано в стандартный вывод в процессе рабочего потока.
Использование
reporter.onStdOut(chunk, test, result);
Аргументы
-
chunk
[string] | [Buffer]#Выходной фрагмент.
-
test
[void] | [TestCase]#Тест, который выполнялся. Обратите внимание, что вывод может происходить, когда тест не выполняется, в этом случае это будет [void].
-
result
[void] | [TestResult]#Результат выполнения теста, этот объект заполняется во время выполнения теста.
onStepBegin
Добавлено в: v1.10Вызывается, когда шаг теста начался в процессе рабочего потока.
Использование
reporter.onStepBegin(test, result, step);
Аргументы
-
test
[TestCase]#Тест, к которому относится шаг.
-
result
[TestResult]#Результат выполнения теста, этот объект заполняется во время выполнения теста.
-
step
[TestStep]#Экземпляр шага теста, который начался.
onStepEnd
Добавлено в: v1.10Вызывается, когда шаг теста завершился в процессе рабочего потока.
Использование
reporter.onStepEnd(test, result, step);
Аргументы
-
test
[TestCase]#Тест, к которому относится шаг.
-
result
[TestResult]#Результат выполнения теста.
-
step
[TestStep]#Экземпляр шага теста, который завершился.
onTestBegin
Добавлено в: v1.10Вызывается после того, как тест был запущен в процессе рабочего потока.
Использование
reporter.onTestBegin(test, result);
Аргументы
-
test
[TestCase]#Тест, который был запущен.
-
result
[TestResult]#Результат выполнения теста, этот объект заполняется во время выполнения теста.
onTestEnd
Добавлено в: v1.10Вызывается после того, как тест был завершен в процессе рабочего потока.
Использование
reporter.onTestEnd(test, result);
Аргументы
printsToStdio
Добавлено в: v1.10Использует ли этот репортер stdio для отчетности. Если нет, Playwright Test может добавить некоторый вывод для улучшения пользовательского опыта. Если ваш репортер не выводит в терминал, настоятельно рекомендуется вернуть false
.
Использование
reporter.printsToStdio();
Возвращает
- [boolean]#