Как ввести TestContext, используя TestRunner и огурец - PullRequest
0 голосов
/ 25 мая 2018

Я тестирую службы REST с использованием Citrus Java DSL.Я хотел бы сохранить данные из ответа для предварительных операций.Согласно документации, для этих целей я должен использовать тестовый контекст Citrus.

Я пытался внедрить TestContext с аннотацией CitrusResource:

@CitrusResource
private TestRunner runner;

@CitrusResource
private TestContext context;


@When("^service sends request to get all orders$")
public void get_Orders() {
    runner.http(action -> action.client(httpClientName)
            .send()
            .get(basePath));   
}

@Then("^Service gets response with preflight id: \"([^\"]*)\"$")
public void verify_Orders(String preflightId) {
        runner.http(action -> action.client(httpClientName)
            .receive()
            .response(HttpStatus.OK)
            .contentType("application/json;charset=UTF-8")
            .extractFromPayload("$[*].styleId", "ids")
            .validate("$[*].styleId", everyItem(not(isEmptyOrNullString())))
            .validate("$[*].styleId", hasItem(preflightId)));

    String ids = context.getVariable("${ids}", String.class);
}

Но получил исключение Null Pointer

1 Scenarios (1 failed)
4 Steps (1 failed, 1 skipped, 2 passed)
0m5.541s

java.lang.NullPointerException

Кроме того, я пытался создать новый TestContext в требуемом методе

@CitrusResource
private TestRunner runner;

@CitrusResource
private TestContext context;


@When("^service sends request to get all orders$")
public void get_Orders() {
    runner.http(action -> action.client(httpClientName)
            .send()
            .get(basePath));   
}

@Then("^Service gets response with preflight id: \"([^\"]*)\"$")
public void verify_Orders(String preflightId) {
TestContext context = new TestContext();
        runner.http(action -> action.client(httpClientName)
            .receive()
            .response(HttpStatus.OK)
            .contentType("application/json;charset=UTF-8")
            .extractFromPayload("$[*].styleId", "ids")
            .validate("$[*].styleId", everyItem(not(isEmptyOrNullString())))
            .validate("$[*].styleId", hasItem(preflightId)));

    String ids = context.getVariable("${ids}", String.class);
}

И получил

com.consol.citrus.exceptions.CitrusRuntimeException: Unknown variable 'ids'

    at com.consol.citrus.context.TestContext.getVariableObject(TestContext.java:158)
    at com.consol.citrus.context.TestContext.getVariable(TestContext.java:133)
    at com.consol.citrus.context.TestContext.getVariable(TestContext.java:122)

Не могли бы вы помочь мне с этим?

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

По неизвестной причине аннотация @CitrusResource не внедряет экземпляр TestContext в поле.Вы можете использовать обходной путь ниже.

Сначала вам нужно создать и ввести цитрусовый экземпляр.

@ CitrusFramework private Citrus citrus;

А затем:

testContext = citrus.createTestContext ();

0 голосов
/ 25 мая 2018

Я не знаком с Citrus и не уверен, на какую документацию вы ссылаетесь.Чтобы разделить состояние между шагами в Cucumber-jvm, рекомендуется использовать Dependency Injection (DI).Существует несколько опций для DI с Cucumber, включая Spring, Guice и PicoContainer.Последний представляет собой облегченную структуру DI, которая, вероятно, является наилучшим вариантом, если вы не используете другую структуру DI.

...