如何转换从柑橘框架中的有效载荷中提取的变量?
How to cast a variable extracted from a payload in citrus framework?
我正在使用 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));
}
在 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 才能将变量读取为 long 值。
我正在使用 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));
}
在 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 才能将变量读取为 long 值。