所有测试完成后如何制作分片量角器测试报告(而不是每个文件)?

2023-12-11

当分片测试时(又名并行运行测试;即:shardTestFiles: true),而不是报告结果all测试完成,Protractor 报告每个测试的结果file等结束了。

有人有解决方法吗?

我尝试过使用内联plugin带挂钩teardown and postTest,但都不会改变此行为(仍然根据测试文件报告)。我也尝试过在之外设置记者onPrepare, 正如这里所建议的,但也没有喜悦。

我希望有一个简单的解决方案......但如果发现人们将结果放入数据库中,我不会感到惊讶......这也是一个可以接受的答案。


恐怕这个问题没有一个简单的答案,因为量角器在使用任何自定义插件时会覆盖报告文件。但以下两个对我有用。 选择最适合您的

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:请忽略任何拼写错误和语法错误。这仅作为示例,可以定制

enter image description here

我之前已经回答过这个问题当使用 'shardTestFiles': true 在conf文件中共享测试时,protractor-jasmine2-html-reporter不会合并所有测试的结果

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

所有测试完成后如何制作分片量角器测试报告(而不是每个文件)? 的相关文章

随机推荐