我想使用多个浏览器使用Karma运行一些测试。但是,测试是与数据库交互的集成测试(获取和更新数据)。由于在多个浏览器中运行相同的测试,因此它们都与相同的测试数据进行交互。
因此,如果测试在多个浏览器中同时运行,则一次测试可能会影响在其他浏览器中运行的其他测试。
如何在使用多个浏览器进行测试的同时限制并发浏览器的数量? (例如,将限制设置为1将导致按顺序而不是并行地为每个浏览器运行测试)
答案 0 :(得分:5)
这已在https://github.com/karma-runner/karma/pull/1646中修复并合并到0.13.2:
并发
类型:数字
默认值:无限
描述:并行启动了多少浏览器Karma。
特别是在像SauceLabs和Browserstack这样的服务上,只有一次启动有限数量的浏览器才有意义,只有在完成这些浏览器时才开始更多。使用此配置,您可以分析在任何给定时间点应该一次运行多少浏览器。
https://karma-runner.github.io/2.0/config/configuration-file.html
答案 1 :(得分:0)
只是一个粗略的想法:
karma.conf.js
文件中提示:此时您可以拥有"包装"配置为停止或继续如果正在运行的实例遇到一些错误
这段代码显示了如何加载和填充模板配置:
function getConfigTemplate(path){
var config = {
// Maybe you want to add/remove some files from the list
// based on some criteria
files: [...],
// Path of the template file
configFile: path
}
return config;
}
var template = getConfigTemplate('/path/to/the/file');
// Here I can append more stuff
template.browsers = ['Chrome']
注意:两种配置的业力中使用的合并策略如下:
- 如果属性在模板上,则直接进入最终配置
- 如果某个属性不在模板上,那么配置"包装"查找该属性的对象
- 如果你是模板上的属性并在包装器上添加更多内容,则只使用前者,后者将被忽略。
此代码可用于"链"你的业力服务器:
var currentServer = 0;
var configs = [ ... ];
function startKarmaServer(config, callback){
karma.server.start(config, function (exitCode){
if(exitCode){
// an error occurred
// stop karma!
} else {
currentServer++;
callback();
}
});
}
function startServers(){
// here some code to run the karma servers in series
}
我建议将async.js用于startServers
功能。
如果您使用较旧版本的业力(0.10
或更低版本),您可能需要查看at this fix才能在执行后关闭网络服务器。
另请注意,应该关闭Continuos Integration标志(autoWatch
)以使链接起作用。
答案 2 :(得分:0)
如果您将grunt
与grunt-karma
一起使用,我写了this task来做您想做的事。