在开发Citrus测试用例(Linux上的Citrus版本2.7.2)时,我注意到方法似乎以与代码中指定的顺序不同的顺序执行。这是一个测试的例子:
@CitrusTest
public void testOrderOfMethods() throws InterruptedException {
log.info(">> Starting test");
http()
.client(wiremockClient)
.send()
.get("/__admin/requests")
.accept("application/json");
http()
.client(wiremockClient)
.receive()
.response(HttpStatus.OK)
.messageType(MessageType.JSON);
log.info(">> Test completed");
Thread.sleep(2000);
log.info(">> Waited a while");
}
此代码生成的输出是:
14:35:19 14:35:19,133 INFO citrus.Citrus|
14:35:19 14:35:19,133 INFO citrus.Citrus|
14:35:19 14:35:19,145 DEBUG t.TestContextFactory| Created new test context - using global variables: '{}'
14:35:19 14:35:19,145 INFO junk.JunkIT| >> Starting test
14:35:19 14:35:19,146 INFO junk.JunkIT| >> Test completed
14:35:21 14:35:21,146 INFO junk.JunkIT| >> Waited a while
14:35:21 14:35:21,146 INFO citrus.Citrus|
14:35:21 14:35:21,146 INFO citrus.Citrus|
14:35:21 14:35:21,146 DEBUG citrus.Citrus| STARTING TEST JunkIT.testOrderOfMethods <esb.junk>
14:35:21 14:35:21,146 INFO citrus.Citrus|
14:35:21 14:35:21,146 DEBUG citrus.TestCase| Initializing test case
因此,在Citrus http()调用之前打印3条日志行(开始测试,测试完成,等待一段时间),即使测试在“等待一段时间”之前等待2秒。
如果我将Jenkins作为Maven工作进行测试,那会发生什么。如果我在调试器中运行我的测试,则语句的顺序如源代码所示。
我的问题是:在其他代码之后以某种方式执行对Citrus的调用(可能在另一个方面)?如果是这样,我如何在Citrus测试方法中强制执行代码顺序?
答案 0 :(得分:1)
您应该在Citrus中使用TestRunner而不是TestDesigner。
设计人员将首先收集所有测试操作,构建整个测试用例并在构造结束时执行。
运行器将在Java DSL方法调用中构建时立即执行操作。
参考文档中还详细介绍了设计人员和跑步者的不同方法和策略:http://www.citrusframework.org/reference/html/#writing-test-cases-in-java