citrus waitFor()。condition()语句在与ftpServer一起使用时不等待

时间:2017-10-24 20:55:43

标签: citrus-framework

我尝试使用柑橘框架来测试在FTP服务器上写入一些文件的集成。

我需要等到某个文件上传到ftp(我使用waitFor().condition()语句完成该操作),然后接收发送的消息并做一些断言。

import com.consol.citrus.annotations.CitrusTest;
import com.consol.citrus.condition.Condition;
import com.consol.citrus.context.TestContext;
import com.consol.citrus.dsl.testng.TestNGCitrusTestDesigner;
import com.consol.citrus.ftp.server.FtpServer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ActiveProfiles;
import org.testng.annotations.Test;

import java.io.File;

@ActiveProfiles(value = "ftpTest")
@Test
public class FtpTest extends TestNGCitrusTestDesigner {
    @Autowired
    FtpServer ftpServer;
    @Autowired
    TestContext context;

    @CitrusTest(name = "ftpTest")
    public void ftpTest() {

        // here I start my integration that uses a cron to upload the file
        // this code is irrelevant for the example

        Condition waitUntilFileIsUploaded = new Condition() {
            @Override
            public String getName () {
                return "Check files on FTP";
            }

            @Override
            public boolean isSatisfied (TestContext testContext){
                return new File("/tmp/foo_dir").listFiles().length != 0;
            }

            @Override
            public String getSuccessMessage (TestContext testContext){
                return "Files found in FTP!";
            }

            @Override
            public String getErrorMessage (TestContext testContext){
                return "No file was found in FTP";
            }
        };

        waitFor().condition(waitUntilFileIsUploaded).seconds(120L).interval(500L);
        ftpServer.createConsumer().receive(context);
    }
}

当我尝试运行此测试时,似乎永远不会执行waitFor(),并且在将任何文件上传到FTP之前执行ftpServer.createConsumer().receive(context);

这是我得到的错误:

ftpTest>TestNGCitrusTest.run:57->TestNGCitrusTest.run:111->TestNGCitrusTestDesigner.invokeTestMethod:73->TestNGCitrusTest.invokeTestMethod:133->ftpTest:49 » ActionTimeout

知道如何解决这个问题吗? 此外,任何使用带有Citrus的FTP Java DSL的完整示例都非常受欢迎!

1 个答案:

答案 0 :(得分:1)

请使用测试设计师接收方法,而不是自己创建消费者。

receive(ftpServer)
       .header("some-header", "some-value")
       .payload("some payload");

只有这样,测试设计人员才能按正确的顺序安排测试操作。这是因为测试设计者首先构造完整的测试操作逻辑,并且在测试方法的最后执行。

作为替代方案,您也可以使用测试运行器而不是测试设计器。跑步者将立即执行每个测试操作,让您有机会像以前一样添加自定义语句。