布詳解:Listener 與 VAR 語法增強實戰(zhàn)指南)
測試RPA接口測試【免費下載鏈接】robotframeworkGeneric automation framework for acceptance testing and RPA項目地址https://gitcode.com/gh_mirrors/ro/robotframework點擊查看免費下載Robot Framework 7.1 是繼 7.0 之后的功能版本重點增強了Listener 監(jiān)聽器接口與VAR 變量語法。本文基于官方發(fā)布說明 rf-7.1rc2.rst結(jié)合倉庫源碼深度解析 7.1 RC2 的全部新特性、向后不兼容變更與修復清單幫助你在升級前充分評估影響、升級后快速上手新 API。版本概覽與安裝方式Robot Framework 7.1 RC2 發(fā)布于 2024 年 9 月 3 日星期二是 7.1 的第二個發(fā)布候選版本包含所有計劃中的功能與變更。相對于第一個 RCrf-7.1rc1本版本主要變更集中在控制臺結(jié)果文件路徑輸出為超鏈接issue [#5189]允許 Listener 修改WHILE 循環(huán)限制issue [#5194]官方邀請社區(qū)成員在各自環(huán)境中充分測試以便在 9 月 9 日星期一正式版發(fā)布前修復可能的回歸問題。如發(fā)現(xiàn)問題可通過#devel頻道反饋到 Robot Framework Slack或在 issue tracker 提交缺陷。安裝命令已安裝 pip 的情況下安裝最新可用版本pip install --pre --upgrade robotframework或精確安裝此版本pip install robotframework7.1rc2也可以從 PyPI 下載包后手動安裝。更完整的安裝方式參見 INSTALL.rst。最重要的增強Listener 接口Listener 接口在 Robot Framework 7.0 中被大幅增強7.1 在此基礎(chǔ)上又增加了四項重要能力。1. 用 ROBOT_LISTENER_PRIORITY 控制監(jiān)聽器調(diào)用順序監(jiān)聽器現(xiàn)在可以通過ROBOT_LISTENER_PRIORITY屬性控制調(diào)用順序issue [#3473]。從源碼實現(xiàn)看優(yōu)先級解析發(fā)生在 Listener 門面Facade初始化階段。在 src/robot/output/listeners.py 中self.priority self._get_priority(listener) def _get_priority(self, listener): priority getattr(listener, ROBOT_LISTENER_PRIORITY, 0) try: return float(priority) except (ValueError, TypeError): raise DataError(fInvalid listener priority {priority}.)要點未設置該屬性時默認優(yōu)先級為0優(yōu)先級會被轉(zhuǎn)換為浮點數(shù)數(shù)值越小越先被調(diào)用若設置為非法值無法轉(zhuǎn)為 float會拋出DataError并提示Invalid listener priority。示例監(jiān)聽器類中聲明class MyListener: ROBOT_LISTENER_PRIORITY -10 # 比其他默認監(jiān)聽器更早執(zhí)行 def start_suite(self, data, result): print(early suite start)2. 監(jiān)聽器可以改變執(zhí)行狀態(tài)監(jiān)聽器現(xiàn)在可以修改執(zhí)行狀態(tài)issue [#5090]。例如將關(guān)鍵字狀態(tài)從 PASS 改為 FAIL舊行為只影響該關(guān)鍵字本身執(zhí)行繼續(xù)新行為執(zhí)行停止當前測試或任務被標記為失敗。這使得監(jiān)聽器能夠?qū)崿F(xiàn)更精細的執(zhí)行控制例如在特定條件下強制讓用例失敗并終止后續(xù)步驟。3. Listener API 版本 3 補齊導入相關(guān)方法Listener API 版本 3 新增了庫、資源文件和變量文件導入相關(guān)方法issue [#5008]至此 V3 擁有與 V2 完全一致的方法集。從 src/robot/output/listeners.py 可以看出 V3 門面采用了「回退」機制——例如start_keyword會回退到start_body_itemWHILE 相關(guān)方法也會回退到 body item 方法class ListenerV3Facade(ListenerFacade): def __init__(self, listener, name, log_level, libraryNone): ... start_body_item get(start_body_item) end_body_item get(end_body_item) self.start_keyword get(start_keyword, start_body_item) self.end_keyword get(end_keyword, end_body_item) # WHILE self.start_while get(start_while, start_body_item) self.end_while get(end_while, end_body_item) self.start_while_iteration get(start_while_iteration, start_body_item) self.end_while_iteration get(end_while_iteration, end_body_item)注意V3 門面同時支持蛇形命名start_suite與駝峰命名startSuite兩種方法名見_get_method_names實現(xiàn)。4. 監(jiān)聽器可修改 WHILE 循環(huán)限制監(jiān)聽器現(xiàn)在可以修改 WHILE 循環(huán)的限制值issue [#5194]由社區(qū)貢獻者 Adrian B?asiak 實現(xiàn)。在 V3 監(jiān)聽器的start_while中修改result.limit即可影響循環(huán)的執(zhí)行次數(shù)。VAR 語法增強VAR語法在 7.0 中引入用于以統(tǒng)一語法在不同作用域創(chuàng)建變量7.1 對其進行了兩處關(guān)鍵增強。1. 創(chuàng)建變量時記錄變量值VAR創(chuàng)建的變量值現(xiàn)在會被記錄到日志與Set Test Variable、Set Suite Variable等關(guān)鍵字的行為一致issue [#5077]。從 src/robot/running/model.py 的Var.run實現(xiàn)可以看到def run(self, result, context, runTrue, templatedFalse): result result.body.create_var(self.name, self.value, self.scope, self.separator) with StatusReporter(self, result, context, run): if self.error and run: raise DataError(self.error, syntaxTrue) if not run or context.dry_run: return scope, config self._get_scope(context.variables) set_variable getattr(context.variables, fset_{scope}) try: name, value self._resolve_name_and_value(context.variables) set_variable(name, value, **config) context.info(format_assign_message(name, value)) except DataError as err: raise VariableError(fSetting variable {self.name} failed: {err})其中format_assign_message(name, value)正是生成日志消息的關(guān)鍵調(diào)用。安全注意向后不兼容由于變量值會被記錄可能泄露機密信息。若擔心這一點可用--max-assign-length命令行選項禁用/限制所有變量賦值的日志輸出。2. 新增 SUITES 作用域新增SUITES作用域用于將變量設置到當前套件及其所有子套件issue [#5060]。此前SUITE作用域只影響當前套件而不影響其子套件。此增強使VAR語法在功能上與Set Suite Variable關(guān)鍵字兼容后者以略有不同的語法支持相同功能。源碼中作用域解析邏輯位于 src/robot/running/model.pydef _get_scope(self, variables): if not self.scope: return local, {} try: scope variables.replace_string(self.scope) if scope.upper() TASK: return test, {} if scope.upper() SUITES: return suite, {children: True} if scope.upper() in (LOCAL, TEST, SUITE, GLOBAL): return scope.lower(), {} raise DataError(...)SUITES被映射為set_suite(..., childrenTrue)即向當前及所有子套件設置變量。語法層面的合法取值定義在 src/robot/parsing/model/statements.pyclass Var(Statement): type Token.VAR options { scope: (LOCAL, TEST, TASK, SUITE, SUITES, GLOBAL), separator: None }VAR的完整合法作用域為LOCAL、TEST、TASK、SUITE、SUITES、GLOBAL。使用示例*** Test Cases *** Example VAR ${name} value scopeSUITES # 當前套件及其全部子套件均可見 ${name}其他增強控制臺超鏈接執(zhí)行完成后寫入控制臺的日志與報告路徑現(xiàn)在是超鏈接便于直接在瀏覽器中打開issue [#5189]。這要求終端支持超鏈接幾乎所有 Linux 和 macOS 終端均支持經(jīng)典的 Windows Console 不支持但較新的 Windows Terminal 以及 Windows 上大多數(shù)第三方終端兼容。底層實現(xiàn)采用終端 OSC 8 超鏈接語法見 src/robot/output/console/highlighting.pydef link(self, path): if not self._links: return path try: uri path.as_uri() except ValueError: return path # Terminal hyperlink syntax is documented here: # https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda return f\033]8;;{uri}\033\\{path}\033]8;;\033\\控制臺鏈接行為可通過命令行選項控制robot與rebot均支持--consolelinks auto|off Control making paths to results files hyperlinks.該選項在 src/robot/run.py 與 src/robot/rebot.py 中均有聲明。命名參數(shù)的程序化 API7.1 引入了以編程方式使用命名參數(shù)的新 APIissue [#5143]面向在測試執(zhí)行前或執(zhí)行中修改測試/任務的 pre-run modifiers 與 listeners。7.0 曾嘗試添加類似 APIissue [#5000]但因引發(fā)向后不兼容問題而在 7.1 中回退issue [#5031]新 API 希望規(guī)避這些問題。從源碼看該 API 以類型別名與運行模型字段的形式落地。在 src/robot/api/interfaces.py 中NamedArgs Mapping[str, Any]運行模型中的Keyword支持named_args字段src/robot/running/model.pyWhen creating keywords programmatically, it is possible to set :attr:named_args __slots__ [named_args, lineno] ... def __init__(self, ..., named_args: Mapping[str, Any]|None None, ...): self.named_args named_args ... if self.named_args is not None: data[named_args] self.named_args同時關(guān)鍵字運行器在解析參數(shù)時會合并命名參數(shù)如 src/robot/running/librarykeywordrunner.pyif data.named_args: args tuple(f{n}{v} for n, v in data.named_args.items())翻譯與兼容性更新新增韓語翻譯issue [#5187]由 Hyeonho Kang 貢獻更新荷蘭語翻譯issue [#5148]由 J. Foederer 貢獻部分舊術(shù)語不再生效官方兼容 Python 3.13issue [#5091]。官方聲明無需修改代碼因此較舊版本的 Robot Framework 也應能正常工作。向后不兼容變更升級到 7.1 前請?zhí)貏e關(guān)注以下三點變量值日志可能泄露機密信息issue [#5077]VAR語法現(xiàn)在會記錄變量值。若擔心泄露用--max-assign-length禁用或限制變量賦值日志。荷蘭語翻譯更新issue [#5148]部分舊術(shù)語不再生效。如有問題可創(chuàng)建包含舊變體的自定義語言文件若影響面較大官方也可能考慮調(diào)整本地化系統(tǒng)讓舊術(shù)語仍然可用但產(chǎn)生棄用警告。BDD 前綴行為變更issue [#4577]若關(guān)鍵字名形如${kind} example并以Given good example方式使用變量${kind}現(xiàn)在只包含good而以前包含Given good。這通常是一種良性增強但依賴此前包含前綴的既有代碼可能需要更新。實現(xiàn)上該變更由 J. Foederer 貢獻——當關(guān)鍵字以嵌入?yún)?shù)開頭時不再把 BDD 前綴計入?yún)?shù)值。完整修復與增強列表共 25 個 issue下表完整列出 7.1 RC2 里程碑中的全部 25 個 issue按優(yōu)先級排序ID類型優(yōu)先級摘要加入版本#3473enhancementcritical用ROBOT_LISTENER_PRIORITY屬性控制監(jiān)聽器調(diào)用順序rc 1#5090enhancementcritical允許監(jiān)聽器改變執(zhí)行狀態(tài)rc 1#5091enhancementcriticalPython 3.13 兼容rc 1#5094bughigh關(guān)鍵字接受**named時含的位置限定參數(shù)被誤認為命名參數(shù)rc 1#5181bughigh含可變值的變量在部分場景下解析錯誤rc 1#5008enhancementhigh為 listener 版本 3 增加庫、資源文件與變量文件導入相關(guān)方法rc 1#5060enhancementhighVAR語法支持scopeSUITES為子套件設置值rc 1#5077enhancementhighVAR語法不像Set * Variable那樣記錄變量值rc 1#5143enhancementhigh以編程方式使用命名參數(shù)的新 APIrc 1#5187enhancementhigh韓語翻譯rc 1#5189enhancementhigh終端中結(jié)果文件路徑顯示為超鏈接rc 1#5010bugmedium設置PYTHONWARNDEFAULTENCODING產(chǎn)生警告rc 1#5151bugmediumEvaluate關(guān)鍵字未考慮添加到builtins模塊的屬性rc 1#5159bugmedium使用 Rebot 處理不存在的 JSON 輸出文件時錯誤信息不佳rc 1#5177bugmedium舍入錯誤導致狀態(tài)色條顯示異常rc 1#3418enhancementmediumImport Resource應在 dry-run 中執(zhí)行rc 1#4577enhancementmedium若 BDD 關(guān)鍵字以嵌入?yún)?shù)開頭從參數(shù)值中剝離前綴rc 1#4821enhancementmediumFormat String允許使用含的模板字符串而無需轉(zhuǎn)義rc 1#5038enhancementmediumDialogsGet Selection From User支持默認選項rc 1#5054enhancementmediumShould Contain更好地支持 bytesrc 1#5087enhancementmedium將 output.xml 的生成時間添加到Result對象rc 1#5135enhancementmedium支持含week值的時間字符串rc 1#5148enhancementmedium更新荷蘭語翻譯rc 1#5194enhancementmedium允許在 listener V3 中修改 WHILE 限制rc 2#5169buglow匹配含嵌入?yún)?shù)的關(guān)鍵字時空格未規(guī)范化rc 1其中#5194WHILE 限制修改是第二個 RC 新增的條目其余均在第一版 RC 中已包含。與 7.1 RC1 的差異相比第一個發(fā)布候選詳見 rf-7.1rc1.rstRC2 的變更集中在兩處控制臺超鏈接#5189結(jié)果文件路徑在支持超鏈接的終端中可點擊WHILE 循環(huán)限制可由監(jiān)聽器修改#5194在 V3 監(jiān)聽器的start_while鉤子中調(diào)整result.limit即可生效。致謝與后續(xù)行動Robot Framework 開發(fā)由 Robot Framework Foundation 及其 60 成員組織贊助。本版本亦獲得多位社區(qū)成員的貢獻J. Foederer增強嵌入?yún)?shù)語法#4577更新荷蘭語翻譯#5148Hyeonho Kang韓語翻譯#5187Adrian B?asiak監(jiān)聽器修改 WHILE 循環(huán)限制#5194ChristopherJHart時間字符串支持week#5135wendi616Import Resource在 dry-run 中執(zhí)行#3418PeterGet Selection From User默認值支持#5038Tatu Aalto從 output.xml 提取生成時間到Result對象#5087droelandShould Contain對 bytes 的支持#5054。如果你在測試 7.1 RC2 時發(fā)現(xiàn)回歸請在正式版原定 2024 年 9 月 9 日發(fā)布前通過 issue tracker 反饋以幫助官方在最終版本中修復問題。相關(guān)的自動化測試用例可在 atest 與 utest 目錄中查閱源碼實現(xiàn)集中在 src/robot 下的output、running、parsing等模塊。贊分享測試RPA接口測試【免費下載鏈接】robotframeworkGeneric automation framework for acceptance testing and RPA項目地址https://gitcode.com/gh_mirrors/ro/robotframework點擊查看免費下載相關(guān)推薦Robot Framework 7.1 版本特性詳解Listener 增強、VAR 語法演進與兼容性變更Robot Framework 7.1 版本特性詳解Listener 增強、VAR 語法演進與兼容性變更 Robot Framework 7.1 于 2024測試RPA接口測試Robot Framework 7.0 發(fā)布指南Listener V3 增強、VAR 原生語法與 JSON 結(jié)果格式全面解析Robot Framework 7.0 發(fā)布指南Listener V3 增強、VAR 原生語法與 JSON 結(jié)果格式全面解析 本篇技術(shù)指南以 Robot Fr測試RPA接口測試Robot Framework 7.0 RC2 技術(shù)全解Listener v3 增強、VAR 語法、JSON 結(jié)果格式與破壞性變更遷移指南Robot Framework 7.0 RC2 技術(shù)全解Listener v3 增強、VAR 語法、JSON 結(jié)果格式與破壞性變更遷移指南 本文基于 Robo測試RPA接口測試創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考