云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

负载均衡_华为手机怎么看云相册_12月免费

小七 141 0

xUnit和管道

JUnit插件是许多Jenkins项目的测试结果报告器,但它不是唯一可用的。xUnit插件是一个可行的替代方案,它支持JUnit和许多其他测试结果文件格式说明编号无论项目如何,您都需要收集和报告测试结果。JUnit是最广泛支持的记录测试结果的格式之一。对于测试稳定且框架可以生成JUnit输出的场景,JUnit插件非常适合在Jenkins中报告结果。它将使用来自指定文件或路径的结果,创建一个报告,如果发现测试失败,它会将作业状态设置为"不稳定"或"失败"。如果您的项目有一些失败的测试需要一些时间来修复,或者如果有一些不可靠的测试,那么JUnit插件对测试失败的简单看法可能很难奏效有。没有问题,Jenkins插件模型允许我们用另一个插件的类似功能替换JUnit插件功能,而Jenkins管道允许我们以安全的逐步方式来完成这项工作,在这里我们可以测试和调试我们的每一个插件变化。在这个帖子,我将向您展示如何用管道代码中的xUnit插件替换JUnit插件,以解决一些常见的测试报告问题场景。初始设置我要用"JS-夜视.js"我上一篇文章中的示例项目演示了xUnit更好地处理的几个常见场景。我已经在我的Jenkins服务器上安装了最新的JUnit插件和xUnit插件-夜视.js"GitHub上的示例项目,在"博客/xunit"下分支。这里上一篇文章结尾的Jenkinsfile是什么样子的,运行几次之后报告页面是什么样子的://Jenkinsfile节点{阶段"构建"检出scm//安装依赖项sh"npm安装""测试"阶段//添加酱汁凭证酱汁('f0a6b8ad-ce30-4cba-bf9a-95afbc470a8a'){//启动sauce connectsauceconnect(选项:"",useGeneratedTunnelIdentifier:false,verboseLogging:false){//我们将测试的浏览器配置列表。def平台配置=["铬","火狐","ie",'边缘'].join(',')// 夜视.js支持颜色输出,因此将此步骤包装为ansi颜色:'buildiClorWrap''''ColorWrap','{//使用运行硒测试夜视.js//忽略错误代码。junit发布者将介绍如何设置构建状态。{124bin/..u/夜间监控模块}junit'reports/**'步骤([$class:'saucondemandtestpublisher'])}}}从JUnit切换到xunti将首先在我的管道中将JUnit替换为xUnit。我使用代码段生成器创建具有正确参数的步骤。使用xUnit插件的主要缺点是,虽然它与管道兼容,但它仍然使用更详细的step()语法,并且在这方面也有一些非常粗糙的地方。我已经提交了JENKINS-37611文件,但同时,我们将使用我们现有的文件。//原始的JUnit步骤junit'reports/**'//等效xUnit步骤生成(重新格式化)步骤([$class:'XUnitBuilder',testTimeMargin:'3000',thresholdMode:1,阈值:[[$class:"FailedThreshold",failureNewThreshold:"",FailureReshold:"",unstableNewThreshold:"",unstableThreshold:"1"],[$class:"SkippedThreshold",failureNewThreshold:"",FailureReshold:"",unstableNewThreshold:"",unstableThreshold:""],工具:[[$class:'JUnitType',deleteOutputFiles:false,failIfNotNew:false,模式:'reports/**',skipNoTestFiles:false,stopProcessingIfError:true]]])//等效xUnit台阶-清洁步骤([$class:'XUnitBuilder','shotableThresholds','FailedThresholds:'未阈值'[$,工具:[[[$class:'JUnitType',模式:'reports/**']]])如果我用上面的最后一个步骤替换jenkins文件中的junit步骤,它将生成一个与junit插件相同的报告和作业结果,但使用的是xUnit插件。容易的!节点{阶段"构建"// ... 剪。。。"测试"阶段//添加酱汁凭证酱汁('f0a6b8ad-ce30-4cba-bf9a-95afbc470a8a'){//启动sauce connectsauceconnect(选项:"",useGeneratedTunnelIdentifier:false,verboseLogging:false){// ... 剪。。。//junit'reports/**'步骤([$class:'XUnitBuilder',阈值:[[$class:"FailedThreshold",不稳定阈值:"1"]],工具:[[[$class:'JUnitType',模式:'reports/**']]])// ... 剪。。。}}}接受基线大多数项目并不是以通过甚至运行自动化测试开始的。他们从黑客攻击和原型设计开始,最终他们开始编写测试。在编写新测试时,签入测试、运行和失败可能是有价值的信息。有了xUnit插件,我们可以接受失败案例的基线,并随着时间的推移降低这个数量。当我运行带有此更改的作业时,报告的数字保持不变,但是作业通过了。//Jenkinsfile//jenkins文件的其余部分没有变化。//只有xUnit step()调用被修改。步骤([$class:'XUnitBuilder',阈值:[[$class:'FailedThreshold',FailureReshold:'4']],工具:[[[$class:'JUnitType',模式:'reports/**']]])接下来,我还可以检查插件是否报告作业失败,如果更多失败发生。因为这是示例代码,我将添加另一个失败的测试并检查jobreports为failed//tests/吉尼皮格.js// ... 剪。。。"几内亚猪断言标题0-D":函数(客户端){/*。。。*/ },"几内亚猪断言标题0-E":函数(客户端){客户.url('https://saucelabs.com/test/几内亚猪').waitForElementVisible('正文',1000)//.断言.标题("我是一个页面标题-沙司实验室");.断言.标题('我是一个页面标题-沙司实验室-导致失败');},afterEach:function(client,done){/*。。。*/ }// ... 剪。。。在一个实际的项目中,我们会对一些提交进行修复,从而降低失败的数量并调整基线。自这是一个示例,我将使所有测试都通过,并将失败和跳过的案例的作业失败阈值设置为零。//Jenkinsfile//jenkins文件的其余部分没有变化。//只有xUnit step()调用被修改。步骤([$class:'XUnitBuilder',阈值:[[$class:'SkippedThreshold',failureReshold:'0'],[$class:'FailedThreshold',failureReshold:'0']],工具:[[[$class:'JUnitType',模式:'reports/**']]])//测试/吉尼皮格.js// ... 剪。。。"几内亚猪断言标题0-D":函数(客户端){/*。。。*/ },"几内亚猪断言标题0-E":函数(客户端){客户.url('https://saucelabs.com/test/几内亚猪').waitForElementVisible('正文',1000).断言.标题("我是一个页面标题-沙司实验室");},afterEach:function(client,done){/*。。。*/ }// ... 剪。。。//测试/吉尼皮格1.js// ... 剪。。。"豚鼠断言标题1-A":函数(客户端){客户.url('https://saucelabs.com/test/几内亚猪').waitForElementVisible('正文',1000).断言.标题("我是一个页面标题-沙司实验室");},// ... 剪。。。考虑到薄片我们都知道每十个工作中有一个薄片测试失败的挫折感。您希望使其保持活动状态,以便能够隔离问题的根源,但也不希望破坏CI管道的稳定性或拒绝实际上正常的提交。你可以把测试转移到一个单独的工作,运行"片状"测试,但以我的经验,这只会导致一个工作总是处于失败状态,以及一堆没有人看到的片状测试在。和xUnit插件,我们可以在主测试套件中保留薄片测试,但仍允许作业通过。运行几次后,可以看到测试间歇性失败,导致作业失败。//测试/guinepaigflaky.js//新测试文件:测试/guinepaigflaky.jsvar https=require('https');var SauceLabs=需要("SauceLabs");模块.导出= {'@tags':['guinepaig'],"豚鼠薄片断言标题0":函数(客户端){var expectedTitle='我是一个页面标题-沙司实验室';//每五分钟失败一次如果(数学地板(日期。现在()/(1000*60))%5===0){expectedTitle+="-导致失败";}客户.url('https://saucelabs.com/test/几内亚猪').waitForElementVisible('正文',1000).断言.标题(预期标题);}afterEach:函数(客户端,完成){客户机.客户端();setTimeout(函数(){完成();},1000);}};我几乎可以听到我的队友们沮丧地尖叫报告给允许特定的测试不稳定,但不允许其他测试,我将在应该稳定的套件中添加一个"套件已完成"测试,并在其上保留薄片测试拥有。那么我会告诉xUnit允许一些失败的测试,但是不能跳过一个。如果任何测试除了我允许的失败之外,它还将导致一个或多个跳过的测试并使构建失败。//Jenkinsfile//jenkins文件的其余部分没有变化。//只有xUnit step()调用被修改。步骤([$class:'XUnitBuilder',阈值:[[$class:'SkippedThreshold',failureReshold:'0'],//允许出现大量故障//保持这一临界值,以保证绝对失败//仍然无法完成构建[$class:'FailedThreshold',failureReshold:'10']],工具:[[$clas