Skip to main content

Reporter

Тестовый раннер уведомляет репортера о различных событиях во время выполнения тестов. Все методы репортера являются необязательными.

Вы можете создать собственный репортер, реализовав класс с некоторыми методами репортера. Убедитесь, что экспортируете этот класс по умолчанию.

my-awesome-reporter.ts
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;

Теперь используйте этот репортер с testConfig.reporter. Узнайте больше о использовании репортеров.

playwright.config.ts
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 reporter.onBegin

Вызывается один раз перед запуском тестов. Все тесты уже обнаружены и помещены в иерархию [Suite]s.

Использование

reporter.onBegin(config, suite);

Аргументы

  • config [FullConfig]#

    Разрешенная конфигурация.

  • suite [Suite]#

    Корневой набор, содержащий все проекты, файлы и тестовые случаи.


onEnd

Добавлено в: v1.10 reporter.onEnd

Вызывается после того, как все тесты были выполнены или тестирование было прервано. Обратите внимание, что этот метод может возвращать [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

Вызывается при возникновении глобальной ошибки, например, необработанного исключения в процессе рабочего потока.

Использование

reporter.onError(error);

Аргументы

  • error [TestError]#

    Ошибка.


onExit

Добавлено в: v1.33 reporter.onExit

Вызывается непосредственно перед выходом тестового раннера. На этом этапе все репортеры получили сигнал reporter.onEnd(), так что все отчеты должны быть построены. Вы можете запустить код, который загружает отчеты в этом хуке.

Использование

await reporter.onExit();

Возвращает

  • [Promise]<[void]>#

onStdErr

Добавлено в: v1.10 reporter.onStdErr

Вызывается, когда что-то было записано в стандартный поток ошибок в процессе рабочего потока.

Использование

reporter.onStdErr(chunk, test, result);

Аргументы

  • chunk [string] | [Buffer]#

    Выходной фрагмент.

  • test [void] | [TestCase]#

    Тест, который выполнялся. Обратите внимание, что вывод может происходить, когда тест не выполняется, в этом случае это будет [void].

  • result [void] | [TestResult]#

    Результат выполнения теста, этот объект заполняется во время выполнения теста.


onStdOut

Добавлено в: v1.10 reporter.onStdOut

Вызывается, когда что-то было записано в стандартный вывод в процессе рабочего потока.

Использование

reporter.onStdOut(chunk, test, result);

Аргументы

  • chunk [string] | [Buffer]#

    Выходной фрагмент.

  • test [void] | [TestCase]#

    Тест, который выполнялся. Обратите внимание, что вывод может происходить, когда тест не выполняется, в этом случае это будет [void].

  • result [void] | [TestResult]#

    Результат выполнения теста, этот объект заполняется во время выполнения теста.


onStepBegin

Добавлено в: v1.10 reporter.onStepBegin

Вызывается, когда шаг теста начался в процессе рабочего потока.

Использование

reporter.onStepBegin(test, result, step);

Аргументы

  • test [TestCase]#

    Тест, к которому относится шаг.

  • result [TestResult]#

    Результат выполнения теста, этот объект заполняется во время выполнения теста.

  • step [TestStep]#

    Экземпляр шага теста, который начался.


onStepEnd

Добавлено в: v1.10 reporter.onStepEnd

Вызывается, когда шаг теста завершился в процессе рабочего потока.

Использование

reporter.onStepEnd(test, result, step);

Аргументы

  • test [TestCase]#

    Тест, к которому относится шаг.

  • result [TestResult]#

    Результат выполнения теста.

  • step [TestStep]#

    Экземпляр шага теста, который завершился.


onTestBegin

Добавлено в: v1.10 reporter.onTestBegin

Вызывается после того, как тест был запущен в процессе рабочего потока.

Использование

reporter.onTestBegin(test, result);

Аргументы

  • test [TestCase]#

    Тест, который был запущен.

  • result [TestResult]#

    Результат выполнения теста, этот объект заполняется во время выполнения теста.


onTestEnd

Добавлено в: v1.10 reporter.onTestEnd

Вызывается после того, как тест был завершен в процессе рабочего потока.

Использование

reporter.onTestEnd(test, result);

Аргументы

  • test [TestCase]#

    Тест, который был завершен.

  • result [TestResult]#

    Результат выполнения теста.


printsToStdio

Добавлено в: v1.10 reporter.printsToStdio

Использует ли этот репортер stdio для отчетности. Если нет, Playwright Test может добавить некоторый вывод для улучшения пользовательского опыта. Если ваш репортер не выводит в терминал, настоятельно рекомендуется вернуть false.

Использование

reporter.printsToStdio();

Возвращает

  • [boolean]#