我尝试使用柑橘框架来测试在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的完整示例都非常受欢迎!
答案 0 :(得分:1)
请使用测试设计师接收方法,而不是自己创建消费者。
receive(ftpServer)
.header("some-header", "some-value")
.payload("some payload");
只有这样,测试设计人员才能按正确的顺序安排测试操作。这是因为测试设计者首先构造完整的测试操作逻辑,并且在测试方法的最后执行。
作为替代方案,您也可以使用测试运行器而不是测试设计器。跑步者将立即执行每个测试操作,让您有机会像以前一样添加自定义语句。