ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Robot Framework 6.1 版本特性深度解析:JSON 数据格式、外部 Parser API 与执行引擎全面增强

Robot Framework 6.1 版本特性深度解析:JSON 数据格式、外部 Parser API 与执行引擎全面增强 Robot Framework 6.1 版本特性深度解析JSON 数据格式、外部 Parser API 与执行引擎全面增强【免费下载链接】robotframeworkGeneric automation framework for acceptance testing and RPA项目地址: https://gitcode.com/gh_mirrors/ro/robotframework本指南以 Robot Framework 6.1 rc1首个候选发布版2023 年 6 月 5 日发布最终版定于 2023 年 6 月 12 日官方发布说明为核心系统梳理 6.1 的全部新特性、向后不兼容变更与弃用项。6.1 是面向验收测试与 RPA 的通用自动化框架 Robot Framework 的又一特性版本最大的亮点是支持将测试/任务数据与 JSON 互相转换、全新的外部 Parser API以及允许用户关键字混合使用嵌入式参数与普通参数此外还为工具开发者带来大量 API 层面的增强。读完本文你将掌握 JSON 套件序列化/反序列化的完整用法、自定义解析器的三种实现形态、WHILE/FOR IN ZIP 循环的新配置项以及升级 6.1 前必须了解的破坏性变更清单。版本概况与安装方式Robot Framework 6.1 是一个特性版本feature release支持把 Robot Framework 数据转换为 JSON 及反向转换、提供新的外部 Parser API、允许在用户关键字中混合嵌入式参数与普通参数并包含面向普通用户与外部工具开发者的多项新功能。rc1 包含所有计划中的修复与特性官方希望所有用户在实际环境中测试以在正式版发布前发现可能的回归。如果你已安装 pip可通过以下命令安装最新可用版本pip install --pre --upgrade robotframework或精确安装 6.1rc1 版本pip install robotframework6.1rc1也可以从 PyPI 下载源码分发包手动安装。更详细的安装方式参见仓库根目录的 INSTALL.rst。需要注意的是本文所有特性描述以 6.1 时间节点的 rc1 为准个别行为如FOR IN ZIP的默认模式在后续版本中另有演进仓库源码中已带有相应注释详见下文。最重要的新特性Most important enhancementsJSON 数据格式套件与 JSON 互转Robot Framework 6.1 最大的新特性是支持把测试/任务数据转换为 JSON并可从 JSON 重建套件issue #3902。该功能主要有三大应用场景跨进程、跨机器传输数据在一台机器上把套件转换为 JSON在另一台机器上重建。保存快速解析的单文件套件把由普通 Robot Framework 数据构建的套件保存为单个 JSON 文件解析更快。供外部工具生成测试/任务的备选数据格式。该特性更多是为工具开发者而非普通用户设计。核心功能如下序列化套件为 JSON使用TestSuite.to_json方法。无参数调用时返回 JSON 字符串也接受路径或已打开的文件用于写入 JSON 数据并支持 JSON 格式化相关配置选项from robot.running import TestSuite # 基于文件系统数据构建套件 suite TestSuite.from_file_system(/path/to/data) # 以字符串形式获取 JSON 数据 data suite.to_json() # 以自定义缩进保存 JSON 到文件 suite.to_json(data.rbt, indent2)如果希望先处理 Python 数据结构、再自行转换为 JSON 或其他格式可以改用TestSuite.to_dict。其底层实现在 src/robot/model/testsuite.py套件名称、文档、元数据、source、rpa 模式、setup/teardown、tests、suites 等属性会按需写入字典。从 JSON 创建套件使用TestSuite.from_json同时支持 JSON 字符串与 JSON 文件路径from robot.running import TestSuite # 从文件中的 JSON 数据创建套件 suite TestSuite.from_json(data.rbt) # 从 JSON 字符串创建套件 suite TestSuite.from_json({name: Suite, tests: [{name: Test}]})如果数据是 Python 字典可改用TestSuite.from_dict。在仓库的模型层For、TryBranch等控制结构的from_dict还专门保留了 RF 6.1 的兼容逻辑如把旧字段variables迁移为assign见 src/robot/running/model.py。命令行自动解析.rbt文件正常使用robot命令时带.rbt扩展名的 JSON 文件会被自动解析。这包括运行单个 JSON 文件如robot tests.rbt以及运行包含.rbt文件的目录。在源码中.rbt与.json均已注册进内置解析器表见 src/robot/running/builder/builders.pyrbt: json_parser, json: json_parser其解析器实现JsonParser位于 src/robot/running/builder/parsers.py。同时默认识别扩展名列表.robot、.rbt、.robot.rst定义于 src/robot/conf/settings.py 与 src/robot/parsing/suitestructure.py。跨机器传输时的 source 处理TestSuite.to_json/to_dict得到的套件 source 信息是绝对路径格式。如果套件之后在另一台机器上重建source 可能与该机器的目录结构不匹配。为此提供了新的TestSuite.adjust_source方法在导出前把套件 source 改为相对路径重建后再补上正确的根目录from robot.running import TestSuite # 创建套件、调整 source 并转换为 JSON suite TestSuite.from_file_system(/path/to/data) suite.adjust_source(relative_to/path/to) suite.to_json(data.rbt) # 在别处重建套件并相应调整 source suite TestSuite.from_json(data.rbt) suite.adjust_source(root/new/path/to)该方法的实现见 src/robot/model/testsuite.pyrelative_to参数内部调用pathlib.Path.relative_to()生成相对路径无法生成时抛ValueErrorroot参数把给定路径设为 source 的新根目录source 为绝对路径时抛ValueError并会递归调整所有子套件。JSON 数据格式本身由 doc/schema/running.json schema 文件定义。官方也表示 JSON 序列化支持会在未来版本继续增强。外部 Parser API自定义数据格式解析器Parser API 是另一个面向工具开发者的重要新接口issue #1283。它允许创建自定义解析器来支持自己的数据格式甚至可以覆盖 Robot Framework 自带的解析器。解析器通过新的--parser命令行选项启用用法与 listeners 类似支持以名称或路径指定解析器、向解析器类传参等robot --parser MyParser tests.custom robot --parser path/to/MyParser.py tests.custom robot --parser Parser1:arg --parser Parser2:a1:a2 path/to/tests在源码层面--parser选项传入后会经由Importer按名称或路径导入解析器类/模块并用split_args_from_name_or_path切分参数见 src/robot/running/builder/builders.py。形式一模块式解析器最简形态简单场景下解析器可以实现为模块只需具备两个要素一个EXTENSION或extension属性声明支持的扩展名一个parse方法接收源文件路径作为参数from robot.api import TestSuite EXTENSION .example def parse(source): suite TestSuite(nameExample, sourcesource) test suite.tests.create(nameTest) test.body.create_keyword(nameLog, args[Hello!]) return suite如上例所示parse方法必须返回一个TestSuite实例。上例中套件只包含一些演示数据并未真正解析源文件。形式二类式解析器可保持状态并接收命令行参数解析器也可以实现为类这样既能保存状态又能从命令行接收参数。下面的例子不仅演示了这一点还真正处理了源文件from pathlib import Path from robot.api import TestSuite class ExampleParser: def __init__(self, extension: str): self.extension extension def parse(self, source: Path) - TestSuite: suite TestSuite(TestSuite.name_from_source(source), sourcesource) for line in source.read_text().splitlines(): test suite.tests.create(nameline) test.body.create_keyword(nameLog, args[Hello!]) return suite形式三继承可选 Parser 基类支持 parse_init 与 defaults如前面示例所示解析器无需继承任何显式基类或接口。但存在一个可选的Parser基类可以继承示例中有两个与其他示例不同的地方解析器带有可选的parse_init方法用于解析套件初始化文件。parse与parse_init都接受可选的defaults参数。当存在这第二个参数时parse方法会收到一个包含测试相关默认值setup、teardown、tags、timeout的TestDefaults实例这些值来自初始化文件parse_init也能收到它其对默认值所做的修改会被后续调用的parse方法看到。from pathlib import Path from robot.api import TestSuite from robot.api.interfaces import Parser, TestDefaults class ExampleParser(Parser): extension (example, another) def parse(self, source: Path, defaults: TestDefaults) - TestSuite: Create a suite and set possible defaults from init files to tests. suite TestSuite(TestSuite.name_from_source(source), sourcesource) for line in source.read_text().splitlines(): test suite.tests.create(nameline, docExample) test.body.create_keyword(nameLog, args[Hello!]) defaults.set_to(test) return suite def parse_init(self, source: Path, defaults: TestDefaults) - TestSuite: Create a dummy suite and set some defaults. This method is called only if there is an initialization file with a supported extension. defaults.tags (tags, from init) defaults.setup {name: Log, args: [Hello from init!]} return TestSuite(TestSuite.name_from_source(source.parent), docExample, sourcesource, metadata{Example: Value})实战用 Parser 做 Robot 数据预处理最后一个解析器示例充当 Robot Framework 数据文件的预处理器支持 Test Cases 格式的标题除了标准的*** Test Cases ***。这种用法下用TestSuite.from_string、TestSuite.from_model或TestSuite.from_file_system工厂方法构建返回的套件会很方便from pathlib import Path from robot.running import TestDefaults, TestSuite class RobotPreprocessor: extension .robot def parse(self, source: Path, defaults: TestDefaults) - TestSuite: data source.read_text() for header in Settings, Variables, Test Cases, Keywords: data data.replace(f {header} , f*** {header} ***) suite TestSuite.from_string(data, defaultsdefaults) return suite.config(nameTestSuite.name_from_source(source), sourcesource)用户关键字可混合嵌入式参数与普通参数用户关键字如今可以同时使用嵌入式参数embedded arguments和普通参数issue #4234。例如*** Test Cases *** Example Number of horses is 2 Number of dogs is 3 *** Keywords *** Number of ${animals} is [Arguments] ${count} Log to console There are ${count} ${animals}.目前该能力仅对用户关键字生效如果社区有需求未来版本可扩展支持库关键字。支持向列表和字典项赋值Robot Framework 6.1 允许把关键字返回值直接赋给列表项和字典项issue #4546${list}[0] Keyword ${dict}[key] Keyword ${result}[users][0] Keyword这在需要就地修改嵌套数据结构时非常实用。执行期间压平关键字结构robot:flatten标签嵌套的关键字结构——尤其是递归关键字调用以及 WHILE/FOR 循环——会让日志文件因多层嵌套而难以阅读同时也会增大 output.xml 的体积。例如下面这个简单关键字*** Keywords *** Example Log Robot Log Framework在 output.xml 中就会产生这么多内容kw nameExample kw nameLog libraryBuiltIn argRobot/arg docLogs the given message with the given level./doc msg timestamp20230103 20:06:36.663 levelINFORobot/msg status statusPASS starttime20230103 20:06:36.663 endtime20230103 20:06:36.663/ /kw kw nameLog libraryBuiltIn argFramework/arg docLogs the given message with the given level./doc msg timestamp20230103 20:06:36.663 levelINFOFramework/msg status statusPASS starttime20230103 20:06:36.663 endtime20230103 20:06:36.664/ /kw status statusPASS starttime20230103 20:06:36.663 endtime20230103 20:06:36.664/ /kw此前已有的--flattenkeywords选项可以压平这类结构效果很好关键字被压平时其子关键字和控制结构被移除但所有消息msg元素都会保留。不过--flattenkeywords不影响执行期间生成的 output.xml压平发生在 output.xml 被解析时可以节省大量内存。当--flattenkeywords与 Rebot 配合使用时可以生成新的压平后的 output.xml。例如上述结构在压平Example关键字后变为kw nameKeyword doc_*Content flattened.*_/doc msg timestamp20230103 20:06:36.663 levelINFORobot/msg msg timestamp20230103 20:06:36.663 levelINFOFramework/msg status statusPASS starttime20230103 20:06:36.663 endtime20230103 20:06:36.664/ /kw从 Robot Framework 6.1 开始这类压平可以在执行期间完成且无需命令行选项——只需使用新的关键字标签robot:flattenissue #4584压平会自动进行。例如把前面的Keyword改为*** Keywords *** Example [Tags] robot:flatten Log Robot Log Frameworkoutput.xml 中的结果就会是kw nameExample tagrobot:flatten/tag msg timestamp20230317 00:54:34.772 levelINFORobot/msg msg timestamp20230317 00:54:34.772 levelINFOFramework/msg status statusPASS starttime20230317 00:54:34.771 endtime20230317 00:54:34.772/ /kw使用robot:flatten而非--flattenkeywords的主要好处是压平发生在执行期间产出的 output.xml 更小。不过--flattenkeywords有更多配置选项robot:flatten未来可按需增强。公共 API 增加类型信息Robot Framework 有多个供库开发者与工具开发者使用的公共 API这些 API 如今都带有类型提示type hints使使用更加容易TestSuite结构供 listeners、model modifiers、外部解析器及各种工具使用issue #4570Listener APIissue #4568动态库与混合库 APIissue #4567Parsing APIissue #4740Visitor APIissue #4569自定义参数转换器可访问所属库自定义参数转换器custom argument converters自 Robot Framework 5.0 引入issue #4088以来非常实用。6.1 对其增强转换器现在可以轻松访问包含所用关键字的库从而基于库的状态进行转换issue #4510。做法很简单——创建一个接受两个值的转换器第一个值是数据中使用的值与之前完全相同第二个是库实例或模块def converter(value, library): ...只接受一个参数的转换器保持原有行为不变官方没有计划强制要求它们改为接受两个值。JSON 变量文件支持Robot Framework 长期以来支持用 YAML 和 Python 创建变量文件6.1 起也支持 JSON 变量文件issue #4532。例如一个 JSON 文件包含{ STRING: Hello, world!, INTEGER: 42 }可以这样使用*** Settings *** Variables example.json *** Test Cases *** Example Should Be Equal ${STRING} Hello, world! Should Be Equal ${INTEGER} ${42}底层实现在 src/robot/variables/filesetter.py变量文件按扩展名路由.json结尾的路径走 JSON 分支用json.load解析并要求顶层必须是映射mapping否则抛出DataError。此外JSON 变量文件不支持命令行参数传递issue 相关行为见该文件中JSON variable files do not accept arguments的报错。WHILE 循环多项增强Robot Framework 的 WHILE 循环在多个方面得到增强最大的增强是新增可选的on_limit配置选项用于控制在达到配置的循环limit时如何处理issue #4562。默认执行会失败但把该选项设为PASS可以改变这一行为。例如下面的循环运行十次后继续执行*** Test Cases *** WHILE with limit and on_limit WHILE True limit10 on_limitPASS Log to console Hello! END Log to console Hello once more!循环条件现在可省略issue #4576。例如上面的循环头可简化为WHILE limit10 on_limitPASS新增on_limit_message配置选项用于设置在循环超过 limit 而失败时使用的消息issue #4575。修复了 teardown 中循环 limit 失效的 bugissue #4744。在源码 src/robot/running/bodyrunner.py 中可以看到on_limit接受PASS/FAIL两个值on_limit_message用于自定义失败消息limit 支持迭代次数限制与时长限制两种形态。FOR IN ZIP循环长度不匹配行为可配置Robot Framework 的FOR IN ZIP循环行为类似 Python 的zip函数列表长度不一致时较长列表中多余的元素会被忽略。例如下面的循环只执行两次*** Variables *** {ANIMALS} dog cat horse cow elephant {ELÄIMET} koira kissa *** Test Cases *** Example FOR ${en} ${fi} IN ZIP ${ANIMALS} ${ELÄIMET} Log ${en} is ${fi} in Finnish END这种默认行为在遍历自动化系统返回的条目时可能引发问题。例如下面的测试只要Get something返回的条目与期望值匹配无论返回多少项都会通过——如果前三个匹配哪怕返回十项也会成功更糟的是即使Get something什么都没返回测试也会通过*** Test Cases *** Example Validate something expected 1 expected 2 expected 3 *** Keywords **** Validate something [Arguments] {expected} {actual} Get something FOR ${act} ${exp} IN ZIP ${actual} ${expected} Validate one thing ${act} ${exp} END这很糟糕因为它可能造成自动化成功但其实什么都没做的假阳性。Python 自身也有同样的问题Python 3.10 为zip增加了可选参数strict此外 Python 长期提供独立的zip_longest函数会遍历所有值并可能为较短列表补值。为支持与 Python 相同的特性Robot Framework 的FOR IN ZIP循环新增了可选的mode配置选项接受三个值issue #4682STRICT列表长度必须相等否则执行失败。等价于 Pythonzip的strictTrue。SHORTEST较长列表中的元素被忽略。该模式下只要有一个列表耗尽无限长的列表也被支持。这是当前的默认行为。LONGEST最长列表决定迭代次数。较短列表缺失的值用fill选项指定的值填充未指定时用None。等价于 Python 的zip_longest区别是它用fillvalue参数而非fill。所有模式示例如下*** Variables *** {CHARACTERS} a b c d f {NUMBERS} 1 2 3 *** Test Cases *** STRICT mode [Documentation] This loop fails due to lists lengths being different. FOR ${c} ${n} IN ZIP ${CHARACTERS} ${NUMBERS} modeSTRICT Log ${c}: ${n} END SHORTEST mode [Documentation] This loop executes three times. FOR ${c} ${n} IN ZIP ${CHARACTERS} ${NUMBERS} modeSHORTEST Log ${c}: ${n} END LONGEST mode [Documentation] This loop executes five times. ... On last two rounds ${n} has value None. FOR ${c} ${n} IN ZIP ${CHARACTERS} ${NUMBERS} modeLONGEST Log ${c}: ${n} END LONGEST mode with custom fill value [Documentation] This loop executes five times. ... On last two rounds ${n} has value -. FOR ${c} ${n} IN ZIP ${CHARACTERS} ${NUMBERS} modeLONGEST fill- Log ${c}: ${n} END该增强让启用严格校验、避免假阳性变得容易。但默认行为仍存在隐患官方计划在未来把默认值改为STRICT希望继续使用SHORTEST模式的用户需要显式启用它。仓库源码 src/robot/running/bodyrunner.py 中实现了这三种模式LONGEST走itertools.zip_longest并支持fill值STRICT先校验各列表长度未设置模式时保持原有zip行为同时运行时会给出警告提示FOR IN ZIP默认模式将在 Robot Framework 8.0 中从SHORTEST改为STRICT。新的伪日志级别CONSOLE测试或任务运行期间经常需要向控制台输出日志。部分关键字开箱即用地支持此功能也有独立的Log To Console关键字。新的CONSOLE伪日志级别issue #4536为任何接受日志级别的关键字如 Collections 库的Log List、SeleniumLibrary 的Page Should Contain都加上了这种能力。使用该级别时消息会同时输出到控制台和以INFO级别写入日志文件。在源码 src/robot/api/logger.py 中LOGLEVEL字面量类型已包含CONSOLE且映射为logging.INFO级别src/robot/libraries/BuiltIn.py 中Log关键字的文档也明确说明了HTML与CONSOLE两个伪级别。运行多套件时可配置虚拟根套件执行多个套件如robot first.robot second.robot时Robot Framework 会创建一个包含被执行套件作为子套件的虚拟根套件。此前该虚拟套件只能通过--name等命令行选项配置如今可以使用普通的套件初始化文件__init__.robot来配置issue #4015。如果调用中包含初始化文件robot __init__.robot first.robot second.robot根套件将基于其中包含的数据进行配置。该增强最重要的作用是可以为虚拟根套件指定套件 setup 与 teardown——这在以前完全不可能。异步函数与方法可作为关键字如今可以像普通函数一样把用async def创建的异步函数用作关键字issue #4089。例如下面的异步函数可作为关键字Gather Something与Async Sleepfrom asyncio import gather, sleep async def gather_something(): print(start) await gather(something(1), something(2), something(3)) print(done) async def async_sleep(time: int): await sleep(time)zipapp兼容性Robot Framework 6.1 兼容zipappissue #4613。这使得可以仅使用zipapp模块、或借助 PDM 等外部打包工具创建独立分发。Python 3.12 兼容性Python 3.12 计划于 2023 年 10 月发布其中包含一项影响 Robot Framework Python 求值逻辑的 tokenization 细微变更当使用特殊的$var语法时。该问题已修复Robot Framework 6.1 在其他方面也与 Python 3.12 兼容issue #4771。向后不兼容变更Backwards incompatible changes官方总体尽量避免向后不兼容的变更尤其在非主版本中但有些特性与修复无法完全向后兼容。这些变更不应在正常使用中引发问题但尤其使用 Robot Framework 的工具可能受到影响。output.xml 的变更语法错误如无效设置[Setpu]或放错位置的END如今能得到更好的报告issue #4683。该变更的一部分是把无效构造存储为 output.xml 中的error元素。以遍历全部元素方式处理 output.xml 的工具需要把error元素纳入考虑但仅用 xpath 表达式或其他方式查询信息的工具一般不受影响。另一项变更是FOR IN ENUMERATE循环的for元素可能获得start属性issue #4684FOR IN ZIP循环可能获得mode与fill属性issue #4682。这会影响处理所有可能属性的工具不过这类工具应当非常罕见。TestSuite模型结构的变更前述为更好处理无效语法所做的增强issue #4683也要求修改TestSuite模型结构。语法错误如今以Error对象表示可能出现在TestCase、Keyword及其他此类模型对象的body中。与TestSuite结构交互的工具应把Error对象纳入考虑而使用 visitor API 的工具通常不受影响。另一相关变更是doc、tags、timeout、teardown属性已从robot.running.Keyword对象移除issue #4589。它们是被意外遗留的Robot Framework 自身从未使用。访问这些属性的工具需要更新。最后TestSuite.source属性如今是pathlib.Path实例而非字符串issue #4596。该变化在 src/robot/model/testsuite.py 的 setter 中体现非Path值会被自动包装为Path。Parsing 模型的变更无效的区段标题如*** Bad ***如今在 parsing 模型中表示为InvalidSection对象此前它们是通用的Error对象issue #4689。新的ReturnSetting对象作为Return的别名被引入。这暂时不改变任何行为但未来Return将用于其他用途使用它的工具应改用ReturnSettingissue #4656。使用--suite选项时不再排除文件解析此前使用--suite选项时不匹配指定套件名的文件会整个被排除在解析之外。这个性能优化在较大套件结构中很方便但必须移除issue #4688因为新的Name设置issue #4583使得无法仅凭文件名得知套件名。受此变更影响的用户可以使用新的--parseinclude选项显式指定要解析哪些文件issue #4687。Libdoc spec 文件的变更Libdoc 此前不能正确处理list[int]这类参数化类型。修复该问题要求在 spec 文件中把嵌套类型信息与顶层类型一起存储。此外union 类型的处理方式也与之前不同但普通类型没有变化。JSON spec 文件变化很小XML spec 文件则需要稍大一些的改动。详见 issue #4538。参数转换的变更如果参数有多个类型Robot Framework 会从左到右尝试用所有类型做参数转换直到其中一个成功。此前如果某个类型完全无法识别使用的值会原样返回不再尝试用剩余类型转换。例如对如下关键字def example(arg: Union[UnknownType, int]): ...以Example 42调用时整数转换不会被执行关键字拿到的是字符串42。该行为已改为跳过无法识别的类型上述场景下会执行整数转换issue #4648关键字拿到的值变为整数。另一个参数转换变更是Any类型现在被识别任何值都被接受且不转换issue #4647。该变更大体向后兼容但在参数带默认值如arg: Any 1的特殊情况下行为有变此前Any不被识别会基于默认值类型做转换现在Any被识别且明确不转换因此也不会基于默认值做转换。可通过arg: Union[int, Any] 1规避行为变化——这本身也是更好的类型标注方式。影响执行的变更测试与关键字中的无效设置如[Tasg]如今被视为语法错误会在执行时导致失败issue #4683。此前它们也会被报告但不影响执行。资源文件中所有无效区段都被视为语法错误阻止导入该资源文件issue #4689。此前资源文件含*** Test Cases ***标题会引发此类错误但其他无效标题仅被报告为错误、导入仍成功。弃用的特性Deprecated featuresPython 3.7 支持Python 3.7 将于 2023 年 6 月达到生命周期终点。官方决定 Robot Framework 6.1 及其 bug 修复版本继续支持它但 Robot Framework 7.0 将不再支持issue #4637。此前 Python 3.62021 年 12 月 EOL也以同样方式被弃用之所以继续支持是因为它是 Red Hat Enterprise Linux 8 的默认 Python 版本而 RHEL 8 仍在积极支持期内。Libdoc spec 文件中的旧元素Libdoc spec 文件在最近几个版本中持续增强。为向后兼容旧信息被保留但所有这些数据将在 Robot Framework 7.0 中移除。详见 issue #4667。其他弃用特性Parsing 模型中的Return节点已弃用应改用ReturnSettingissue #4656。TestSuite.from_model的name参数已弃用未来将移除issue #4598。robot.utils.timestr_to_secs的accept_plain_values参数已弃用未来将移除issue #4522。完整修复与增强列表6.1 里程碑共包含74 个 issue覆盖 enhancement 与 bug 两类。除上文详述的重点功能外其余值得关注的高优先级与中优先级条目包括critical 级5 项外部 Parser API#1283beta 1 加入、可执行套件序列化为 JSON#3902alpha 1、用户关键字混合嵌入式与普通参数#4234alpha 1、Python 3.12 兼容#4771rc 1。high 级14 项使用list[int]等泛型且传入对象而非字符串时条目不转换的 bug 修复#4705、WHILE limit 在 teardown 中失效的修复#4744、支持用__init__.robot配置多套件运行的虚拟套件#4015、支持异步函数/方法作为关键字#4089、自定义转换器可访问库#4510、JSON 变量文件支持#4532、新增CONSOLE伪日志级别#4536、支持列表/字典项赋值#4546、WHILE 达 limit 后可继续执行#4562、TestSuite结构类型信息#4570、robot:flatten标签#4584、zipapp兼容#4613、弃用 Python 3.7#4637、FOR IN ZIP长度行为可配置#4682。medium 级25 项Libdoc 参数化类型#4538、跳过所有测试时仍执行套件 setup/teardown 的修复#4571、移除robot.running.Keyword未用属性#4589、Run Keyword执行的关键字缺少 source 信息#4604、Python 3.11 及更早版本None默认值转换不一致#4626、Windows 上Dialogs无焦点#4635、参数转换遍历所有可能类型#4648、Documentation.from_params(...).value失效#4670、Windows 上 User Guide 生成损坏#4680、parsing 模型无效区段表示#4689、ELSE IF条件未传给 listeners#4692、id属性访问可能抛ValueError#4695、嵌套变量解析错误#4716、HTML 输出返回导航失效#4754、跳过测试内失败关键字未展开#4756、Dictionaries Should Be Equal支持忽略键#2717、--include/--exclude选择测试性能增强#3579、解析期错误检测增强#4210、支持带连字符的长命令行选项如--pre-run-modifier#4547、动态库 API 可选类型化基类#4567、listener API 可选类型化基类#4568、visitor API 类型信息#4569、WHILEon_limit_message选项#4575、WHILE 条件可省略#4576、Name设置自定义套件名#4583、TestSuite.from_string方法#4601、关键字冲突先按搜索顺序解决#4609、Any显式转换器不做转换#4647、动态 API 支持仅位置参数#4660、查询是否运行中/是否 dry-run 的公共 API#4666、$var语法建议#4676、日志中语法错误更好报告#4683、FOR IN ENUMERATE起始索引解析期处理#4684、限制解析文件的命令行选项#4687、--suite不再排除文件#4688、文档中保留前导与内部空格#4729、parsing API 类型提示#4740、结果对象新增前向兼容的start_time/end_time/elapsed_time属性#4765、自动解析.robot.rst文件#4777、支持仅接受*varargs的自定义转换器#4627。low 级15 项部分单测无法独立运行#4611、Dialogs对话框不居中且最小尺寸过小#4634、裸Union注解处理不当#4638、空元组()注解的错误消息不佳#4646、BuiltIn.Log文档缺陷#4663、文档中反斜杠换行可能形成\n转义序列#4736、Process 库Split/Join Command Line与pathlib.Path对象配合问题#4749、Libdoc 未检测到文档格式时崩溃#4780、Libdoc 的TypedDict类型信息未列出Mapping#4781、弃用timestr_to_secs的accept_plain_values#4522、TestSuite.source改为pathlib.Path#4596、弃用TestSuite.from_model的name参数#4598、Dialogs绑定Enter键到OK按钮#4619、对话框按钮获得键盘快捷键#4636、弃用 parsing 模型Return节点#4656、NormalizedDict增加__repr__()#4709。致谢与开发背景Robot Framework 的开发由 Robot Framework Foundation 及其 60 多家成员组织赞助。6.1 团队由基金会资助的 Pekka Klärck 与 Janne Härkönen兼职组成同时社区贡献了大量工作Serhiy1为TestSuite结构补充类型信息#4570Vincema实现带连字符的长命令行选项#4547与列表/字典项赋值#4546sunday2实现 JSON 变量文件支持#4532并修复 Windows 上 User Guide 生成#4680Tatu Aalto 为动态库 API 增加仅位置参数支持#4660otemek用新的Name设置实现套件自定义命名#4583franzhaas让 Robot Framework 兼容zipapp#4613Ygor Pontelo 支持异步函数/方法作为关键字#4089ursa-h增强关键字冲突解决使库搜索顺序优先级更高#4609Jonathan Arns 与 Fabian Zeiher 实现限制解析文件范围的初始版本#4687asaout为 WHILE 循环增加on_limit_message#4575turunenm实现CONSOLE伪日志级别#4536Yuri Verweij 增强Dictionaries Should Be Equal支持忽略键#2717。升级建议小结对普通用户重点关注robot:flatten标签、WHILE 的on_limit/on_limit_message、FOR IN ZIP的mode选项、JSON 变量文件与CONSOLE伪日志级别这些都能直接改善日常测试脚本的质量与可维护性同时注意无效设置如今会在执行时报错、TestSuite.source变为pathlib.Path等行为变化。对工具与库开发者JSON 套件序列化.rbt、外部 Parser API、公共 API 类型信息、--parseinclude选项以及 output.xml/模型结构的调整是升级重点建议在升级前核对本文向后不兼容变更一节所列条目并在仓库的 atest、utest 目录中寻找对应测试用例验证自身工具的兼容性。【免费下载链接】robotframeworkGeneric automation framework for acceptance testing and RPA项目地址: https://gitcode.com/gh_mirrors/ro/robotframework创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表