增加导入模块
reload(sys) sys.setdefaultencoding('UTF-8') from xml.dom import minidomRobotFramework类增加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') root = xmldoc.documentElement root.writexml(savefile) savefile.close()修改RobotFramework类的main方法,插入self.make(settings.output)这段(被我编辑了一下,关键字没高亮了,不过没关系)
def main(self, datasources, **options): settings = RobotSettings(options) LOGGER.register_console_logger(**settings.console_output_config) LOGGER.info('Settings:\n%s' % unic(settings)) suite = TestSuiteBuilder(settings['SuiteNames'], settings['WarnOnSkipped']).build(*datasources) suite.configure(**settings.suite_config) if settings.pre_run_modifiers: suite.visit(ModelModifier(settings.pre_run_modifiers, settings.run_empty_suite, LOGGER)) with pyloggingconf.robot_handler_enabled(settings.log_level): result = suite.run(settings) LOGGER.info("Tests execution ended. Statistics:\n%s" % result.suite.stat_message) self.make(settings.output) if settings.log or settings.report or settings.xunit: writer = ResultWriter(settings.output if settings.log else result) writer.write_results(settings.get_rebot_settings()) return result.return_code 3、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) 4、robotide\contrib\testrunner\usages.py 修改USAGE字符串,增加 -X --retry retry Set the retry times if test failed.这一段 Options ======= -X --retry retry Set the retry times if test failed. -N --name name Set the name of the top level test suite. Underscores in the name are converted to spaces. Default name is created from the name of the executed data source. -D --doc documentation Set the documentation of the top level test suite. Underscores in the documentation are converted to spaces and it may also contain simple HTML formatting (e.g. *bold* and http://url/).如果重跑次数达到设置上限,仍然失败,则报告显示为最后一次失败数据(结果):
转载于:https://www.cnblogs.com/ybcao/p/7455323.html