Robot Framework-失敗用例自動重跑


使用自動化腳本進行測試,經常受環境影響等各方面導致本能成功的腳本失敗,下面介紹了RFS框架下,失敗重跑的方法:

通過改寫RobotFramework源代碼增加--retry選項,實現test級別的失敗用例自動再執行:失敗用例會重跑N次,直至成功or 耗盡重試次數,生成的日志和報告文件中只會體現最后一次執行的結果。

 

修改代碼如下:

一、修改文件 C:\Python27\Lib\site-packages\robot\run.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)

四、robotide\contrib\testrunner\usages.py
  修改USAGE字符串,增加 -X --retry retry         Set the retry times if test failed.

現在完成了所有配置,可以運行一下試試了。次數的配置在settings.py下retry后修改即可。

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM