gpt4 book ai didi

java - 如何使用 TestRunner 和 cucumber 注入(inject) TestContext

转载 作者:行者123 更新时间:2023-12-02 11:12:30 27 4
gpt4 key购买 nike

我正在使用 Citrus Java DSL 测试 REST 服务。我想保存响应中的数据以进行高级操作。根据文档,我应该使用 Citrus 测试上下文来实现此目的。

我尝试使用 CitrusResource 注释注入(inject) 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) {
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);
}

但出现空指针异常

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)

你能帮我解决一下吗?

最佳答案

我不熟悉 Citrus,并且不确定您指的是哪个文档。要在 Cucumber-jvm 中的步骤之间共享状态,建议使用依赖注入(inject) (DI)。使用 Cucumber 进行 DI 有多种选择,包括 Spring、Guice 和 PicoContainer。后者是一个轻量级 DI 框架,如果您不使用不同的 DI 框架,这可能是最好的选择。

关于java - 如何使用 TestRunner 和 cucumber 注入(inject) TestContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50524697/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com