Ведение журнала ошибок кодирования

Я довольно новичок в Codeception и столкнулся с проблемой, которую не могу понять. У меня около 40 тестов в моем наборе тестов, и если тест не пройден, мне нужно отправить электронное письмо с указанием причины, по которой он не прошел. Например, если Codeception не может найти элемент на странице, что приводит к неудачному тесту, мне нужно отправить электронное письмо только с ошибкой, например так:

Не удалось проверить, что список пожеланий по электронной почте ведет себя как ожидалось в ThisClass :: thisTest (/home/qauser/codeception_tests///acceptance-mobile/Wishlist/EmailWishlistCest.php)
Не удалось увидеть «Success!», «// * [@ id =» wish-list-verify-popup «] / div / div / div [1] / h4»:

Я не хочу отправлять полную трассировку стека, просто фактическую ошибку. Кто-нибудь знает возможно ли это?

4

Решение

Codeception предоставляет полезную коллекцию событий, которая пригодится для этого варианта использования. Посмотрите на Настройка: События раздел документации Codeception для получения дополнительной информации.

Я бы рекомендовал перехватить два события, описанных на этой странице:

  • test.fail событие, чтобы собрать информацию о каждом неудачном тесте.
  • test.fail.print событие, чтобы обработать агрегированные данные (например, отправив сводное электронное письмо), когда Codeception завершит тестовый набор и выведет на экран свою собственную сводку отказов.

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

# codeception.yml
extensions:
enabled: [MyCustomEventHandler]

# MyCustomEventHandler.php
<?php
// Note: this was drafted using Codeception 2.0.  Some of the namespaces
// maybe different if you're using a more-recent version of Codeception.
class MyCustomEventHandler extends \Codeception\Platform\Extension
{
/**
* @var \Exception[]
*/
protected $testFailures = [];

/**
* Maps Codeception events to method names in this class.
*
* Defining an event/method pair in this array essentially subscribes
* the method as a listener for its corresponding event.
*
* @var array
*/
public static $events = [
\Codeception\Events::TEST_FAIL       => 'singleTestJustFailed',
\Codeception\Events::TEST_FAIL_PRINT => 'allTestFailuresAreBeingDisplayed',
];

/**
* This method will automatically be invoked by Codeception when a test fails.
*
* @param \Codeception\Event\FailEvent $event
*/
public function singleTestJustFailed(\Codeception\Event\FailEvent $event)
{
// Here we build a list of all the failures. They'll be consumed further downstream.
$this->testFailures[] = $event->getFail();
}

/**
* This method will automatically be invoked by Codeception when it displays
* a summary of all the test failures at the end of the test suite.
*/
public function allTestFailuresAreBeingDisplayed()
{
// Build the email.
$emailBody = '';
foreach ($this->testFailures as $failure) {
// Methods in scope include: $failure->getMessage(), $failure->getFile(), etc.
$emailBody .= $failure->getMessage() . "\r\n";
}

// Now send the email!
}
}

Надеюсь это поможет!

4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector