Robot Framework 7.0.1 RC1 发布解析:回归修复、日本语本地化与回滚决策
【免费下载链接】robotframeworkGeneric automation framework for acceptance testing and RPA项目地址: https://gitcode.com/gh_mirrors/ro/robotframework
本文基于仓库内 doc/releasenotes/rf-7.0.1rc1.rst 发布说明,系统梳理 Robot Framework 7.0.1 首个(也是唯一一个)候选版本的背景、两大向后不兼容变更的决策过程、日本语本地化这一唯一较大增强,以及全部 18 个修复/增强项。文中结合仓库源码(如 src/robot/conf/languages.py、src/robot/running/timeouts/posix.py 等)给出实现级佐证,帮助你在升级到 7.0.1 前理解行为变化,并掌握如何安装候选版本、验证修复。
版本背景:7.0.1 在整个 7.0.x 系列中的定位
Robot Framework 7.0.1 是 7.0.x 系列中第一个且唯一计划的 bug 修复版本。按照发布说明的表述,它修复了 7.0 正式版引入的所有已报告回归问题,同时也修复了一些影响更早版本的问题;唯一的较大增强是新增的日本语本地化(对应 issue #5069)。
关键时间点(以发布说明为准):
- 发布日:2024 年 6 月 4 日(星期二)发布 7.0.1 release candidate 1;
- 定位:主要面向提交过问题报告的用户,便于他们验证修复是否生效;
- 后续计划:7.0.1 正式版计划于 2024 年 6 月 10 日(星期一)发布;
- 下一个里程碑:官方对 Python 3.13 的支持计划在 Robot Framework 7.1 中提供(详见下文 #5035)。
安装与验证候选版本
发布说明提供了两种安装方式(前提是已安装 pip):
# 安装最新可用版本(含预发布版本) pip install --pre --upgrade robotframework # 精确安装 7.0.1rc1 pip install robotframework==7.0.1rc1也可以从 PyPI 下载包并手动安装。更多安装方式参见仓库根目录的 INSTALL.rst。需要说明的是,RC(候选发布)版本用于验证修复效果,正式使用仍建议等待 7.0.1 最终版(或使用稳定分支)。
向后不兼容变更(Backwards incompatible changes)
--test与--include选项恢复为"非累积"语义
这是本次 RC 最值得关注的行为回滚。
- 7.0 中的新行为:
--test与--include变为"累积"(cumulative)语义——只要用例匹配任意一个选项(OR 关系)即被选中,而不是同时满足所有选项。该改动当时被认为更有用(对应 issue #4721)。 - 暴露的问题:新行为与
--rerun-failed选项以及 Pabot 工具配合时出现问题。 - 最终决策:新行为带来的收益被认为不足以抵消其造成的麻烦,因此回滚为旧语义(对应 issue #5023),即在 7.0.1 中,用例需要同时匹配
--test与--include指定的条件(AND 关系)才会被选中。
从测试目录可以找到与选择逻辑相关的验收用例,例如 atest/robot/cli/runner 与 atest/robot/cli/rebot 下的筛选用例,可用于验证此行为。升级到 7.0 后依赖 OR 语义编写 CI 脚本的用户,应在 7.0.1 中回归测试自己的命令行组合。
编程方式传参恢复为字符串:撤销非字符串命名参数 API
Robot Framework 7.0 曾尝试提供更友好的"以编程方式执行关键字"的 API,允许以非字符串值作为命名参数(对应 issue #5000)。但该方案在部分编程式使用场景中引发问题,因此被撤销(对应 issue #5031)。
代码层面,BuiltIn.run_keyword是这一编程式调用路径的入口之一,位于 src/robot/libraries/BuiltIn.py:
@run_keyword_variant(resolve=0, dry_run=True) def run_keyword(self, name, *args): """Executes the given keyword with the given arguments. ...发布说明将 #5031 的摘要表述为 "Problems with non-string arguments when usingBuildIn.run_keyword"(原文如此,"BuildIn" 为笔误,实际为BuiltIn)。7.0.1 起,以编程方式向命名参数传递非字符串值的做法不再被支持,请回到字符串传参方式。
日本语本地化:7.0.1 中唯一的较大增强
日本语本地化(issue #5069)是 7.0.1 的主要新功能,由社区成员 Yas 贡献。它允许用户使用日语的表头、设置名、标签名等编写 Robot Framework 测试数据,配合--language选项使用。
命令行启用方式
--language选项在 src/robot/run.py 中有如下说明:
--language lang * Activate localization. `lang` can be a name or a code of a built-in language, or a path or a module name of a custom language file.因此日本语可通过名称或代码启用,例如:
robot --language ja mytests/ # 或 robot --language Japanese mytests/源码中的实现证据
日本语语言定义位于 src/robot/conf/languages.py,其 docstring 明确标注 "New in Robot Framework 7.0.1.":
class Ja(Language): """Japanese New in Robot Framework 7.0.1. """ settings_header = '設定' variables_header = '変数' test_cases_header = 'テスト ケース' tasks_header = 'タスク' keywords_header = 'キーワード' comments_header = 'コメント' ... given_prefixes = ['仮定', '指定', '前提条件'] when_prefixes = ['条件', '次の場合', 'もし', '実行条件'] then_prefixes = ['アクション', 'その時', '動作'] and_prefixes = ['および', '及び', 'かつ', '且つ', 'ならびに', '並びに', 'そして', 'それから'] but_prefixes = ['ただし', '但し'] true_strings = ['真', '有効', 'はい', 'オン'] false_strings = ['偽', '無効', 'いいえ', 'オフ']通过from_name(src/robot/conf/languages.py)等类方法,Robot Framework 可以根据语言名或语言代码解析出对应语言类;语言code由类名推导(Ja→ja),语言name取自类 docstring 首行(即 "Japanese")。
日本语本地化覆盖了:
- 五个数据表头:
設定、変数、テスト ケース、タスク、キーワード、コメント; - 全部核心设置名:库、资源、变量、文档、元数据、套件/测试/任务的 Setup、Teardown、Template、Timeout、Tags、Arguments 等;
- BDD 风格前缀:
仮定/指定/前提条件(Given)、条件/次の場合/もし/実行条件(When)、アクション/その時/動作(Then)等; - 布尔值字符串:
真/有効/はい/オン与偽/無効/いいえ/オフ。
这与--language机制保持一致的扩展方式:想要添加新语言,只需继承Language基类(src/robot/conf/languages.py)并设置相应类属性即可。
18 个修复与增强项全览
发布说明列出的完整问题清单如下(总计 18 个 issue,按优先级分组,Added均为 rc 1)。
高优先级(high)
| ID | Type | Summary |
|---|---|---|
| #5012 | bug | --legacy-output在 Rebot 组合、合并或筛选结果时不生效 |
| #5023 | bug | 因向后兼容问题,恢复--test与--include的非累积语义 |
| #5031 | bug | 使用BuildIn.run_keyword时非字符串参数存在问题 |
| #5063 | bug | 若signal.setitimer不可用(如 Pyodide 环境),Robot Framework 无法在非 Windows 平台运行 |
| #5069 | enhancement | 日本语本地化 |
| #5120 | bug | for 循环中的错误语法导致 RF 崩溃且 HTML 报告未生成 |
其中 #5063 与定时器实现直接相关。超时功能在 POSIX 平台的实现位于 src/robot/running/timeouts/posix.py,其核心依赖signal.setitimer:
from signal import setitimer, signal, SIGALRM, ITIMER_REAL class Timeout: ... def _start_timer(self): signal(SIGALRM, self._raise_timeout_error) setitimer(ITIMER_REAL, self._timeout) def _stop_timer(self): setitimer(ITIMER_REAL, 0)也就是说,在setitimer不可用的平台(例如 WebAssembly 环境的 Pyodide)上,7.0 存在无法运行的问题,7.0.1 修复了该回归。#5120 则说明 for 循环语句语法错误时,解析/执行应给出友好错误而非直接崩溃,同时保证 HTML 报告仍能生成。
中优先级(medium)
| ID | Type | Summary |
|---|---|---|
| #4993 | bug | Dialogs:Linux 上关闭对话框存在问题 |
| #5017 | bug | User Guide 中缺少 listener v3 的start/end_body_item方法文档 |
| #5051 | bug | 关键字未找到时,记录未执行关键字的日志存在不必要的开销 |
| #5114 | bug | 参数转换中,包含 TypedDict 的联合类型(union)不接受 dict 作为参数 |
| #5115 | bug | Python < 3.11 下 TypedDict 转换中NotRequired与Required处理不当 |
| #5128 | bug | 用户关键字中仅限命名(named-only)的参数不会被 trace 日志记录 |
| #5039 | enhancement | Read The Docs 上 API 文档使用更好的主题 |
其中 #5114/#5115 与参数类型转换相关,TypedDict 的类型信息实现位于 src/robot/running/arguments/typeinfo.py:
class TypedDictInfo(TypeInfo): """Represents ``TypedDict`` used as an argument.""" is_typed_dict = True同时 src/robot/running/arguments/typeinfo.py 中from_type_hint对 TypedDict 的识别逻辑为:
if isinstance(hint, typeddict_types): return TypedDictInfo(hint.__name__, hint)7.0.1 修复了 TypedDict 出现在 union 中、以及低版本 Python 中Required/NotRequired元数据丢失导致转换失败的问题。相关测试参见 utest/running/test_typeinfoparser.py 与 utest/running/test_typeinfo.py。
低优先级(low)
| ID | Type | Summary |
|---|---|---|
| #5032 | bug | Collections:Get/Pop From Dictionary文档中未显示默认值 |
| #5035 | bug | Python 3.13 下单元测试失败(官方支持计划于 7.1 提供) |
| #5070 | bug | User Guide 中 listener 接口文档的拼写错误 |
| #5100 | bug | 目录路径包含空格时验收测试失败 |
| #5130 | bug | Collections:ignore_case参数的值被意外记录到日志 |
#5035 的修复属于测试基础设施层面,为即将到来的 Python 3.13 做准备——发布说明明确指出官方支持 Python 3.13 计划在 Robot Framework 7.1 提供(对应 issue #5091 里程碑)。#5100 则修复了验收测试在含空格目录下运行失败的问题,相关测试数据位于 atest/robot 目录树。
致谢与社区贡献
发布说明对以下社区贡献者表达了致谢:
- Yas:提供日本语本地化(#5069);
- Lukas Rolf:修复 Dialogs 库在 Linux 上关闭对话框的崩溃问题(#4993);
- Many Kasiriha:为 API 文档(Read The Docs)实现更好的主题(#5039);
- Federico Pellegrin:修复即将到来的 Python 3.13 下的单元测试(#5035);
- @sunday2:修复目录路径包含空格时验收测试的问题(#5100)。
Robot Framework 的开发由 Robot Framework Foundation 及其超过 60 家成员组织赞助。
升级与验证建议
针对本次 RC 内容,升级与验证建议如下:
- 使用 RC 验证修复:如果你在 7.0 中提交过上述 issue,可执行
pip install robotframework==7.0.1rc1验证;若不确定最新版本,可用pip install --pre --upgrade robotframework。 - 回归检查命令行筛选:若你的 CI 同时使用
--test与--include,确认 7.0.1 的 AND 语义是否符合预期(#5023)。 - 检查编程式传参:若代码中通过
BuiltIn.run_keyword等 API 传递非字符串命名参数,请改回字符串形式(#5031)。 - 尝试日本语本地化:使用
robot --language ja编写/运行日语测试数据,验证表头、设置名与 BDD 前缀的翻译是否满足团队需求(#5069)。 - 检查超时使用场景:若在 Pyodide 等特殊运行时上运行 Robot Framework,确认升级后超时功能可用(#5063)。
- 等待正式版:7.0.1 正式版计划于 2024 年 6 月 10 日发布,生产环境建议在正式版发布后升级,并配合 INSTALL.rst 中的安装指引操作。
【免费下载链接】robotframeworkGeneric automation framework for acceptance testing and RPA项目地址: https://gitcode.com/gh_mirrors/ro/robotframework
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考