编程语言
首页 > 编程语言> > python3 Robot Framework-设置失败用例重试

python3 Robot Framework-设置失败用例重试

作者:互联网

进行UI自动化脚测试时,经常会受环境,网络影响等各方面原因导致测试用例偶发性的失败,这不仅使UI测试脚本显得很不稳定,而且每次报错时都需要花费时间去查看执行失败的真正原因,很浪费时间和经历,但是实际上RF也可以设置重试次数,如可重试3次后仍然失败才标识该用例失败。

具体方法:通过改写RobotFramework源代码增加–retry选项,实现test级别的失败用例自动再执行。失败用例会重跑N次,直至成功or 耗尽重试次数,生成的报告文件中只会体现最后一次执行的结果,但日志文件会记录所有的执行步骤。

如设置重试次数为3次时,ride仍然是会打印出3次失败的日志。

 具体步骤如下:

一、修改文件 D:\Python36\Lib\site-packages\robot\run.py

1.增加导入模块

import imp
imp.reload(sys)
from xml.dom import minidom

2.RobotFramework类增加make方法

    def make(self, outxml):
        xmldoc = minidom.parse(outxml)
        suiteElementList = xmldoc.getElementsByTagName('suite')
        mySuite = []
        for suiteElement in suiteElementList:
            if suiteElement.childNodes is not None:
                for element in suiteElement.childNodes:
                    if element.nodeName == 'test':
                        mySuite.append(suiteElement)
                        break
        for suite in mySuite:
            testElements = {}
            for element in suite.childNodes:
                if element.nodeName == 'test':
                    name = element.getAttribute('name')
                    if testElements.get(name) == None:
                        testElements.update({name: [element]})
                    else:
                        testElements.get(name).append(element)
            for n, el in testElements.items():
                for i in el[0:-1]:
                    textElement = i.nextSibling
                    suite.removeChild(i)
                    suite.removeChild(textElement)
        savefile = open(outxml, 'w', encoding='utf-8')
        root = xmldoc.documentElement
        root.writexml(savefile)
        savefile.close()

3.RobotFramework类的main方法,加入红色内容 self.make(settings.output)

二、 修改D:\Python36\Lib\site-packages\robot\conf\settings.py

修改RobotSettings类的_extra_cli_opts字典,增加“'Retry' : ('retry',2),” (这里的次数可以自己根据需要设置,表示用例失败后重新执行Retry-1次)

 三、修改D:\Python36\Lib\site-packages\robot\model\itemlist.py

修改visit方法如下:

    def visit(self, visitor):
            for item in self:
                if self.__module__ == 'robot.model.testcase' and hasattr(visitor,"_context"):
                    testStatus = ''
                    for i in range(0,int(visitor._settings._opts['Retry'])):
                        if testStatus != 'PASS':
                            if item.name in visitor._executed_tests:
                                visitor._executed_tests.pop(item.name)
                            item.visit(visitor)
                            testStatus = visitor._context.variables['${PREV_TEST_STATUS}']
                        else:
                            break
                else:
                    item.visit(visitor)

四、修改D:\Python36\Lib\site-packages\robotide\contrib\testrunner\usages.py

修改USAGE字符串,增加 -Z --retry retry Set the retry times if test failed.

网上很多资料都是说使用-X参数,实际上-X参数已经被使用了,设置为-X运行用例时会报错,所以设置这里的参数前先在该文件中搜索下以确保要设置的参数目前未被使用。

 以上设置完成后,即可实现用例运行失败自动重试了。

标签:name,visitor,Robot,element,重试,用例,失败
来源: https://blog.csdn.net/qq_15158911/article/details/119077562