Пользовательский Репортер
Вы можете написать свой собственный пользовательский репортер для тест-раннера WDIO, адаптированный под ваши нужды. И это легко!
Всё, что вам нужно сделать, это создать node-модуль, который наследуется от пакета @wdio/reporter
, чтобы он мог получать сообщения от теста.
Базовая настройка должна выглядеть так:
import WDIOReporter from '@wdio/reporter'
export default class CustomReporter extends WDIOReporter {
constructor(options) {
/*
* заставляет репортер писать в выходной поток по умолчанию
*/
options = Object.assign(options, { stdout: true })
super(options)
}
onTestPass(test) {
this.write(`Congratulations! Your test "${test.title}" passed 👏`)
}
}
Чтобы использовать этот репортер, вам нужно присвоить его свойству reporter
в вашей конфигурации.
Ваш файл wdio.conf.js
должен выглядеть так:
import CustomReporter from './reporter/my.custom.reporter'
export const config = {
// ...
reporters: [
/**
* использовать импортированный класс репортера
*/
[CustomReporter, {
someOption: 'foobar'
}],
/**
* использовать абсолютный путь к репортеру
*/
['/path/to/reporter.js', {
someOption: 'foobar'
}]
],
// ...
}
Вы также можете опубликовать репортер в NPM, чтобы его мог использовать каждый. Назовите пакет как другие репортеры wdio-<reportername>-reporter
, и пометьте его ключевыми словами wdio
или wdio-reporter
.
Обработчик событий
Вы можете зарегистрировать обработчик событий для нескольких событий, которые запускаются во время тестирования. Все следующие обработчики будут получать данные с полезной информацией о текущем состоянии и прогрессе.
Структура этих объектов данных зависит от события и унифицирована для всех фреймворков (Mocha, Jasmine и Cucumber). После того, как вы реализуете пользовательский репортер, он должен работать для всех фреймворков.
Следующий список содержит все возможные методы, которые вы можете добавить в класс вашего репортера:
import WDIOReporter from '@wdio/reporter'
export default class CustomReporter extends WDIOReporter {
onRunnerStart() {}
onBeforeCommand() {}
onAfterCommand() {}
onSuiteStart() {}
onHookStart() {}
onHookEnd() {}
onTestStart() {}
onTestPass() {}
onTestFail() {}
onTestSkip() {}
onTestEnd() {}
onSuiteEnd() {}
onRunnerEnd() {}
}