ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Robot Framework 4.1 RC1 深度解析:continue-on-failure 标签控制、参数转换增强与兼容性变更指南

Robot Framework 4.1 RC1 深度解析:continue-on-failure 标签控制、参数转换增强与兼容性变更指南 测试RPA接口测试【免费下载链接】robotframeworkGeneric automation framework for acceptance testing and RPA项目地址https://gitcode.com/gh_mirrors/ro/robotframework点击查看免费下载导读本文基于 doc/releasenotes/rf-4.1rc1.rst 发布说明系统梳理 Robot Framework 4.1 首个候选版本RC1的核心特性用测试/关键字标签驱动 continue-on-failure 失败续跑模式、自动参数转换的三大增强以及--doc/--metadata文件读取等向后不兼容变更与 Python 2、内置 Tidy 的弃用预告。文章将发布说明与仓库源码、验收测试一一对应读者读完既可掌握 4.1 的新能力与升级迁移清单也能从 src/robot/running/context.py、src/robot/running/arguments/typeconverters.py 等实现层面理解其底层原理。版本概览与安装方式Robot Framework 4.1 是 4.0 之后的功能版本feature releaseRC1 于 2021 年 7 月 9 日发布最终正式版计划于 2021 年 7 月 19 日发布。该候选版本包含 4.1 的全部计划变更主要亮点集中在continue-on-failure 模式的可标签化控制与自动参数转换argument conversion上同时附带一批 bug 修复。安装最新可用预发布版本pip install --pre --upgrade robotframework或精确安装本版本pip install robotframework4.1rc1也可以从 PyPI 下载源码分发包手动安装。更详细的安装途径参见仓库根目录的 INSTALL.rst。由于是 RC 版本升级前建议先在测试环境验证再决定是否用于生产后文向后不兼容变更一节会给出具体排查点。核心增强一用标签控制 continue-on-failure 模式背景从库关键字专属到人人可用Robot Framework 长期支持所谓的可续跑失败continuable failures测试用例失败后仍允许继续执行后续步骤。在 4.1 之前这项能力只能通过两种途径开启库关键字使用特殊异常continuable exception主动声明失败可续跑调用 BuiltIn 库的Run Keyword And Continue On Failure关键字。也就是说能否失败后继续完全取决于关键字实现方普通测试作者很难按自己的意愿控制。新增的两个特殊标签4.1 引入两个保留标签让续跑模式的使用门槛大幅降低对应 issue #2285由社区贡献者 Oliver Boehmer 实现robot:continue-on-failure在带有该标签的测试用例或用户关键字内启用续跑模式。只要其中任意关键字失败下一个关键字仍会照常执行。该模式不会向更低层级的关键字传播——即带标签的测试调用了一个不带标签的用户关键字那么该用户关键字内部失败后会立即停止执行回到带标签的测试或关键字层级才恢复续跑。robot:recursive-continue-on-failure如果希望续跑行为递归生效即穿透到下层用户关键字内部使用该标签。此外标签名大小写不敏感也支持变量替换。例如在测试数据 atest/testdata/running/continue_on_failure_tag.robot 中可以看到Set Tags ROBOT:CONTINUE-ON-${FAILURE}其中${FAILURE}为变量与直接在[Tags]中写robot:continue-on-failure效果相同。源码视角标签如何驱动续跑决策续跑模式的判定逻辑集中在 src/robot/running/context.py 的continue_on_failure()方法中。其核心思路是沿当前执行栈自内向外收集父级用户关键字实现 当前测试依次检查每个父级的标签命中即返回决策def continue_on_failure(self, defaultFalse): parents [result for _, result, implementation in reversed(self.steps) if implementation and implementation.type USER KEYWORD] if self.test: parents.append(self.test) for index, parent in enumerate(parents): robot parent.tags.robot if index 0 and robot(stop-on-failure): return False if index 0 and robot(continue-on-failure): return True if robot(recursive-stop-on-failure): return False if robot(recursive-continue-on-failure): return True return default or self.in_teardown从该实现可以读出几个关键行为标签优先级stop-on-failure/recursive-stop-on-failure用于显式关闭续跑且停跑标签优先于续跑标签被检查代码中先判定 stop 再判定 continue。就近原则robot:continue-on-failure只对最内层index 0的父级生效这正是不向下传播的代码根源而robot:recursive-continue-on-failure会在任意层级的父级上生效从而实现递归续跑。teardown 特例当没有命中任何特殊标签时处于 teardown套件/测试/关键字清理阶段默认继续执行return default or self.in_teardown与 4.1 中teardown 中关键字超时后应继续执行#3398的改进相呼应。与之配套异常对象在 src/robot/errors.py 中通过dont_continue属性标记是否阻断续跑并支持向子异常传播库关键字产生的续跑失败最终在错误聚合时合并为多个失败multiple failures报告。验收测试覆盖仓库的验收测试 atest/robot/running/continue_on_failure_tag.robot 系统验证了该特性在各种执行结构下的行为包括测试用例带标签、通过Set Tags动态设置标签含大小写/变量替换用户关键字带标签、测试带标签而用户关键字不带标签验证不传播嵌套用户关键字带与不带标签的组合FOR 循环、IF 结构、Run Keywords内的续跑行为robot:recursive-continue-on-failure与robot:recursive-stop-on-failure、robot:stop-on-failure的交互。核心增强二自动参数转换的三项改进支持 IntEnum 与 IntFlag自动参数转换现在支持 Python 的派生枚举IntEnum和IntFlag#3910。与其他枚举一样参数可以传成员名由于IntEnum/IntFlag同时是整数类型参数还可以直接传成员的整数值。在 src/robot/running/arguments/typeconverters.py 的EnumConverter中可以找到依据value_types在枚举是int子类时扩展为(str, int)转换失败后还会回退到按整数值查找成员_find_by_int_value。这意味着一个类型为IntEnum的参数传入MEMBER、member归一化匹配忽略下划线与连字符或170这类整数都能得到正确成员。数字分隔符空格与下划线int、float和Decimal的数字转换现在支持空格与下划线作为分隔符例如2 000 000#4026。实现位于TypeConverter._remove_number_separatorstypeconverters.py转换前统一剥离字符串中的空格与下划线FloatConverter、DecimalConverter、IntegerConverter均复用了这一逻辑。整数进制的显式书写整数转换支持十六进制、八进制、二进制前缀十六进制0x如0xAA八进制0o如0o252二进制0b如0b 1010 1010可与分隔符叠加。以上三种写法都等价于十进制整数170#3909。对应实现是IntegerConverter._get_basetypeconverters.py先剥离分隔符再匹配0x/0o/0b前缀允许正负号前缀确定进制后调用int(value, base)完成转换。转换失败如精度丢失时给出明确的错误信息保证失败可诊断。向后不兼容变更与迁移要点Robot Framework 4.1 整体上与 4.0 保持兼容但以下两处变化可能影响部分用户升级前务必核对--doc与--metadata支持从文件读取值#4008如果--doc或--metadata传入的值恰好指向一个已存在的文件4.1 会读取该文件内容作为实际值而早期版本会直接把路径字符串当作值。这主要影响 metadata 场景文档路径不太常见。实现位于 src/robot/conf/settings.py 的_process_doc当值为Path对象或值为文件路径且与自身去除空白后的内容一致时按 UTF-8 读取文件内容读失败会抛出Reading documentation from path failed: error的明确错误。如果确实想以文件路径字符串作为真正的值只需给值追加额外内容哪怕一个空格以规避路径识别例如--metadata Example: file.txtString 库方法重命名#3890String 库的should_be_uppercase与should_be_lowercase分别更名为should_be_upper_case与should_be_lower_case以保持命名一致性。由于 Robot Framework 的关键字匹配对下划线不敏感underscore insensitive正常的关键字调用不受影响只有以编程方式直接调用这两个 Python 方法如from robot.libraries.String import String; String().should_be_uppercase(...)的代码需要更新。另外4.1 正式移除在 Settings 段使用冒号:的旧式支持#3991如仍有旧格式配置需一并调整。弃用预告为 5.0 做准备Python 2 支持#3457Robot Framework 4.1 是最后一个支持 Python 2 的版本4.1 的后续 bug 修复版本仍会兼容 Python 2但 Robot Framework 5.0 将要求 Python 3.6 及以上。相应地Jython 与 IronPython 的支持也随之弃用——除非这些项目未来发布兼容 Python 3.6 的版本否则不会再恢复支持。仍在 Python 2 上的团队应尽快规划迁移。内置 Tidy 弃用#4004内置的 Tidy 工具数据格式整理工具被弃用官方推荐迁移到功能更强大的外部工具 RoboTidy。内置 Tidy 将在 Robot Framework 5.0 中彻底移除。已把 Tidy 集成进 CI/脚本的团队需要在此之前切换。值得关注的其余修复与增强除两大核心特性外RC1 还修复/增强了一批高频问题Rebot 相关修复--removekeywords与用例级 IF 结构组合时生成无效 output.xml 的问题#4009high修复--expandkeywords遇到ELSE分支时日志生成失败#4036high合并结果时不再考虑 SKIP 状态#3818。执行行为修复--exitonfailure未在监听器listener判定测试失败时生效#3973以及在 teardown 中被跳过时误触发#3996两个问题teardown 中关键字超时后应继续执行#3398修复套件 teardown 失败导致 skipped 测试显示为 fail#3994。内置库增强Wait Until Keyword Succeeds支持严格重试间隔retry time with strict interval#3209Should Be Equal等比较关键字支持折叠空白#3884Screenshot 库修复 wxPython 安装环境下阻碍执行优雅终止的问题#3798Remote 库二进制转换支持 0-255 全范围 Unicode 字符#3934。dry-run 模式允许通过Set Tags、Remove Tags修改标签并反映到 dryrun 日志中#3985。变量与参数校验支持${var}[key]语法作用于同时允许按键访问的列表#4037解析器检测用户关键字定义中的非法参数如{varargs}带默认值不再静默#4034、#3946。Libdoc修复关键字文档在窄浏览器窗口下的滚动条问题#4012、数据类型文档多余缩进#4030、全部测试被跳过时日志未正确展开#4035等。4.1 RC1 完整 Issue 清单28 项下表为发布说明记录的完整问题列表ID 为原文档编号可按里程碑在 issue tracker 检索ID类型优先级摘要#4009bughighRebot 在--removekeywords与用例级 IF 组合时生成无效 output.xml#4036bughigh--expandkeywords且测试含ELSE分支时日志生成失败#2285enhancementhigh支持用测试/关键字标签控制 continue-on-failure 模式#3910enhancementhigh自动参数转换支持IntEnum与IntFlag#3798bugmedium安装 wxPython 时 Screenshot 库阻碍执行优雅终止#3973bugmedium监听器判定测试失败时--exitonfailure未启动#3985bugmediumdryrun 日志中不显示用关键字设置的标签#3994bugmedium套件 teardown 失败导致 skipped 测试显示为 fail#3996bugmediumteardown 中测试被跳过时错误触发--exitonfailure#4012bugmedium小浏览器窗口下关键字文档滚动条问题#4030bugmediumLibdoc 数据类型文档带多余缩进#4034bugmedium用户关键字{varargs}带默认值未正确报错#3209enhancementmediumWait Until Keyword Succeeds支持严格间隔重试#3398enhancementmediumteardown 中关键字超时后应继续执行#3818enhancementmediumRebot 合并结果时不应计入 SKIP 状态#3884enhancementmediumBuiltIn 比较关键字支持折叠空白#3909enhancementmediumint参数转换支持二进制/八进制/十六进制#3934enhancementmediumRemote 二进制转换支持 0-255 Unicode 字符#3946enhancementmedium解析器检测用户关键字定义中的非法参数#4004enhancementmedium弃用内置 Tidy改用外部 RoboTidy#4008enhancementmedium支持--doc与--metadata从文件读取#4026enhancementmedium参数转换支持空格/下划线数字分隔符#4037enhancementmedium${var}[key]支持可按键访问的列表#4027buglowskip-on-failure 生效时 teardown 中失败的错误信息有误#4035buglow全部测试被跳过时日志未正确展开#3890enhancementlowString 库should_be_uppercase更名为should_be_upper_caselower 同理#3991enhancementlow正式移除 Settings 段冒号:用法#4003enhancementlow清理安装说明中的过时信息总结与升级建议Robot Framework 4.1 RC1 是一次体验导向的功能版本robot:continue-on-failure/robot:recursive-continue-on-failure让失败续跑从库实现细节变成测试作者的日常工具参数转换对枚举、分隔符与进制的支持让数据驱动测试的数据表达更自然。升级路径上需重点核查两处不兼容点--doc/--metadata文件读取、String 库方法重命名并为 Python 2 与内置 Tidy 的 5.0 移除提前制定迁移计划。建议先在预发布环境跑一遍 atest 目录下的相关验收测试场景如 continue_on_failure_tag.robot确认既有套件行为符合预期后再全面升级。赞分享测试RPA接口测试【免费下载链接】robotframeworkGeneric automation framework for acceptance testing and RPA项目地址https://gitcode.com/gh_mirrors/ro/robotframework点击查看免费下载相关推荐Robot Framework 4.1 版本特性详解continue-on-failure 标签控制与参数转换增强Robot Framework 4.1 版本特性详解continue on failure 标签控制与参数转换增强 导读 Robot Framework 4.测试RPA接口测试Robot Framework 4.0 alpha 2 深度解析全新 SKIP 状态、Libdoc JSON 规格与参数转换增强Robot Framework 4.0 alpha 2 深度解析全新 SKIP 状态、Libdoc JSON 规格与参数转换增强 Robot Framewor测试RPA接口测试Robot Framework 7.1 版本特性详解Listener 增强、VAR 语法演进与兼容性变更Robot Framework 7.1 版本特性详解Listener 增强、VAR 语法演进与兼容性变更 Robot Framework 7.1 于 2024测试RPA接口测试创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表