微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

angular – 分组测试结果:Karma / Protractor与Jenkins集成

我已经成功设置了一个Jenkins作业,该作业执行我的Karma测试(使用Angular-CLI),还有我的Protractor测试Angular4 App(使用Angular-CLI).这两个测试都将输出一个 XML文件,Jenkins将使用该文件显示结果和详细信息.

使用以下屏幕截图我的问题非常简单明了:我不能区分我的测试套件是来自我的量角器测试还是业力测试.

>红色突出显示我的量角器测试套件
>没有突出显示的是我的Karma测试套件.

Jenkins job result

因此,我问自己以下问题:

>对于通过持续集成管理今天的单元测试和端到端测试,是否有一种良好的做法?
>我是否必须在单独的Jenkins工作中分开测试?这是否意味着我需要在Jenkins管道工作流程中使用两个不同的JenkinsFiles?
>或者相反,我可以简单地为每个测试套件设置一个前缀,这样我就可以轻松管理所有内容

两个最后的选项似乎都不切实际.

编辑:关注这个问题,并在投票结束前完整阅读,因为它不是基于意见的.我将明确表示:我面临着持续集成的不切实际的实现,对问题有一个明确的定义,我希望有一个解决方案可以解决我当前的问题,如果可能的话,还有一些关于测试前端的强制实践应用程序,也可以清除此问题.

解决方法

虽然这是一个常见问题,但我认为没有最佳或良好的做法.它只取决于开发人员希望如何在构建服务器上显示测试结果.

我为您的特定用例提供了解决方案,希望能解决您的技术问题.

我自己使用Teamcity,但是我已经将它改编为与Jenkins一起使用.我已经使用Angular CLI设置了一个演示应用程序来演示.

构建服务器(如Jenkins和TeamCity)只需从结果文件(Jenkins,通常是JUnit,我将在下面演示)或stdout(TeamCity)的服务消息中读取.因此,我们可以在写入这些记录之前操作测试结果数据,这使我们能够区分业力(单位)和量角器(e2e),而无需在单独的工作上运行测试或者使用不必要的前缀膨胀测试套件.

你将需要两个额外的包,karma-junit-reporterjasmine-reporters.我们将使用karma-junit-reporter for Karma和jasmine-reporter for Protractor.

这些包允许我们在将结果写入JUnit文件之前修改套件名称,这将有助于我们区分单元和e2e.

您可以按照每个工具提供的安装说明进行操作,也可以按照以下方式执

安装karma-junit-reporter:

npm install karma-junit-reporter –save-dev

对karma.conf.js文件进行以下更改:

将karma-junit-reporter添加到plugins数组:

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-reporter:

npm install jasmine-reporters –save-dev

请注意,截至写作; Protractor的jasmine-reporter文档声明你应该运行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并添加post构建操作以发布JUnit测试结果报告,如下所示:

testresults\*.xml

您的Jenkins测试结果仪表板现在将如下所示:

Jenkins Test Results dashboard

出于本演示的目的,我未通过单元测试和e2e测试,因为您可以看到每个测试名称都有一个前缀,用于确定它是单位还是e2e.您还可以通过单击包下的链接深入查看所有e2e或所有单元测试.

如果你很勇敢并且有很多时间可以编写自己的实用程序,它可以完成与这些程序包相同的工作,从而获得更加个性化的结果.

我希望这可以帮助您实现所需的结果.

谢谢

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐