Citrus-Framework: условная проверка в зависимости от кода состояния - PullRequest
0 голосов
/ 06 февраля 2020

Я оцениваю citrus-framework для тестирования в черном ящике службы отдыха.

есть ли способ с java DSL и условным контейнером для проверки в зависимости от кода состояния?

       http(httpActionBuilder -> httpActionBuilder
                .client(sutClient)
                .receive()
                .response()
                .messageType(MessageType.JSON)
                .extractFromPayload("$.", "operationReponse")
                .extractFromHeader(HttpMessageHeaders.HTTP_STATUS_CODE, "statusCode"));

        conditional().when("${statusCode} = 200").actions(
                // how to validate on ${operationResponse} ??
                .validate("$.field1", "${expectedUUID}")
                .validate("$.elements[0].result", "APPROVED")
        );

        conditional().when("${statusCode} = 301").actions(
                // how to extract from a variable ${operationResponse}  ?? 
                extractFromPayload("$.pollUrl", "idToGet");
                http(hab -> hab.client(sutClient).send().get("/v1/myendpoint"));
                http(hab -> hab.client(sutClient).receive().response(HttpStatus.OK)
                .messageType(MessageType.JSON)
                .validate("$.field1", "${expectedUUID}")
                .validate("$.elements[0].result", "APPROVED")

        );

в конечном итоге хотел бы создать поведение для повторного использования в различных тестовых случаях.

1 Ответ

0 голосов
/ 18 февраля 2020

Здесь вам нужно сохранить полученный Http-ответ в локальном хранилище сообщений для последующей проверки. Вместо извлечения полезной нагрузки в переменную вы можете добавить имя для полученного сообщения:

http(httpActionBuilder -> httpActionBuilder
                .client(sutClient)
                .receive()
                .response()
                .messageType(MessageType.JSON)
                .name("operationResponse")
                .extractFromHeader(HttpMessageHeaders.HTTP_STATUS_CODE, "statusCode"));

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

echo("citrus:message(helloMessage.payload())")

Для более сложной логики c я бы добавил пользовательское тестовое действие и получил бы доступ к хранилищу сообщений, чтобы загрузить сообщение по его имени:

action(new AbstractTestAction() {
    @Override
    public void doExecute(TestContext context) {
        // do something with stored message
        Message message = context.getMessageStore().getMessage("operationResponse"); 
    }
})

Кстати, я заметил опечатку в вашем примере кода, где вы используйте «operationReponse» и «operationResponse».

...