天天看點

python3 Robot Framework-設定失敗用例重試

進行UI自動化腳測試時,經常會受環境,網絡影響等各方面原因導緻測試用例偶發性的失敗,這不僅使UI測試腳本顯得很不穩定,而且每次報錯時都需要花費時間去檢視執行失敗的真正原因,很浪費時間和經曆,但是實際上RF也可以設定重試次數,如可重試3次後仍然失敗才辨別該用例失敗。

具體方法:通過改寫RobotFramework源代碼增加–retry選項,實作test級别的失敗用例自動再執行。失敗用例會重跑N次,直至成功or 耗盡重試次數,生成的報告檔案中隻會展現最後一次執行的結果,但日志檔案會記錄所有的執行步驟。

如設定重試次數為3次時,ride仍然是會列印出3次失敗的日志。

python3 Robot Framework-設定失敗用例重試

 具體步驟如下:

一、修改檔案 D:\Python36\Lib\site-packages\robot\run.py

1.增加導入子產品

python3 Robot Framework-設定失敗用例重試
import imp
imp.reload(sys)
from xml.dom import minidom
           

2.RobotFramework類增加make方法

python3 Robot Framework-設定失敗用例重試
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方法,加入紅色内容 self.make(settings.output)

python3 Robot Framework-設定失敗用例重試

二、 修改D:\Python36\Lib\site-packages\robot\conf\settings.py

修改RobotSettings類的_extra_cli_opts字典,增加“'Retry' : ('retry',2),” (這裡的次數可以自己根據需要設定,表示用例失敗後重新執行Retry-1次)

python3 Robot Framework-設定失敗用例重試

 三、修改D:\Python36\Lib\site-packages\robot\model\itemlist.py

修改visit方法如下:

python3 Robot Framework-設定失敗用例重試
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)
           

四、修改D:\Python36\Lib\site-packages\robotide\contrib\testrunner\usages.py

修改USAGE字元串,增加 -Z --retry retry Set the retry times if test failed.

網上很多資料都是說使用-X參數,實際上-X參數已經被使用了,設定為-X運作用例時會報錯,是以設定這裡的參數前先在該檔案中搜尋下以確定要設定的參數目前未被使用。

python3 Robot Framework-設定失敗用例重試

 以上設定完成後,即可實作用例運作失敗自動重試了。

繼續閱讀