我在我的项目中使用 BDD (Behat) 进行功能测试。现在我在测试具有太多后台作业的功能时遇到了问题。例子:
Scenario: Import issue at the first time
Given I have a issue package "1602.zip"
When I upload issue "1602.zip"
Then I have to wait until it is finished
And I can see list of articles are imported
And status of issue is "1"
“然后我必须等到它完成”包含:
- 服务器 1 收到上传的文件,将一些元数据插入数据库并将状态标记为“正在导入”,然后将 zip 文件上传到 s3
- 服务器 2 从 s3 下载文件并处理诸如 PDF、图像之类的资产,然后在处理后压缩所有内容并再次上传到 s3。
- 服务器 3 从 s3 下载结果 zip 包(由服务器 2 完成),并开始导入问题(导入 pdf、图像、文章...)
“我可以看到文章列表已导入”是我调用一个 API 到服务器以获取该问题的文章列表。
如您所见,因为在导入期间,我们有太多后台作业(使用 Resque),所以我必须通过检查问题状态等到它完成:
while ($status != 1) {
$status = getStatusOfIssue(123);
if (1 === $status) {
break;
}
}
问题是我不知道要等多久,因为这取决于问题包的大小,大小越大等待的时间越长。那么在这种情况下,我该怎么办呢?