1. 程式人生 > >robotframework在測試中實現動態的增加測試內容,使用純robotframework自身語法實現

robotframework在測試中實現動態的增加測試內容,使用純robotframework自身語法實現

自動化測試有種場景是:用例跑起來了,想增加新的檢查項或則配置,一般常見可能的操作是:

1、通過動態定期檢查一個指令碼,或檔案,執行檔案裡面的內容

2、使用reload library方法,迴圈更新庫,執行時,更新庫的內容,變能實現執行用例時動態增加修改測試內容

以上方法都需要藉助,外部擴充套件實現,靈活度高,但是維護不方便,各種實現依賴於大量擴充套件的程式碼,本身robotframework自身的封裝大量原來的api無法使用,作為測試來說,建議能不用python擴充套件就儘量少用,使用robotframework自帶的便於維護和視覺化更好。

所以還是使用robotframe自帶的方法方便,本文以resroure import問題說明

這樣能實現,增加修改內容,在robotframework裡面通過增加關鍵字就好了,具體

 

第一個思路,通過有效的動態import實現

例如,開始沒有“臨時檢查1:這項,可以先把用例執行起來,再在RIDE裡新增“臨時檢查1”,則“臨時檢查1”會自動執行

*** Test Cases ***
執行檢查
    : FOR    ${var}    IN RANGE    1    10000000
    \    Sleep    1
    \    Import Resource    ${CURDIR}/通用檢查.txt
    \    ${通用檢查結果}    Run Keyword And Ignore Error    Keyword Should Exist    通用檢查
    \    Run Keyword If    '${通用檢查結果[0]}'=='PASS'    通用檢查
    \    ${匯出情況}    Run Keyword And Ignore Error    Import Resource    ${CURDIR}/臨時檢查1.txt
    \    Comment    檢視是否有新增檢查項
    \    Continue For Loop If    "${匯出情況[0]}"=="FAIL"
    \    ${臨時檢查1結果}    Run Keyword And Ignore Error    Keyword Should Exist    臨時檢查1
    \    Run Keyword If    '${臨時檢查1結果[0]}'=='PASS'    臨時檢查1

第二個思路是修改robotframe的原語義,能解決,未驗證穩定性

這樣每次使用import_resource會每次都重新整理下resource

修改檔案

\robot\running\namespace.py

def _import_resource(self, import_setting, overwrite=False):
        path = self._resolve_name(import_setting)
        self._validate_not_importing_init_file(path)
        #強制執行import
		#if overwrite or path not in self._kw_store.resources:
        if True:
            resource = IMPORTER.import_resource(path)
            self.variables.set_from_variable_table(resource.variables, overwrite)
            user_library = UserLibrary(resource)

\robot\running\importer.py

def import_resource(self, path):
        #if path in self._resource_cache:
        #    LOGGER.info("Found resource file '%s' from cache" % path)
        #else:                
        #強制執行import
        resource = ResourceFileBuilder().build(path)
        self._resource_cache[path] = resource
        return self._resource_cache[path]