工具:Protractor 3.3.0、Jasmine 2.4.1、Selenium Standalone Server。

我有一个测试套件,里面有大量的 spec.js 文件,每个文件都包含我的应用程序的独特测试。

我正在使用 maxInstances shardTestFiles 浏览器功能来启动 3 个浏览器并运行每个规范文件以减少整个套件的运行时间(3 个浏览器的运行时间约为 20 分钟......所以没有它可能会推倒一小时)。

我的问题是如何告诉 Protractor 在执行之前让规范文件等待另一个规范文件的完成。例如:

假设我有一个 第 1 页 测试 和我有规范文件 a1.spec a2.spec a3.spec 然后我有一些其他类似结构的测试或什么。

当我用 3 个浏览器实例启动 Protractor 时,正如预期的那样, a1.spec a2.spec a3.spec 都用它们自己的浏览器实例启动,因为它是 1:1 的比例。但是如果 a3.spec 不能运行,除非 a2.spec 完成怎么办?我如何使这种等待发生,或者只是不使某些测试相互依赖的最佳实践?

最佳答案

您可以在任何需要时间异步完成的测试的 donebeforeEach 中使用 it 回调。在您等待的测试完成之前,不会运行任何后续测试。

在每个示例之前

beforeEach(function(done) {
    setTimeout(function() {
        value = 0;
        done();
    }, 1);
});

例子
it("should support async execution of test preparation and expectations", function(done) {
    value++;
    expect(value).toBeGreaterThan(0);
    done();
});

这将根据您的需要排队,但测试将连续运行。为了加快速度,您可以使用 Promises 和 when/guard 但这可能会使事情变得过于复杂。

关于jasmine - 在运行另一个之前等待特定的规范文件执行 - Jasmine/Protractor,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37818204/

10-12 17:26