CI自动重跑失败RobotFramework测试用例(坑和解决方法)

有时自动化测试用例执行失败了, 但重跑一次又会成功。除了从脚本本身来提高稳定性,我们也希望能够自动重跑一次失败的那些用例。只要两次执行中有一次成功,我们就可以认为测试通过。这样就不要每次都在一次执行失败后都人肉去逐个检查那些失败用例了。

坑1

首先,我在网上搜索“RobotFramework重跑失败案例”的相关资料,发现有一类文章在介绍如何改写RobotFramework的源码,增加--retryN这样的参数,达到重跑N次的目的。这个可以满足我的重跑一次的需求,但是我有点想不通,这么大众化的需求,RobotFramework为什么自己还没有支持?然后,我就去读了一下pybot.bat的help文档,发现-R似乎可以支持啊!在文章(http://doc.okbase.net/henryyin/archive/99014.html)中也提到如下做法。可能之前我搜索的方向不对,或者这些文章写得比较早,RobotFramework后来才引入的?


CI自动重跑失败RobotFramework测试用例(坑和解决方法)_第1张图片

于是,本地创建2个测试脚本,一个里面做1=3的判定,一个里面做1=1的判定。然后跑了一轮之后,把1=3的判定的脚本修改成1=1,再执行一次失败的用例,并合并报告,看最后的结果是否是2个脚本都成功。实验成功!

执行的语句如下:

Pybot.bat --outputdir D:\log\round1 D:\MyTestSuites

Pybot.bat -R D:\log\round1\output.xml --outputdir D:\log\round2D:\MyTestSuites

Rebot –outputdir D:\log –merge D:\log\round1\output.xmlD:\log\round2\output.xml

第一个命令执行D:\MyTestSuites下的所有用例,将执行结果输出到D:\log\round1\下。

第二个命令,将D:\MyTestSuites里的所有测试用例中,在上个命令的输出的output.xml中失败的那些用例,再执行一遍。

第三个命令,将上面两次执行的结果合并到一个报告中。也就是说第一次执行失败的用例,如果第二次执行成功了,在报告中会显示最后结果为成功。但当然,详细信息里可以看到两次分别的结果(如下图)。


CI自动重跑失败RobotFramework测试用例(坑和解决方法)_第2张图片

坑2

本地成功后,我将如上代码放到Jenkinsjob里,希望在CI中跑自动化测试的时候应用。遗憾的是,结果失败了。从日志来看,命令二和命令三都没有跑到。

后来在Jenkins发出的email中最下方的日志信息里看到了如下的内容:

Process leaked file descriptors. Seehttps://apac01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fjenkins.io%2Fredirect%2Ftroubleshooting%2Fprocess-leaked-file-descriptors&data=02%7C01%7C%7C7ecfd570cf2e43e91e3808d5b0cd8e48%7C7851b4cc2c5c459f96d916731d6b4ca4%7C0%7C0%7C636609319263468967&sdata=gM2F8By8pMZVLzJr3NT0qksv9bBJnlNeK7uqLJFvCuc%3D&reserved=0for more information Build step 'Execute Windows batch command' marked build asfailure Robot results publisher

从这个link的回复中找到一个解决方法:用call这样的方式调用本身已经是bat的命令,如下:

call pybot.bat --outputdir D:\log\round1 D:\MyTestSuites

call pybot.bat -R D:\log\round1\output.xml --outputdir D:\log\round2 D:\MyTestSuites

rebot –outputdir D:\log –merge D:\log\round1\output.xml D:\log\round2\output.xml

坑3

执行下来发现可以跑到后面2个命令了,但是,第2个命令只跑了失败的test case,而原来我的一个test suite才是完整的一条业务流程,如果前面的成功的test case不跑,后面的test case要用的一些数据,甚至要用到的页面都没有,所以根本跑不通。再次阅读help文档,有惊喜。原来参数不用-R,而要用-S.(这个似乎是RF3.0.1开始的新特性)


坑4

执行下来很顺利,有失败的test case的整个test suite都重跑了。但当点开日志,查看那些两次执行都失败的用例时,发现原来可以看到的失败处的截图无法显示了。跑到round1和round2目录下一看,截图都有,但是最后合并的报告在D:\log目录下没有截图。看来只能再次启用DOS命令拷贝一下图片了。于是,最终版本如下:

call pybot.bat --outputdir D:\log\round1 D:\MyTestSuites

call pybot.bat -S D:\log\round1\output.xml --outputdir D:\log\round2 D:\MyTestSuites

rebot –outputdir D:\log –merge D:\log\round1\output.xml D:\log\round2\output.xml

call copy /y D:\log\round2\*.png D:\log

你可能感兴趣的:(CI自动重跑失败RobotFramework测试用例(坑和解决方法))