0

我正在使用Citrus Framework创建 IT 测试。我对服务器有两个调用,一个用于创建用户,另一个用于对该用户执行某些操作。

问题:我需要创建用户请求中的一个不是字符串的值,以将其放入第二次调用的请求中。值的提取:

new SoapActionBuilder()
         .client(webServiceClient)
         .receive()
         .namespace("ns", MY_NAMESPACE)
         .extractFromPayload("//ns:someId", "someId")

然后这个someId必须用于构建下一个请求。如果它是一个字符串,它将是:

request.setSomeId("${someId}");

但它是一个 Long,所以强制转换不起作用(Citrus 稍后解析该值,并且 Long#valueOf 在那一刻执行):

request.setSomeId(Long.valueOf("${someId}"));

有什么方法可以轻松地转换该变量(可能在提取时)?

我设法使用 JavaAction 来完成它,但经常使用它非常奇怪(需要 3 行代码和一个新方法)。它是这样的:

public void test() {
    ...
    action(new JavaActionBuilder(new JavaAction().setInstance(this))
            .method("setSomeId")
            .methodArgs(request, "${someId}"));

    ...
}
public void setSomeId(Request request, String someId) {
    request.setSomeId(Long.valueOf(someId));
}
4

1 回答 1

0

在 TestDesigner 中访问测试变量对象的最佳方式是在测试操作中这样做。Citrus 测试设计师有一个设计时间,用于构建完整的测试用例。稍后在运行时执行测试并将您的 XPath 表达式评估为测试变量。所以你可以像这样添加一个新的测试动作:

action(new AbstractTestAction() {
    @Override
    public void doExecute(TestContext context) {
        Long someId = Long.valueOf(context.getVariable("someId"));
        // do something with someId
    }
}

与此相反,您可以使用没有单独设计时间的 Citrus TestRunner。但是,您必须访问 Citrus TestContext 才能将变量读取为长值。

于 2016-10-20T06:54:33.190 回答