Robot Framework 3.1 beta 1 发布说明深度解析:RPA 任务模式、参数自动类型转换与向后兼容变革
发布时间:2026/9/23 10:28:29 作者:尧图编辑部 阅读量:1,286

Robot Framework 3.1 beta 1 发布说明深度解析RPA 任务模式、参数自动类型转换与向后兼容变革【免费下载链接】robotframeworkGeneric automation framework for acceptance testing and RPA项目地址: https://gitcode.com/gh_mirrors/ro/robotframeworkRobot Framework 3.1 beta 12018 年 10 月 26 日发布是该框架向通用自动化平台演进的关键预览版本它首次引入了面向 RPA机器人流程自动化的任务术语体系、基于 Python 3 类型注解的自动参数类型转换、named-only命名独占参数支持并修复了超时场景下 output.xml 偶发损坏的棘手问题。通过本文你将系统掌握 3.1 版本的六大核心新特性、完整的安装方式、必须知晓的向后不兼容变更、已弃用与即将弃用的语法以及对应源码实现路径。安装与版本获取如果已安装 pip可直接运行以下命令安装最新可用预发布版本pip install --pre --upgrade robotframework或精确安装本版本pip install robotframework3.1b1也可以从 PyPI 下载源码发行包手动安装更多安装方式参见 INSTALL.rst。3.1 版本同时调整了发行方式开始提供 wheel 发行包安装更快源码发行包格式由 tar.gz 改为 zipWindows 下的robot/rebot启动脚本从.bat改为.exe包装器。一、RPA 支持任务Task术语体系RPA 指自动化那些为人类设计、涉及大量 GUI 操作的业务流程。Robot Framework 作为自动化工具一直能胜任此类工作但用测试用例来描述非测试场景始终有些别扭。3.1 迈出了使其成为正式 RPA 工具的第一步——允许创建tasks任务而非 tests测试并在执行任务时让报告与日志统一使用 task 术语。启用 RPA 模式有两种方式使用新的*** Tasks ***或*** Task ***表头代替常规的*** Test Cases ***。适合数据本身强调任务语义的场景。注意将包含任务的文件与包含测试的文件混在一起运行是错误行为。使用新的--rpa命令行选项。适合需要兼容旧版本 Robot Framework 的数据以及不支持新表头的编辑器场景。Rebot 同样支持--rpa因此可以先按测试执行生成报告和日志时再追加--rpa选项。无论以何种方式启用生成的报告与日志都会使用 task 而不是 test。从当前仓库源码可以确认该机制仍然存在执行器入口 src/robot/run.py 与 src/robot/rebot.py 均声明了--rpa选项词法解析层 src/robot/parsing/lexer/context.py 负责识别 Tasks 表头模型层 src/robot/model/testsuite.py 会在任务与测试混跑时提示使用--rpa或--norpa明确执行模式。配套便利功能新增--task命令行选项作为现有--test的别名可用Task Setup、Task Teardown、Task Template、Task Timeout设置代替Test Setup/Teardown/Template/Timeout可用Set Task Variable关键字代替Set Test Variable。二、自动参数类型转换默认情况下所有未以变量形式指定的参数都会以 Unicode 字符串形式传给基于 Python 的关键字。例如*** Test Cases *** Example Example Keyword 42 False从 3.1 开始可以借助几种方式为关键字参数指定类型Robot Framework 会自动完成转换。2.1 基于 Python 3 函数注解使用 Python 3 时可直接利用函数注解PEP 3107显式声明类型def example_keyword(count: int, case_insensitive: bool True): if case_insensitive: # ...2.2 基于keyword装饰器keyword装饰器方式同时兼容 Python 2既可用字典按参数名映射类型也可用列表按位置映射keyword(types{count: int, case_insensitive: bool}) def example_keyword(count, case_insensitiveTrue): if case_insensitive: # ... keyword(types[int, bool]) def example_keyword(count, case_insensitiveTrue): if case_insensitive: # ...2.3 基于默认值的隐式类型推断即使参数没有显式类型标注Robot Framework 仍会尝试从参数默认值推断类型def example_keyword(count-1, case_insensitiveTrue): if case_insensitive: # ...从源码实现看类型转换的核心在 src/robot/running/arguments/typeconverters.py 的TypeConverter类体系它按类型注册转换器register类方法、依据TypeInfo选择转换器覆盖 int/float/bool、Decimal、datetime/date/timedelta、Enum、Path 等常见类型src/robot/running/arguments/argumentconverter.py 的ArgumentConverter.convert则在调用关键字前把字符串参数转换为目标类型。相关的字符串转换能力可参见 src/robot/libraries/BuiltIn.py 中的Convert To Number、Convert To Boolean等关键字。三、Named-only 参数支持Python 3 支持 keyword-only 参数PEP 3102Robot Framework 3.1 引入相同机制但使用术语named-only arguments。该语法可用于三类场景Python 3 测试库、用户关键字、动态库。Python 3 库示例def sort_words(*words, case_sensitiveFalse): key str.lower if case_sensitive else None return sorted(words, keykey)*** Test Cases *** Example Sort Words Foo bar baZ Sort Words Foo bar baZ case_sensitiveTrue用户关键字使用新语法*** Keywords *** With Varargs [Arguments] {varargs} ${named} Log Many {varargs} ${named} Without Varargs [Arguments] {} ${first} ${second}default Log Many ${first} ${second}当前仓库中该机制依然完整参数映射与校验位于 src/robot/running/arguments/ 目录argumentmapper.py、argumentparser.py、argumentvalidator.py等named-only 参数作为独立类别处理API 文档 src/robot/api/interfaces.py 详细说明了 named-only 参数与普通参数、默认值的关系Libdoc 的 JSON/XML 构建器src/robot/libdocpkg/jsonbuilder.py、src/robot/libdocpkg/xmlbuilder.py也会单独列出named_only参数保证文档生成正确。四、其他重要增强4.1 修复超时导致的 output.xml 偶发损坏此前偶有 output.xml 文件损坏、无法生成日志与报告的反馈问题难以复现可能源于 Robot Framework 自身或配套库/工具。issue #2839 证明当使用 Robot Framework 自身的测试与关键字超时、且关键字通过编程式日志接口记录日志时就可能触发该问题。此问题已在 3.1 修复。4.2 嵌套列表与字典变量项访问此前已有访问列表/字典变量项的语法但仅支持直接项。3.1 解除了该限制可访问任意深度的嵌套项${var}[key][0]这对处理 REST 接口常见的 JSON 对象尤为实用。同时统一了项访问语法无论变量是列表还是字典都使用${var}[0]与${var}[key]。旧语法{var}[0]、{var}[key]仍可用但将来会被弃用此外还支持对列表变量做切片访问如${var}[2:]。4.3 资源文件的*.resource扩展名资源文件现在可以使用专用扩展名例如login.resource与包含测试用例的*.robot文件区分开。*.robot扩展名对资源文件依旧有效且没有弃用计划。4.4 无效测试数据时的显式报错以下两种情况此前会被静默忽略现在会明确报错执行目录时某个文件解析失败#2857测试数据包含无法识别的节标题#2860。4.5 xUnit 输出兼容性改进为兼容更严格的第三方 xUnit 消费工具输出格式做了调整详见下文向后不兼容变更同时为testsuite元素补充了time属性。4.6 IronPython 2.7.9 不再需要外部 ElementTreeIronPython 2.7.9 终于内置了可用的 ElementTree 实现Robot Framework 3.1 直接使用标准 ElementTree无需再手动安装外部模块。五、向后不兼容变更升级到 3.1 前以下变化需要重点关注不再支持 Python 2.6 与 3.3均已达到生命周期终点。旧启动脚本删除pybot、jybot、ipybot、jyrebot、ipyrebot全部移除统一使用 3.0 引入的robot与rebot。模式匹配语法变化glob 风格模式用于--test、--include、Should (Not) Match、Run Keyword And Expect Error及 XML 库的各种 Match 关键字新增[chars]字符类语法方括号因此成为特殊字符原使用方括号字面量的模式需改用?匹配单个字符。Run Keyword And Expect Error新增非 glob 精确匹配能力。同时修复了匹配字符串尾部换行被忽略的缺陷此前foobar\n会被视为匹配*bar与foobar。${var}[xxx]一律视为变量项访问如需字面量须转义为${var}\[xxx]。命令行值中的下划线不再自动转为空格--name、--doc、--metadata、--tagdoc、--tagstatcombine、--logtitle、--reporttitle等选项原样使用输入值需要空格时请用引号--doc We got spaces或反斜杠转义--doc We\ got\ spaces。xUnit 输出格式跳过数属性由skip改为skipped时间由整数改为浮点数testsuite元素新增time属性。日志/报告不再支持 IE 8等古老浏览器内部 JavaScript 依赖已更新。移除已弃用语法*** Metadata ***/*** User Keywords ***表头、Document设置、Pre/Post Condition、带多余空格的库名导入如Selenium Library、大小写不敏感的WITH NAME别名导入均不再可用。其他兼容性影响关键字文档的第一逻辑行会包含进日志文件动态库 API 的run_keyword若接受 kwargs所有命名参数会作为 kwargs 传入而非映射为位置参数Run Keyword And Ignore Error等关键字放行Pass Execution等传递异常自动添加的robot-exit标签更名为robot:exitCollections 关键字不再支持字符串操作单独的FOR区分大小写即可开启 for 循环若关键字恰好命名为FOR请用For调用模板数据中的FOR需转义为\FOR计时字符串格式更严格01:02:03:123、01:02foo不再合法编程 API 中已弃用的robot.running.TestSuite.(imports|variables|user_keywords)属性被移除。六、已弃用特性3.1 开启了多项弃用流程为 3.2 的更严格解析做准备HTML 数据格式彻底弃用未来版本完全不再支持TSV 格式同样弃用但与纯文本格式完全兼容时可通过--extension tsv或--extension robot:tsv继续解析。默认只解析*.robot文件*.txt、*.rst/*.rest等将弃用用--extension rst或--extension robot:rst:rest规避弃用警告。节名与设置名不能再包含内部空格*** S e t t i n g s ***、Testsetup、[ S e t u p ]弃用应使用*** Settings ***、Test Setup、[Setup]仍不区分大小写且名称两侧允许空格。--escape选项弃用改用命令行常规转义如-v VAR:Value with spaces。--warnonskippedfiles弃用解析失败现已显式报错该选项不再需要。for 循环分隔符更严格仅IN、IN RANGE、IN ZIP、IN ENUMERATE精确匹配大小写与空格敏感in、INRANGE等变体将来失效。七、即将到来的弃用预告for 循环标记:FOR→FORFOR区分大小写已可作为循环起始标记旧式:FOR不区分大小写、至少一个冒号仍可用但将来弃用建议立即改用新写法。列表项访问统一为新语法${var}[0]/${var}[key]是新标准含嵌套{var}[0]与{var}[key]将来弃用建议尽早迁移。八、完整修复与增强清单3.1 beta 1 共包含 72 个 issue其中关键条目如下按优先级排列优先级代表 Issue说明critical#2839超时场景下日志可能损坏输出文件beta 1 修复critical#2415Windows 下改用 .exe 包装器替代 .batcritical#2788术语配置以支持通用自动化RPAcritical#2819 / #2820弃用 HTML/TSV 数据格式弃用默认解析非 .robot 文件critical#2890 / #2947基于注解 /keyword装饰器的自动参数转换high#2857 / #2860目录执行解析失败、未识别节标题时显式报错high#2978修复与第三方工具的 xUnit 兼容性high#1734 / #2276wheel 发行包移除 Python 2.6/3.3 支持high#2555 / #2896 / #2897Python 3 库 / 用户关键字 / 动态库的 named-only 参数high#2601嵌套列表与字典变量项访问${var}[key][0]high#2818移除 pybot 等旧启动脚本high#2891 / #2932.resource扩展名基于默认值的类型推断medium#2399 / #2921命令行下划线不再转空格计时字符串格式更严格medium#2471 / #2990 / #2991glob 模式[...]语法FOR标记for 分隔符收紧medium#2930 / #2799 / #2539动态库 kwargs 行为传递异常放行robot:exit标签更多条目如 #2576 报告错误信息行数可配置、#2973 列表变量切片访问、#2925 Libdoc 显示注解等可查阅原发布说明全文。3.1 也是首个由 Robot Framework Foundation 赞助的重大版本RPA 相关开发由 Siili、Knowit、Vala、Qentinel、Eficode 等组织单独赞助多位社区贡献者参与实现了 named-only 参数、xUnit 兼容性修复、timeout 损坏问题复现等工作。小结Robot Framework 3.1 beta 1 是一次承前启后的发布向前它通过*** Tasks ***表头与--rpa选项铺平了 RPA 应用道路通过注解/装饰器/默认值三通道实现参数自动类型转换并补齐 named-only 参数与嵌套变量访问等工程能力向后它坚决地清理了 Python 2.6/3.3、旧启动脚本与各类遗留语法同时为 HTML 数据格式、*.txt/*.rst解析、:FOR标记等启动了有序弃用流程。对于计划升级的用户建议对照向后不兼容变更一节逐项核对现有测试数据、库代码与第三方工具依赖。【免费下载链接】robotframeworkGeneric automation framework for acceptance testing and RPA项目地址: https://gitcode.com/gh_mirrors/ro/robotframework创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考