Citrus测试用例中的代码执行顺序是什么

时间:2017-10-31 13:52:31

标签: citrus-framework

在开发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测试方法中强制执行代码顺序?

1 个答案:

答案 0 :(得分:1)

您应该在Citrus中使用TestRunner而不是TestDesigner。

设计人员将首先收集所有测试操作,构建整个测试用例并在构造结束时执行。

运行器将在Java DSL方法调用中构建时立即执行操作。

参考文档中还详细介绍了设计人员和跑步者的不同方法和策略:http://www.citrusframework.org/reference/html/#writing-test-cases-in-java