工具:Protractor 3.3.0,Jasmine 2.4.1,Selenium Standalone Server。
我有一个测试套件,其中包含大量spec.js文件,每个文件都包含我的应用程序的唯一测试。
我正在使用 maxInstances 和 shardTestFiles 浏览器功能启动3个浏览器并运行每个spec文件以减少整个套件的运行时间(使用3个浏览器它在大约20分钟..所以没有它可能超过一个小时)。
我的问题是如何告诉Protractor在执行之前让spec文件等待另一个spec文件的完成。例如:
假设我有一个 Page 1测试,我有spec文件 a1.spec , a2.spec 和 a3 .spec 然后我还有一些类似结构的测试或者你有什么。
当我按照预期推出具有3个浏览器实例的量角器时, a1.spec , a2.spec 和 a3.spec 全部启动与他们自己的浏览器实例,因为它是1:1的比例。但是如果除 a2.spec 完成之外 a3.spec 无法运行怎么办?我如何使这种等待发生,或者仅仅是不使某些测试相互依赖的最佳做法?
答案 0 :(得分:0)
您可以在任何需要时间异步完成的测试的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,但这可能会使事情变得太复杂。