Bri*_*ine 4 jasmine protractor
当分片测试(也称为并行运行测试;即:)shardTestFiles: true时,Protractor 不会在所有测试完成时报告结果,而是在完成时报告每个文件的结果。
有没有人有解决方法?
我试过使用带有钩子和的内联插件,但都没有改变这种行为(仍然是每个测试文件报告)。我也尝试设立的记者外,这里建议,而且,没有喜悦。teardownpostTestonPrepare
我希望有一个简单的解决方案......但我不会惊讶地发现人们将他们的结果放入数据库......也是一个可以接受的答案。
恐怕对此没有简单的答案,因为量角器在使用任何自定义插件时会覆盖报告文件。但以下两个对我有用。选择最适合您的
1) 使用 Jasmine2HtmlReporter 的“index.js”修补文件以附加文件而不是 PhantomJs 覆盖其使用
2) 通过从 onPrepare() 函数配置 Jasmine2HTML 报告器生成唯一的 HTML 报告,然后合并所有报告
解决方案 1:Jasmine2HtmlReporter 的当前代码库 -index.js使用两个函数 - phantomWrite()&nodeWrite()写入数据。参考这里
我创建了一个新函数 -appendwrite()附加而不是覆盖并修改了代码以获取此函数查看我的 github 代码从protractor-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); }
并注释以下用于清除新运行报告的代码,以便您看不到任何错误清除错误 - CleanUpCode
rmdir(self.savePath);
Run Code Online (Sandbox Code Playgroud)
解决方案 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:请忽略任何拼写错误和语法错误。这只是作为一个例子,可以定制
我之前在protractor-jasmine2-html-reporter 上有答案,当使用 'shardTestFiles': true in conf file 共享测试时,不会合并所有测试的结果
| 归档时间: |
|
| 查看次数: |
2549 次 |
| 最近记录: |