RobotFramework实现失败用例重跑

发布于:2024-07-26 ⋅ 阅读:(125) ⋅ 点赞:(0)

1、修改文件Python37\Lib\site-packages\robot\run.py

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方法,加入红色内容:

4、Python37\Lib\site-packages\robot\conf\settings.py修改字典_extra_cli_opts,增加'Retry' : ('retry', 2),表示用例总共执行Retry次(失败用例重新执行Retry-1次)

5、修改Python37\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)

6、Python37\Lib\site-packages\robot\run.py修改USAGE字符串,-X下面增加
--retry retry         Set the retry times if test failed.


网站公告

今日签到

点亮在社区的每一天
去签到