zoukankan      html  css  js  c++  java
  • Robot Framework-失败用例自动重跑

    使用自动化脚本进行测试,经常受环境影响等各方面导致本能成功的脚本失败,下面介绍了RFS框架下,失败重跑的方法:

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

    修改代码如下:

    一、修改文件 C:Python27Libsite-packages obotrun.py

       1)在USAGE变量里添加下面红色内容。

      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.
    
     

    2)增加导入模块

    reload(sys)
    sys.setdefaultencoding('UTF-8')
    from xml.dom import minidom
    
    

     3)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')
            root = xmldoc.documentElement
            root.writexml(savefile)
            savefile.close()
    复制代码

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

    二、robot/conf/settings.py
    修改_cli_opts字典,增加 ‘Retry’:(‘retry’,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)
    复制代码

    四、robotidecontrib estrunnerusages.py
      修改USAGE字符串,增加 -X –retry retry         Set the retry times if test failed.

    现在完成了所有配置,可以运行一下试试了。次数的配置在settings.py下retry后修改即可。

    转载:http://www.cnblogs.com/baihuitestsoftware/articles/5923411.html

  • 相关阅读:
    Just oj 2018 C语言程序设计竞赛(高级组)D: 四边形面积
    Just Oj 2017C语言程序设计竞赛高级组A: 求近似值(矩阵快速幂)
    HDU 1166 敌兵布阵(线段树/树状数组模板题)
    HDU 1541 STAR(树状数组)
    Just Oj 2017C语言程序设计竞赛高级组E: DATE ALIVE(二分匹配)
    Just Oj 2017C语言程序设计竞赛高级组D: 字符串最大表示(next数组)
    蓝桥杯 历届试题 小计算器
    蓝桥杯练习 十六进制转二进制
    51 nod 1212 无向图最小生成树(Kruckal算法/Prime算法图解)
    51 Nod 1240 莫比乌斯函数
  • 原文地址:https://www.cnblogs.com/haitao130v/p/9664666.html
Copyright © 2011-2022 走看看