ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

Robot Framework 7.1 RC2 发布详解:Listener 与 VAR 语法增强实战指南

Robot Framework 7.1 RC2 发布详解:Listener 与 VAR 语法增强实战指南 测试RPA接口测试【免费下载链接】robotframeworkGeneric automation framework for acceptance testing and RPA项目地址https://gitcode.com/gh_mirrors/ro/robotframework点击查看免费下载Robot Framework 7.1 是继 7.0 之后的功能版本重点增强了Listener 监听器接口与VAR 变量语法。本文基于官方发布说明 rf-7.1rc2.rst结合仓库源码深度解析 7.1 RC2 的全部新特性、向后不兼容变更与修复清单帮助你在升级前充分评估影响、升级后快速上手新 API。版本概览与安装方式Robot Framework 7.1 RC2 发布于 2024 年 9 月 3 日星期二是 7.1 的第二个发布候选版本包含所有计划中的功能与变更。相对于第一个 RCrf-7.1rc1本版本主要变更集中在控制台结果文件路径输出为超链接issue [#5189]允许 Listener 修改WHILE 循环限制issue [#5194]官方邀请社区成员在各自环境中充分测试以便在 9 月 9 日星期一正式版发布前修复可能的回归问题。如发现问题可通过#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 在此基础上又增加了四项重要能力。1. 用 ROBOT_LISTENER_PRIORITY 控制监听器调用顺序监听器现在可以通过ROBOT_LISTENER_PRIORITY属性控制调用顺序issue [#3473]。从源码实现看优先级解析发生在 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}.)要点未设置该属性时默认优先级为0优先级会被转换为浮点数数值越小越先被调用若设置为非法值无法转为 float会抛出DataError并提示Invalid listener priority。示例监听器类中声明class MyListener: ROBOT_LISTENER_PRIORITY -10 # 比其他默认监听器更早执行 def start_suite(self, data, result): print(early suite start)2. 监听器可以改变执行状态监听器现在可以修改执行状态issue [#5090]。例如将关键字状态从 PASS 改为 FAIL旧行为只影响该关键字本身执行继续新行为执行停止当前测试或任务被标记为失败。这使得监听器能够实现更精细的执行控制例如在特定条件下强制让用例失败并终止后续步骤。3. Listener API 版本 3 补齐导入相关方法Listener API 版本 3 新增了库、资源文件和变量文件导入相关方法issue [#5008]至此 V3 拥有与 V2 完全一致的方法集。从 src/robot/output/listeners.py 可以看出 V3 门面采用了「回退」机制——例如start_keyword会回退到start_body_itemWHILE 相关方法也会回退到 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实现。4. 监听器可修改 WHILE 循环限制监听器现在可以修改 WHILE 循环的限制值issue [#5194]由社区贡献者 Adrian Błasiak 实现。在 V3 监听器的start_while中修改result.limit即可影响循环的执行次数。VAR 语法增强VAR语法在 7.0 中引入用于以统一语法在不同作用域创建变量7.1 对其进行了两处关键增强。1. 创建变量时记录变量值VAR创建的变量值现在会被记录到日志与Set Test Variable、Set Suite Variable等关键字的行为一致issue [#5077]。从 src/robot/running/model.py 的Var.run实现可以看到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)正是生成日志消息的关键调用。安全注意向后不兼容由于变量值会被记录可能泄露机密信息。若担心这一点可用--max-assign-length命令行选项禁用/限制所有变量赋值的日志输出。2. 新增 SUITES 作用域新增SUITES作用域用于将变量设置到当前套件及其所有子套件issue [#5060]。此前SUITE作用域只影响当前套件而不影响其子套件。此增强使VAR语法在功能上与Set Suite Variable关键字兼容后者以略有不同的语法支持相同功能。源码中作用域解析逻辑位于 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}其他增强控制台超链接执行完成后写入控制台的日志与报告路径现在是超链接便于直接在浏览器中打开issue [#5189]。这要求终端支持超链接几乎所有 Linux 和 macOS 终端均支持经典的 Windows Console 不支持但较新的 Windows Terminal 以及 Windows 上大多数第三方终端兼容。底层实现采用终端 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 中均有声明。命名参数的程序化 API7.1 引入了以编程方式使用命名参数的新 APIissue [#5143]面向在测试执行前或执行中修改测试/任务的 pre-run modifiers 与 listeners。7.0 曾尝试添加类似 APIissue [#5000]但因引发向后不兼容问题而在 7.1 中回退issue [#5031]新 API 希望规避这些问题。从源码看该 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同时关键字运行器在解析参数时会合并命名参数如 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 贡献部分旧术语不再生效官方兼容 Python 3.13issue [#5091]。官方声明无需修改代码因此较旧版本的 Robot Framework 也应能正常工作。向后不兼容变更升级到 7.1 前请特别关注以下三点变量值日志可能泄露机密信息issue [#5077]VAR语法现在会记录变量值。若担心泄露用--max-assign-length禁用或限制变量赋值日志。荷兰语翻译更新issue [#5148]部分旧术语不再生效。如有问题可创建包含旧变体的自定义语言文件若影响面较大官方也可能考虑调整本地化系统让旧术语仍然可用但产生弃用警告。BDD 前缀行为变更issue [#4577]若关键字名形如${kind} example并以Given good example方式使用变量${kind}现在只包含good而以前包含Given good。这通常是一种良性增强但依赖此前包含前缀的既有代码可能需要更新。实现上该变更由 J. Foederer 贡献——当关键字以嵌入参数开头时不再把 BDD 前缀计入参数值。完整修复与增强列表共 25 个 issue下表完整列出 7.1 RC2 里程碑中的全部 25 个 issue按优先级排序ID类型优先级摘要加入版本#3473enhancementcritical用ROBOT_LISTENER_PRIORITY属性控制监听器调用顺序rc 1#5090enhancementcritical允许监听器改变执行状态rc 1#5091enhancementcriticalPython 3.13 兼容rc 1#5094bughigh关键字接受**named时含的位置限定参数被误认为命名参数rc 1#5181bughigh含可变值的变量在部分场景下解析错误rc 1#5008enhancementhigh为 listener 版本 3 增加库、资源文件与变量文件导入相关方法rc 1#5060enhancementhighVAR语法支持scopeSUITES为子套件设置值rc 1#5077enhancementhighVAR语法不像Set * Variable那样记录变量值rc 1#5143enhancementhigh以编程方式使用命名参数的新 APIrc 1#5187enhancementhigh韩语翻译rc 1#5189enhancementhigh终端中结果文件路径显示为超链接rc 1#5010bugmedium设置PYTHONWARNDEFAULTENCODING产生警告rc 1#5151bugmediumEvaluate关键字未考虑添加到builtins模块的属性rc 1#5159bugmedium使用 Rebot 处理不存在的 JSON 输出文件时错误信息不佳rc 1#5177bugmedium舍入错误导致状态色条显示异常rc 1#3418enhancementmediumImport Resource应在 dry-run 中执行rc 1#4577enhancementmedium若 BDD 关键字以嵌入参数开头从参数值中剥离前缀rc 1#4821enhancementmediumFormat String允许使用含的模板字符串而无需转义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匹配含嵌入参数的关键字时空格未规范化rc 1其中#5194WHILE 限制修改是第二个 RC 新增的条目其余均在第一版 RC 中已包含。与 7.1 RC1 的差异相比第一个发布候选详见 rf-7.1rc1.rstRC2 的变更集中在两处控制台超链接#5189结果文件路径在支持超链接的终端中可点击WHILE 循环限制可由监听器修改#5194在 V3 监听器的start_while钩子中调整result.limit即可生效。致谢与后续行动Robot Framework 开发由 Robot Framework Foundation 及其 60 成员组织赞助。本版本亦获得多位社区成员的贡献J. Foederer增强嵌入参数语法#4577更新荷兰语翻译#5148Hyeonho Kang韩语翻译#5187Adrian Błasiak监听器修改 WHILE 循环限制#5194ChristopherJHart时间字符串支持week#5135wendi616Import Resource在 dry-run 中执行#3418PeterGet Selection From User默认值支持#5038Tatu Aalto从 output.xml 提取生成时间到Result对象#5087droelandShould Contain对 bytes 的支持#5054。如果你在测试 7.1 RC2 时发现回归请在正式版原定 2024 年 9 月 9 日发布前通过 issue tracker 反馈以帮助官方在最终版本中修复问题。相关的自动化测试用例可在 atest 与 utest 目录中查阅源码实现集中在 src/robot 下的output、running、parsing等模块。赞分享测试RPA接口测试【免费下载链接】robotframeworkGeneric automation framework for acceptance testing and RPA项目地址https://gitcode.com/gh_mirrors/ro/robotframework点击查看免费下载相关推荐Robot Framework 7.1 版本特性详解Listener 增强、VAR 语法演进与兼容性变更Robot Framework 7.1 版本特性详解Listener 增强、VAR 语法演进与兼容性变更 Robot Framework 7.1 于 2024测试RPA接口测试Robot Framework 7.0 发布指南Listener V3 增强、VAR 原生语法与 JSON 结果格式全面解析Robot Framework 7.0 发布指南Listener V3 增强、VAR 原生语法与 JSON 结果格式全面解析 本篇技术指南以 Robot Fr测试RPA接口测试Robot Framework 7.0 RC2 技术全解Listener v3 增强、VAR 语法、JSON 结果格式与破坏性变更迁移指南Robot Framework 7.0 RC2 技术全解Listener v3 增强、VAR 语法、JSON 结果格式与破坏性变更迁移指南 本文基于 Robo测试RPA接口测试创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表