虽然这是一个常见问题,但我认为没有最佳或好的做法。这仅取决于开发人员希望如何在构建服务器上显示测试结果。
我为您的特定用例提供了一个解决方案,希望能解决您的技术问题。
我自己使用 Teamcity,但我也将其调整为与 Jenkins 一起使用。我已经使用 Angular CLI 设置了一个演示应用程序进行演示。
构建 Jenkins 和 TeamCity 等服务器只需从结果文件(Jenkins,通常是 JUnit,我将在下面演示)或通过标准输出 (TeamCity) 读取服务消息。因此,我们可以在写入这些记录之前操作测试结果数据,这使我们能够区分 karma(单位)和量角器(e2e),而无需在单独的作业上运行测试或使用不必要的前缀使测试套件膨胀.
您将需要两个额外的包,karma-junit-reporter 和 jasmine-reporters。我们将对 Karma 使用 karma-junit-reporter,对 Protractor 使用 jasmine-reporters。
这些包允许我们在将结果写入 JUnit 文件之前修改套件名称,这将帮助我们区分 unit 和 e2e。
您可以按照每个工具提供的安装说明或按照我的以下实现:
安装 karma-junit-reporter:
npm install karma-junit-reporter --save-dev
对您的 karma.conf.js 文件进行以下更改:
将 karma-junit-reporter 添加到插件数组中:
require('karma-junit-reporter')
将 junit 添加到记者数组中:
reporters: ['progress', 'kjhtml', 'junit']
使用以下内容添加一个 junitReporter 对象:
junitReporter: {
outputDir: 'testresults',
outputFile: 'karmatest.xml',
suite: 'unit', // whichever prefix you wish to use
useBrowserName: false,
}
安装 jasmine-reporters:
npm install jasmine-reporters --save-dev
请注意,截至发稿时; Protractor 的 jasmine-reporters 文档指出您应该运行 npm install --save-dev jasmine-reporters@^2.0.0 - 但是这会导致没有异常处理的问题。我建议安装最新的。
在protractor.conf.js文件的onPrepare函数中加入如下代码:
var jasmineReporters = require('jasmine-reporters');
return browser.getProcessedConfig().then(function (config) {
var junitReporter = new jasmineReporters.JUnitXmlReporter({
consolidateAll: true,
savePath: 'testresults',
filePrefix: 'protractor-test-results',
modifySuiteName: function (generatedSuiteName, suite) {
return 'e2e.' + generatedSuiteName; // whichever prefix you wish to use
}
});
jasmine.getEnv().addReporter(junitReporter);
});
您现在应该配置您的 Jenkins 作业以运行 ng test、ng e2e 并添加构建后操作以发布 JUnit 测试结果报告,如下所示:
测试结果\*.xml
您的 Jenkins 测试结果仪表板现在将如下所示:
出于本演示的目的,我没有通过单元测试和 e2e 测试,因为您可以看到每个测试名称都有一个前缀来确定它是 unit 还是 e2e。您还可以通过单击包下的链接深入了解所有 e2e 或所有单元测试。
如果您有勇气并且有大量时间,您可以编写自己的实用程序,该实用程序与这些软件包完成相同的工作,以获得更个性化的结果。
我希望这可以帮助您实现所需的结果。
谢谢