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後修改即可。

轉載:http://www.cnblogs.com/baihuitestsoftware/articles/5923411.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章