Как настроить Citrus LogginReporter для отображения полной трассировки стека при наличии исключения ActionTimeoutException? - PullRequest
0 голосов
/ 04 июня 2018

При выполнении теста (с Citrus или нет) может возникнуть исключение, если тест ожидает сообщение в очереди, но сообщение не получено до истечения времени ожидания.

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

К сожалению, цитрусовые не отображают эту информацию.

Вот мой код:

@Test
@CitrusTest
public void testFail() {
    sequential().actions(
            mycheckNoError1(),
            mycheckNoError2(),
            mycheckNoError3(), //this one fails , we want to know it and which line throws the ActionTimeoutException
            mycheckNoError4()
    );
}

protected AbstractActionContainer mycheckNoError3() {
    AbstractActionContainer aCatch = catchException().exception(ActionTimeoutException.class)
            .when(receive("for_soap_q")
                    .timeout(100L)
                    .validationCallback(validationCallbackFunc()
                    ))
            .addTestAction(timeoutException(Thread.currentThread().getStackTrace()));

    return aCatch;
}

А вот стек трассировки цитрусовых, который не показывает строку, которая выдает исключение:

...
INFO  .c.r.LoggingReporter| 
ERROR .c.r.LoggingReporter| TEST FAILED MyTest.test <package.test> Nested exception is: 
com.consol.citrus.exceptions.ActionTimeoutException: Action timed out while receiving JMS message on 'testQueue'
at com.consol.citrus.jms.endpoint.JmsConsumer.receive(JmsConsumer.java:95) ~[citrus-jms-2.7.5.jar:na]
at com.consol.citrus.jms.endpoint.JmsConsumer.receive(JmsConsumer.java:60) ~[citrus-jms-2.7.5.jar:na]
at com.consol.citrus.jms.endpoint.JmsSyncConsumer.receive(JmsSyncConsumer.java:60) ~[citrus-jms-2.7.5.jar:na]
...

Единственный способЯ обнаружил, что должен был передать stacktrace как параметр метода timeoutException (), который я написал:

private TestAction timeoutException(StackTraceElement[] methodName) {
    System.out.println("++++++++++  timeout Exception at line " + methodName[1].getLineNumber() + " in method: [" + methodName[1].getMethodName() + "]");
    return null;
}

Но я думаю, что есть лучший способ сделать это.

Есть ли способправильно настроить citrus и / или переопределить LoggingReporter, чтобы показать номер строки, из-за которой произошло исключение?

(в данном случае это строка: когда (приём ("for_soap_q") ...)

спасибо.

1 Ответ

0 голосов
/ 11 июня 2018

Вы можете перезаписать репортер Logging по умолчанию, поместив компонент с именем 'loggingReporter' в контекст приложения Spring.В дополнение к этому вы можете добавлять собственных репортеров и тестовых слушателей при выборе разных имен бинов.Просто добавьте настраиваемые прослушиватели в контекст приложения Spring, и они получат тестовые события и генерируемые ошибки для отчетов.

Также убедитесь, что вы используете свободный API TestRunner вместо свободного API TestDesigner.Конструктор немного более понятен, но бегун сразу же выполнит тестовые действия при создании тестового примера с использованием свободно распространяемого API.Таким образом, вы получите более подробные трассировки стека с правильными номерами строк и возможностью устанавливать точки останова для лучшей отладки.

...