3

我在我的项目中使用 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;
    }
}

问题是我不知道要等多久,因为这取决于问题包的大小,大小越大等待的时间越长。那么在这种情况下,我该怎么办呢?

4

1 回答 1

1

作为一般做法,您需要使用条件等待来检查您知道的内容(等待几秒钟直到)。

条件可能是:
- 请求状态
-页面中
显示元素 - 不显示页面/元素

提示:您应该避免只使用while循环并使用do-while循环来代替您需要的 2 个条件,在您的情况下检查状态,如果第一个条件从未像计数一样完成,则将中断循环。

于 2016-11-16T10:20:52.697 回答