拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Robot Framework 4.1 版本特性详解:continue-on-failure 标签控制与参数转换增强

测试RPA接口测试【免费下载链接】robotframeworkGeneric automation framework for acceptance testing and RPA项目地址https://gitcode.com/gh_mirrors/ro/robotframework点击查看免费下载导读Robot Framework 4.1 是继 4.0 之后的一个特性版本feature release发布于 2021 年 7 月 19 日主打 continue-on-failure失败后继续执行模式的易用性提升与自动参数转换argument conversion能力增强。本文以 rf-4.1.rst 发布说明为主体结合仓库源码与验收测试系统梳理robot:continue-on-failure等特殊标签的语义与优先级、数字参数转换的增强细节、--doc/--metadata从文件读取的破坏性变更以及 Python 2 与内置 Tidy 的弃用路线并给出可验证的测试用例与源码依据帮助读者安全评估与升级到 Robot Framework 4.1。安装与获取4.1 是一个预发布版本pre-release如果希望安装当时最新可用的版本可以通过 pip 安装该命令现在会安装更新版本的 Robot Framework如需精确复现 4.1请使用第二条命令pip install --pre --upgrade robotframework或者精确安装 4.1 版本pip install robotframework4.1也可以从 PyPI 下载源码分发包手动安装。更完整的安装方式参见仓库根目录的 INSTALL.rst。核心增强一用标签控制 continue-on-failure 模式背景从库关键字专用到人人可用Robot Framework 长期以来就支持所谓的可继续失败continuable failures机制失败会标记测试用例为 FAIL但允许后续执行继续。在 4.1 之前这一能力只能通过两种途径启用库关键字抛出特殊的可继续异常continuable exception使用 BuiltIn 库的Run Keyword And Continue On Failure关键字逐条包住失败点。这意味着让一段测试在某个失败后继续跑需要逐条关键字手工包装或者依赖第三方库的行为门槛较高。Robot Framework 4.1 通过两个新标签tag将这一能力开放给了所有测试编写者对应 issue #2285robot:continue-on-failure在该测试或关键字内部启用 continue-on-failure 模式。任一执行的关键字失败后下一条关键字仍会执行。robot:recursive-continue-on-failure递归版本效果会向下传播到嵌套的用户关键字。语义与传播规则发布说明对两个标签的语义给出了精确界定robot:continue-on-failure不会传播到更低层的关键字。也就是说如果标签挂在测试用例上那么该测试直接调用的关键字失败后测试会继续但一旦进入某个用户关键字内部该关键字内部一旦失败就立即停止直到返回到挂了标签的测试或关键字层级才恢复执行。robot:recursive-continue-on-failure则会把继续执行的语义递归传播到所有嵌套层级。除了这两个开启标签4.1 还配套提供了两个关闭/限制标签同样通过 issue #2285 实现在 atest/robot/running/continue_on_failure_tag.robot 中有系统测试覆盖robot:stop-on-failure在带标签的层级立即停止执行相当于强制关闭继续模式robot:recursive-stop-on-failure递归地停止执行。四个标签与Run Keyword And Continue On Failure等旧机制可以混用。从验收测试 continue_on_failure_tag.robot 的用例可以归纳出清晰的优先级规则直接作用于当前层级的continue-on-failure/stop-on-failure优先于递归标签例如Continue-on-failure overrides recursive-stop-on-failure.与Recursive-continue-on-failure overrides recursive-stop-on-failure.两个用例明确验证了这种覆盖关系见 continue_on_failure_tag.robot。递归标签只沿更内层传播当测试用例同时带robot:recursive-stop-on-failure与robot:continue-on-failure时测试层的 continue 标签生效、递归 stop 标签作用于嵌套关键字用例 continue_on_failure_tag.robot。可继续失败如Raise Continuable Failure、Run Keyword And Continue On Failure不会被stop-on-failure标签拦截后续执行依然继续用例 continue_on_failure_tag.robot。标签中的空白会被折叠、大小写不敏感且支持变量替换例如robot: CONTINUE-on-${FAILURE}、ROBOT:recursive-stop-on-${FAILURE}均合法见 continue_on_failure_tag.robot 与 continue_on_failure_tag.robot。运行时标签的妙用Set Tags / Remove Tags这些特殊标签并非只能写在[Tags]设置里。由于 4.1 中运行时修改标签会即时生效你完全可以在用例中途用Set Tags打开 continue-on-failure用Remove Tags再关闭它Continue in IF with set and remove tag Set Tags robot:continue-on-failure IF 11 Fail 1 Fail 2 END Remove Tags robot:continue-on-failure IF 12 No Operation ELSE Fail 3 Fail this is not executed END上述用例来自 continue_on_failure_tag.robotRemove Tags之后第二个ELSE分支里第一个Fail 3失败后后面的关键字不再执行。标签还可用变量拼写Set Tags ROBOT:CONTINUE-ON-${FAILURE}进一步增强了动态控制能力。源码级的判定逻辑标签如何影响执行流的底层实现在 src/robot/running/context.py 的continue_on_failure方法中它从当前执行栈self.steps倒序遍历所有用户关键字与测试用例的父级读取每个父级标签中的robot命名空间即robot:*前缀标签按最内层优先的顺序判定最内层父级带stop-on-failure→ 返回False停止最内层父级带continue-on-failure→ 返回True任一父级带recursive-stop-on-failure→ 返回False任一父级带recursive-continue-on-failure→ 返回True都没有时回退到默认值并且在 teardown 阶段默认继续执行default or self.in_teardown。这与发布说明中continue 不向低层传播、recursive 才传播的描述完全一致非递归标签只看最内层父级递归标签则沿整个调用链生效。Fail、Run Keyword And Continue On Failure等关键字的行为则定义在 src/robot/libraries/BuiltIn.py 与 src/robot/errors.py 的异常体系里配合 src/robot/running/userkeywordrunner.py 在失败时向执行上下文查询是否继续。核心增强二自动参数转换Argument Conversion增强自动参数转换是 Robot Framework 将测试数据中的字符串自动转换成关键字参数类型如int、float、枚举等的机制。4.1 在三个方面增强了它。支持派生枚举 IntEnum 与 IntFlag4.1 开始支持 Python 的派生枚举类型IntEnum与IntFlagissue #3910。与普通Enum一样可以使用成员名作为值除此之外由于二者本质上是int的子类还可以直接使用成员的整数值。从 src/robot/running/arguments/typeconverters.py 的EnumConverter可以看出底层实现当枚举类型是int的子类时value_types会额外允许整数输入(str, int)_convert会先尝试按整数值查找成员_find_by_int_value再按成员名支持大小写与规范化匹配查找。举例说明若库关键字声明了如下参数from enum import IntEnum class Color(IntEnum): RED 1 GREEN 2 def set_color(color: Color): ...那么调用Set Color RED、Set Color red和Set Color 2都能得到Color.GREEN整数值入参是 4.1 之前不具备的能力。数字分隔符空格与下划线int、float与Decimal的转换现在支持在数字中使用空格和下划线作为千位分隔符issue #4026例如2 000 000。从 src/robot/running/arguments/typeconverters.py 的_remove_number_separators可以看到实现方式对字符串中的每个 和_字符直接移除后交给 Python 内建转换。因此以下写法等价${int} Convert To Integer 2 000 000 ${int} Convert To Integer 2_000_000 ${float} Convert To Number 3.14 15 # 也会被接受整数进制前缀十六进制 / 八进制 / 二进制整数转换现在支持0x、0o、0b前缀分别表示十六进制、八进制和二进制issue #3909。例如以下三种写法都能得到整数1700xAA 0o252 0b 1010 1010注意最后一个例子由于 4.1 同时支持空格分隔符0b 1010 1010中的空格会被移除后按二进制解析这与文档中的示例完全吻合。底层实现在 src/robot/running/arguments/typeconverters.py 的_get_base将值转为小写后检查是否恰好包含一个0x/0o/0b前缀允许前置/-号据此确定进制基数并调用int(value, base)。因此-0xAA、0o252这类带符号写法同样受支持。向后不兼容变更Backwards Incompatible ChangesRobot Framework 4.1 与 4.0 基本保持向后兼容但有两处变更可能影响部分用户升级前需重点评估。--doc与--metadata支持从文件读取这是 4.1 最值得注意的破坏性变更issue #4008如果--doc或--metadata传入的值指向一个已存在的文件那么实际使用的文档内容将从该文件中读取而不再像旧版本那样把路径字符串原样作为文档内容。底层实现位于 src/robot/conf/settings.py 的_process_doc当值是Path对象或值是一个已存在文件且值与自身去除首尾空白后相等即整个值就是路径本身、没有夹带其他内容时用 UTF-8 编码读取文件内容作为文档读文件失败则抛出配置错误。_process_metadata复用了同一套逻辑src/robot/conf/settings.py。旧版中把路径当文档值的用法在新版会意外变成读取文件内容。规避方法是给值增加一点额外内容让整个值不再等于文件路径哪怕加一个空格都行。文档给出的例子robot --metadata Example: file.txt tests.robot注意由于该值带有Example: 前缀它不等于裸路径file.txt因此不会被识别为文件路径仍会作为字面元数据值使用。String 库方法重命名String 库的两个方法为了一致性被重命名issue #3890旧方法名新方法名should_be_uppercaseshould_be_upper_caseshould_be_lowercaseshould_be_lower_case由于 Robot Framework 的关键字匹配对下划线不敏感underscore insensitive在.robot测试中使用这些关键字时新旧写法都能匹配到普通用户无感知只有以编程方式调用这些 Python 方法的代码需要更新。对应实现位于 src/robot/libraries/String.py。其他行为变更发布说明还提醒任何代码变更都可能影响某些人的工作流文档引用了 xkcd 1172 的梗因此强烈建议在生产环境使用前先在测试环境中验证新版本。弃用特性Deprecated FeaturesPython 2 支持进入末期Robot Framework 4.1 是最后一个支持 Python 2 的版本issue #34574.1.x 的补丁版本如 4.1.1仍会支持 Python 2但随后的 Robot Framework 5.0 将要求 Python 3.6 或更高版本。相应地Jython 与 IronPython 的支持也随之弃用——除非这两个项目发布兼容 Python 3.6 的版本否则支持不会恢复。对于仍在 Python 2 环境上运行的团队这应作为升级 Python 运行时的重要时间节点。内置 Tidy 弃用内置的 Tidy 工具用于格式化/清理测试数据被弃用issue #4004官方推荐改用功能更强大的外部工具 RoboTidy。内置 Tidy 将在 Robot Framework 5.0 中彻底移除。仍依赖内置 Tidy 的流水线应尽早迁移到 RoboTidy 或切换到支持其 CLI 的替代方案。完整修复与增强清单4.1 共包含 28 个 issue含 enhancement 与 bug以下按优先级归类完整清单见 rf-4.1.rst高优先级highID类型摘要#4009bugRebot 在测试用例级存在 IF 结构时使用--removekeywords会生成无效的 output.xml#4036bug测试包含ELSE分支时使用--expandkeywords会导致日志生成失败#2285enhancement支持用测试与关键字标签控制 continue-on-failure 模式#3910enhancement自动参数转换支持IntEnum与IntFlag中优先级mediumID类型摘要#3798bug已安装 wxPython 时 Screenshot 库阻止执行优雅终止#3973bug测试被监听器listener置为失败时不会触发--exitonfailure模式#3985bug用关键字设置的标签不出现在 dry-run 日志中dry-run 模式现支持用Set Tags/Remove Tags修改标签#3994bug套件 teardown 失败时 SKIP 的测试被标记为失败#3996bug测试在 teardown 中被跳过时错误触发--exitonfailure#4012bug小浏览器窗口中关键字文档滚动条问题Libdoc HTML 输出#4030bugLibdoc 存储数据类型文档时带有多余缩进#4034bug用户关键字参数中{varargs}带默认值未正确报告为错误#3209enhancementWait Until Keyword Succeeds支持严格重试间隔#3398enhancementteardown 中的执行应在关键字超时后继续#3818enhancementRebot 合并结果时不应考虑 SKIP 状态#3884enhancementBuiltInShould Be Equal等比较关键字支持折叠空白#3909enhancementint类型参数转换支持二进制/八进制/十六进制值#3934enhancementRemote二进制转换支持 0-255 范围的 Unicode 字符不再局限于 0-127#3946enhancement解析器应检测用户关键字定义中的无效参数#4004enhancement弃用内置 Tidy改用外部 RoboTidy#4008enhancement支持从文件读取--doc与--metadata#4026enhancement参数转换支持空格与下划线作为数字分隔符#4037enhancement支持对允许键访问的列表使用${var}[key]语法低优先级lowID类型摘要#4027bug测试在 teardown 失败且 skip-on-failure 激活时错误消息不正确#4035bug所有测试都被跳过时日志展开不正确#3890enhancementStringshould_be_uppercase重命名为should_be_upper_caselower 同理#3991enhancement正式移除 Settings 段使用冒号:的支持#4003enhancement移除安装说明中的过时信息与核心功能对应的测试验证上文提到的 continue-on-failure 标签行为其完整验收测试在 atest/robot/running/continue_on_failure_tag.robot覆盖了测试级标签、Set Tags动态设置、用户关键字内外嵌套、FOR/IF/Run Keywords 内部、模板Template、Setup/Teardown、stop 与 recursive-stop 标签组合等四十余个场景测试数据本身见 atest/testdata/running/continue_on_failure_tag.robot。参数转换相关的测试数据集中在 atest/testdata/keywords/type_conversion/可直接复现验证 4.1 的进制、分隔符与枚举转换行为。贡献与致谢Robot Framework 4.1 的开发由 Robot Framework Foundation 及其近 50 家成员组织赞助同时得到了开源社区的诸多贡献完整名单见 rf-4.1.rst其中与本文核心特性直接相关的包括Oliver Boehmer用测试/关键字标签控制 continue-on-failure 模式#2285Oliver SchwanebergWait Until Keyword Succeeds支持严格重试间隔#3209Sergey TupikovShould Be Equal等比较关键字支持折叠空白#3884Mikhail Tuev修复测试含 IF 结构时--removekeywords的问题#4009并重命名 String 库方法#3890Vinay Venneladry-run 模式支持用Set Tags/Remove Tags修改标签#3985。升级建议小结针对从 4.0 升级到 4.1 的团队结合本文内容给出如下检查清单审计--doc/--metadata用法确认是否有把文件路径当作文档值的用法必要时在值中附加空格或前缀以维持原行为排查程序化调用检查是否有代码直接调用 String 库的should_be_uppercase/should_be_lowercase方法如有则改为新名称规划 Python 2 迁移4.1 是最后的 Python 2 版本若仍依赖 Python 2/Jython/IronPython需要为 Robot Framework 5.0 提前规划 Python 3.6 运行环境迁移内置 Tidy将格式化流程切换到 RoboTidy为 5.0 移除内置 Tidy 做准备利用新特性用robot:continue-on-failure家族标签简化失败恢复场景用进制/分隔符/IntEnum 参数转换提升测试数据的表达力。赞分享测试RPA接口测试【免费下载链接】robotframeworkGeneric automation framework for acceptance testing and RPA项目地址https://gitcode.com/gh_mirrors/ro/robotframework点击查看免费下载相关推荐Robot Framework 5.1 alpha 2 新特性详解本地化、标签体系重构与执行控制增强Robot Framework 5.1 alpha 2 新特性详解本地化、标签体系重构与执行控制增强 本文基于仓库内发布说明 doc/releasenotes测试RPA接口测试Robot Framework 4.0 beta 2 版本特性全解析SKIP 状态、原生 IF/ELSE 与类型转换增强Robot Framework 4.0 beta 2 版本特性全解析SKIP 状态、原生 IF/ELSE 与类型转换增强 本指南以 Robot Framewo测试RPA接口测试Robot Framework 7.1 版本特性详解Listener 增强、VAR 语法演进与兼容性变更Robot Framework 7.1 版本特性详解Listener 增强、VAR 语法演进与兼容性变更 Robot Framework 7.1 于 2024测试RPA接口测试创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门