0

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

4

1 回答 1

2

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

设计者首先会收集所有的测试动作,构建整个测试用例,并在构建结束时执行。

运行器将立即执行在 Java DSL 方法调用中构造的动作。

参考文档中也更详细地描述了设计者和跑步者的不同方法和策略:http ://www.citrusframework.org/reference/html/#writing-test-cases-in-java

于 2017-10-31T19:15:00.743 回答