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

Bri*_*ine 4 jasmine protractor

当分片测试(也称为并行运行测试;即:)shardTestFiles: true时,Protractor 不会在所有测试完成时报告结果,而是在完成时报告每个文件的结果。

有没有人有解决方法?

我试过使用带有钩子和的内联插件,但都没有改变这种行为(仍然是每个测试文件报告)。我也尝试设立的记者外,这里建议,而且,没有喜悦。teardownpostTestonPrepare

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

Adi*_*ddy 6

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

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 共享测试时,不会合并所有测试的结果