恐怕这个问题没有一个简单的答案,因为量角器在使用任何自定义插件时会覆盖报告文件。但以下两个对我有用。
选择最适合您的
1) 修补 Jasmine2HtmlReporter 的“index.js”以附加文件而不是 PhantomJs 覆盖其使用
2) 通过从 onPrepare() 函数配置 Jasmine2HTML 报告器来生成独特的 HTML 报告,并在以后合并所有报告
解决方案 1:Jasmine2HtmlReporter 的当前代码库 -index.js
使用两个函数 -phantomWrite()
& nodeWrite()
写入数据。参考here
我创建了一个新函数 -appendwrite()
追加而不是覆盖并修改代码以获取此功能
查看我的 github 代码 fork量角器-jasmine2-html-reporter
function appendwrite(path, filename, text){
var fs = require("fs");
var nodejs_path = require("path");
require("mkdirp").sync(path); // make sure the path exists
var filepath = nodejs_path.join(path, filename);
fs.appendFileSync(filepath,text)
return;
}
并修改self.writeFile
'node_modules/protractor-jasmine2-html-reporter/index.js' 中的函数来获取新函数
try {
appendwrite(path, filename, text);
//phantomWrite(path, filename, text);
return;
} catch (e) { errors.push(' PhantomJs attempt: ' + e.message); }
try {
nodeWrite(path, filename, text);
return;
} catch (f) { errors.push(' NodeJS attempt: ' + f.message); }
并注释下面的代码,该代码会清除新运行的报告,以便您不会看到任何错误清除错误 -清理代码
rmdir(self.savePath);
解决方案 2:通过在 OnPrepare 函数中配置 Jasmine 报告器,根据并行实例的 sessionID 生成单独的报告
onPrepare: function() {
return new Promise(function (fulfill, reject) {
browser.getCapabilities().then(function (value) {
reportName = value.get('webdriver.remote.sessionid') + '_' + value.get('browserName') + '_' + Math.floor(Math.random()*1E16);
jasmine.getEnv().addReporter(
new Jasmine2HtmlReporter({
savePath: 'target/',
screenshotsFolder: 'images',
consolidate: true,
consolidateAll: true,
filePrefix: reportName + ".html"
})
);
fulfill();
})
});
},
步骤 2:完成完整测试并关闭所有 Webdriver 会话后,在 afterLaunch() 方法中合并跨并行实例生成的报告
afterLaunch: function afterLaunch() {
var fs = require('fs');
var output = '';
fs.readdirSync('target/').forEach(function(file){
if(!(fs.lstatSync('target/' + file).isDirectory()))
output = output + fs.readFileSync('target/' + file);
});
fs.writeFileSync('target/ConsolidatedReport.html', output, 'utf8');
},
您还将看到生成的报告类似于下面的一份 ConsolidatedReport
PS:请忽略任何拼写错误和语法错误。这仅作为示例,可以定制
我之前已经回答过这个问题当使用 'shardTestFiles': true 在conf文件中共享测试时,protractor-jasmine2-html-reporter不会合并所有测试的结果