工具: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 完成怎么办?我如何使这种等待发生,或者只是不使某些测试相互依赖的最佳实践?
最佳答案
您可以在任何需要时间异步完成的测试的 done
或 beforeEach
中使用 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/