Как увеличить время ожидания при ожидании асинхронного действия цитрусовых? - PullRequest
0 голосов
/ 28 декабря 2018

Я использую цитрус для тестирования процесса, который вызывает обратный вызов после выполнения нескольких шагов.У меня работает следующая последовательность:

  • -> httpClient kicks process
  • <- SUT отвечает OK </li>
  • <-> Несколько дополнительных шагов
  • <- SUT вызывает httpServer </li>
  • -> httpServer отвечает OK

Сейчас я пытаюсь сделать его более универсальным, используя асинхронный контейнер citrus для ожидания вызова SUT в// к выполнению дополнительных шагов.

  • async (

    • <- SUT вызывает httpServer </li>
    • -> httpServer отвечает OK)
  • -> процесс httpClient kicks

  • <- SUT отвечает OK </li>
  • <-> Несколько дополнительных шагов

Проблема, с которой я сталкиваюсь, заключается в том, что после выполнения последних дополнительных шагов асинхронный контейнер, кажется, не ожидает достаточно долго, чтобы мое SUT вызвало его.Кажется, он ожидает максимум 10 секунд.

См. Ниже вывод и фрагмент кода (без дополнительных шагов, чтобы упростить его)

14:14:46,423 INFO  port.LoggingReporter|
14:14:46,423 DEBUG port.LoggingReporter| TEST STEP 3/4 SUCCESS
14:14:46,423 INFO  port.LoggingReporter| 
14:14:46,423 DEBUG port.LoggingReporter| TEST STEP 4/4: echo
14:14:46,423 INFO    actions.EchoAction| VM Creation processInstanceID: 3543
14:14:46,423 INFO  port.LoggingReporter| 
14:14:46,423 DEBUG port.LoggingReporter| TEST STEP 4/4 SUCCESS
14:14:46,530 DEBUG      citrus.TestCase| Wait for test actions to finish properly ...
14:14:47,530 DEBUG      citrus.TestCase| Wait for test actions to finish properly ...
14:14:48,530 DEBUG      citrus.TestCase| Wait for test actions to finish properly ...
14:14:49,528 DEBUG      citrus.TestCase| Wait for test actions to finish properly ...
14:14:50,529 DEBUG      citrus.TestCase| Wait for test actions to finish properly ...
14:14:51,530 DEBUG      citrus.TestCase| Wait for test actions to finish properly ...
14:14:52,526 DEBUG      citrus.TestCase| Wait for test actions to finish properly ...
14:14:53,529 DEBUG      citrus.TestCase| Wait for test actions to finish properly ...
14:14:54,525 DEBUG      citrus.TestCase| Wait for test actions to finish properly ...
14:14:55,525 DEBUG      citrus.TestCase| Wait for test actions to finish properly ...
14:14:56,430 INFO  port.LoggingReporter| 
14:14:56,430 ERROR port.LoggingReporter| TEST FAILED StratusActorSSL.SRCreateVMInitGoodParamCentOST004 <com.grge.citrus.cmptest.stratus> Nested exception is: com.consol.citrus.exceptions.CitrusRuntimeException: Failed to wait for nested test actions to finish properly
at com.consol.citrus.TestCase.finish(TestCase.java:266)

Фрагмент кода

        async()
        .actions(
            http().server(extServer)
                .receive()
                .post("/api/SRResolved")
                .contentType("application/json;charset=UTF-8")
                .accept("text/plain,application/json,application/*+json,*/*"),
            http().server("extServer")
                .send()
                .response(HttpStatus.OK)
                .contentType("application/json") 
        );



    http()
        .client(extClientSSL)
        .send()
        .post("/bpm/process/key/SRCreateVMTest")
        .messageType(MessageType.JSON)
        .contentType(ContentType.APPLICATION_JSON.getMimeType())


    http()
        .client(extClientSSL)
        .receive()
        .response(HttpStatus.CREATED)
        .messageType(MessageType.JSON)
        .extractFromPayload("$.processInstanceID", "processId");

    echo(" processInstanceID: ${processId}");

1 Ответ

0 голосов
/ 29 декабря 2018

еще одно обновление ... надеюсь, это может помочь другим пользователям цитрусовых ...

Я наконец-то реализовал нужное мне поведение, используя параллельный контейнер цитрусовых, как показано ниже.Тем не менее, я оставлю этот вопрос открытым на несколько дней, так как он не отвечает на мой первоначальный вопрос ...

        parallel().actions(
        sequential().actions(
            http().server(extServer)
                .receive()
                .post("/api/SRResolved")
                .contentType("application/json;charset=UTF-8")
                .accept("text/plain,application/json,application/*+json,*/*"),
            http().server("extServer")
                .send()
                .response(HttpStatus.OK)
                .contentType("application/json") 
        ),
        sequential().actions(
            http()
                .client(extClientSSL)
                .send()
                .post("/bpm/process/key/SRCreateVMTest")
                .messageType(MessageType.JSON)
                .contentType(ContentType.APPLICATION_JSON.getMimeType())

            http()
                .client(stratusClientSSL)
                .receive()
                .response(HttpStatus.CREATED)
                .messageType(MessageType.JSON)
                .extractFromPayload("$.processInstanceID", "processId"),

            echo("VM Creation processInstanceID: ${processId}")

        )
    );

Чем больше я думаю об этом, тем больше я считаю, что это ошибка, как при использованииasync (как описано выше) Я ожидаю, что асинхронная часть (и, следовательно, тест) будет продолжаться до тех пор, пока не истечет время ожидания, указанное на http-сервере (в моем случае 60 секунд), или ожидаемый запрос будет получен от SUT, а не послепроизвольная (10 секунд) задержка после окончания не асинхронной части тестового примера, если я не пропустил что-то об особенностях и целях асинхронного контейнера.

...