python3 Robot Framework-失败用例自动重跑
使用自动化脚本进行测试,经常受环境影响等各方面导致本能成功的脚本失败,下面介绍了RFS框架下,失败重跑的方法:
通过改写RobotFramework源代码增加–retry选项,实现test级别的失败用例自动再执行:失败用例会重跑N次,直至成功or 耗尽重试次数,生成的日志和报告文件中只会体现最后一次执行的结果。
修改代码如下:
一、修改文件 E:\Python37\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.iteritems():
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)
二、robot/conf/settings.py
修改_cli_opts字典,增加 ‘Retry’?‘retry’,2)
用例失败后重新执行Retry-1次
三、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)
四、robotide\contrib\testrunner\usages.py
修改USAGE字符串,增加 -X --retry retry Set the retry times if test failed.