首页/新闻资讯/正文详情

Robot Framework 高级特性指南:同名关键词解析、超时控制与并行执行

发布时间:2026/9/23 15:40:54 来源:云帆数科 栏目:资讯中心
Robot Framework 高级特性指南:同名关键词解析、超时控制与并行执行
测试RPA接口测试【免费下载链接】robotframeworkGeneric automation framework for acceptance testing and RPA项目地址https://gitcode.com/gh_mirrors/ro/robotframework点击查看免费下载导读本篇技术指南围绕 AdvancedFeatures.rst 展开系统讲解 Robot Framework 中三个易被忽视却至关重要的高级特性同名关键词的冲突解析机制作用域优先级、全名限定与Set Library Search Order、测试用例与用户关键词的超时控制以及在库层面实现的关键词并行执行模式。读完本文你将能够精准控制多库、多资源环境下关键词的解析顺序正确配置测试与关键词级超时以防范挂起并掌握基于Process库的标准并行执行套路。一、同名关键词的冲突处理Robot Framework 中的关键词分为两类来自标准库或外部库的library keywords库关键词以及创建于套件文件本身或从资源文件导入的user keywords用户关键词。当项目规模变大、导入的库与资源增多时同名关键词几乎不可避免。本节介绍 Robot Framework 如何处理这些冲突。1.1 关键词作用域Keyword scopes优先级当测试数据中只使用关键词短名即不带库/资源前缀时Robot Framework 依据关键词的创建来源决定其作用域优先级顺序如下当前套件文件中创建的用户关键词——优先级最高无论其他位置是否存在同名关键词始终被使用。资源文件中创建的关键词直接或间接从其他资源文件导入——第二优先级。外部测试库中的关键词——第三优先级若没有同名用户关键词则被使用但如果标准库中存在同名关键词会显示一条警告。标准库中的关键词——优先级最低。这一优先级规则在源码中有明确体现。namespace.py 的_get_runner方法按固定顺序查找def _get_runner(self, name, strip_bdd_prefixTrue): ... runner self._get_runner_from_suite_file(name) # 1. 当前套件文件的用户关键词 if not runner and . in name: runner self._get_explicit_runner(name) # 2. 显式全名限定见 1.2 if not runner: runner self._get_implicit_runner(name) # 3. 隐式查找资源文件 → 库 return runner其中_get_implicit_runner依次尝试资源文件和库namespace.pydef _get_implicit_runner(self, name): return (self._get_runner_from_resource_files(name) or self._get_runner_from_libraries(name))此外当多个库关键词同名时_get_runner_from_libraries内部还会通过_filter_stdlib_handlernamespace.py处理自定义库与标准库冲突的情况若冲突双方恰好是某个标准库如BuiltIn、String等排除Remote与自定义库则优先使用自定义库关键词并发出形如Keyword X found both from a custom library ... and a standard library ... The custom keyword is used.的警告提示用户可以用全名显式选择。1.2 使用全名显式指定关键词作用域机制只能解决谁优先的问题当多个库或多个资源之间存在同名关键词时就需要显式指定关键词的全名在关键词名前加上库名或资源名以点号.分隔。库关键词格式为LibraryName.Keyword Name。例如 OperatingSystem 库的Run关键词即使其他地方存在另一个Run也可用OperatingSystem.Run精确调用。模块或包形式的库必须使用完整的模块名或包名例如com.company.Library.Some Keyword。自定义库名如果导入库时通过AS指定了自定义名称全名中必须使用该自定义名称。资源文件资源名取自资源文件的基本文件名不含扩展名。例如资源文件myresources.html中的关键词Example可用myresources.Example调用。同名资源文件限制若有多个资源文件具有相同的基本文件名此语法无法区分必须重命名文件或关键词。大小写/空格/下划线不敏感全名与普通关键词名一样对大小写、空格和下划线不敏感。从源码看_get_explicit_runnernamespace.py会解析全名中的点号枚举所有可能的所有者名 关键词名组合在库与资源中精确匹配_get_owner_and_kw_namesnamespace.py把full_name按点号拆分成多种前缀组合再逐一尝试因此像com.company.Library.Some Keyword这种多段全名也能正确解析。1.3 用Set Library Search Order显式设定解析顺序当冲突较多时逐个使用全名是繁琐的且全名写法会让动态测试用例或用户关键词无法根据可用库/资源灵活切换。解决方案是使用 BuiltIn 库的Set Library Search Order关键词显式指定优先级。*** Settings *** Library MyLibrary Library YourLibrary Resource myresources.resource *** Test Cases *** Example Set Library Search Order MyLibrary myresources Some Keyword argument其行为要点来自 BuiltIn.py 的关键词文档接受一个有序的库/资源列表。当关键词名匹配多个实现时第一个包含该关键词的库或资源被选中。若关键词在所有指定库/资源中都找不到执行方式与未设置搜索顺序时相同报错失败。注意尽管关键词名含 Library它也适用于资源文件但资源文件中的关键词永远优先于库中的关键词不受搜索顺序影响。搜索顺序仅在当前套件内有效调用该关键词会返回旧顺序可用于之后恢复不带参数调用则清除搜索顺序库名与资源名同样大小写、空格不敏感。设置后无需再使用LibraryName.Keyword Name长格式。底层实现中set_library_search_order调用self._namespace.set_search_order(search_order)BuiltIn.py将新顺序写入KeywordStore.search_ordernamespace.py默认值为空元组namespace.py。在隐式解析时_filter_based_on_search_ordernamespace.py按顺序依次用eq(name, kw.owner.name)比对所有者名称命中即返回该组关键词def _filter_based_on_search_order(self, keywords): for name in self.search_order: matches [kw for kw in keywords if eq(name, kw.owner.name)] if matches: return matches return keywords该函数同时被_get_runner_from_resource_files和_get_runner_from_libraries调用验证了资源与库均可参与搜索顺序的设计。二、超时控制Timeouts有些关键词可能执行异常缓慢甚至无限挂起。Robot Framework 允许为测试用例和用户关键词设置超时一旦超时当前正在执行的关键词会被强制停止。需要强调的是这种强制停止可能使库、测试环境或被测系统进入不稳定状态因此仅在没有更安全方案时推荐使用库的实现应尽量避免关键词挂起或自带超时机制。2.1 测试用例超时Test case timeout测试用例超时可通过两种方式设置Test Timeout设置Settings 表为该套件内所有测试用例定义默认超时[Timeout]设置单个测试用例内为特定用例设置超时并覆盖默认值。关键规则空[Timeout]表示该测试无超时即使已设置Test Timeout也可显式使用NONE达到同样目的。超时值为0 或负数时同样被忽略。超时值必须使用 Robot Framework 的时间格式TimeFormat可以是纯秒数如10也可以是1 minute 30 seconds这种描述性格式还支持使用变量例如从命令行传入${TIMEOUT}。超时触发正在运行的关键词被停止测试用例失败但测试 teardown 中执行的关键词不会被测试超时打断测试仍标记为失败。若 teardown 中的关键词可能挂起应改用用户关键词超时见 2.2。完整示例*** Settings *** Test Timeout 2 minutes *** Test Cases *** Default timeout [Documentation] Default timeout from Settings is used. Some Keyword argument Override [Documentation] Override default, use 10 seconds timeout. [Timeout] 10 Some Keyword argument Variables [Documentation] It is possible to use variables too. [Timeout] ${TIMEOUT} Some Keyword argument No timeout [Documentation] Empty timeout means no timeout even when Test Timeout has been used. [Timeout] Some Keyword argument No timeout 2 [Documentation] Disabling timeout with NONE works too and is more explicit. [Timeout] NONE Some Keyword argument2.2 用户关键词超时User keyword timeout用户关键词同样支持用[Timeout]设置超时语法与测试用例超时完全一致但没有默认值。如果超时值由变量指定还可以作为关键词参数传入。*** Keywords *** Hardcoded [Arguments] ${arg} [Timeout] 1 minute 42 seconds Some Keyword ${arg} Configurable [Arguments] ${arg} ${timeout} [Timeout] ${timeout} Some Keyword ${arg} Run Keyword with Timeout [Arguments] ${keyword} {args} {kwargs} ${timeout}1 minute [Documentation] Wrapper that runs another keyword with a configurable timeout. [Timeout] ${timeout} Run Keyword ${keyword} {args} {kwargs}用户关键词超时的特点超时在该用户关键词的执行期间生效若整个关键词总耗时超过超时值当前执行的关键词会被停止。用户关键词超时在测试用例 teardown 期间同样适用而测试超时不适用——这正是防止 teardown 挂起的机制。当测试用例与其某个或嵌套多个关键词同时设置超时时生效的是剩余时间最少的那一个。历史兼容性说明在早期 Robot Framework 版本中可以为超时指定自定义错误消息该功能在 Robot Framework 3.0.1 中被弃用并在 3.2 中移除。因此不要依赖自定义超时错误消息。2.3 超时的源码级实现原理超时机制由 timeouts 包 实现。核心类_TimeoutSortable在初始化时记录超时字符串通过timestr_to_secs将时间格式转换为秒数start()在secs 0时记录起始时间time_left()计算剩余时间粒度 1ms源码注释说明该舍入用于规避 Windows 上threading.Event.wait()的偶发测试失败timed_out()判断是否超时def timed_out(self): return self.active and self.time_left() 0_Timeout.run()在剩余时间不大于 0 时直接抛出TimeoutError否则交由平台相关实现执行。TestTimeout与KeywordTimeout是_Timeout的两个子类timeouts/init.py分别对应测试超时与关键词超时——这就是测试超时与关键词超时行为不同例如 teardown 期间是否生效、_sort_key决定同时存在时取剩余时间最少者的底层来源。KeywordStore中search_order初始为空元组、timeouts集合由 context.py 的_add_timeout/_remove_timeout管理_sort_key返回(not self.active, self.time_left())确保多个超时并存时按剩余时间排序。平台实现方面POSIX 平台posix.py利用signal.setitimer(ITIMER_REAL, ...)与signal(SIGALRM, ...)实现定时器超时后抛出TimeoutError。Windows 平台windows.py使用线程机制实现等价行为。若平台不支持nosupport.py则退化为不可用实现。在运行期套件执行器suiterunner.py会为测试用例启动/关闭超时test.timeout、result.timeout通过_add_timeout/_remove_timeout纳入执行上下文统一管理context.py。三、关键词的并行执行Parallel execution of keywordsRobot Framework 的执行模型是单线程顺序执行的因此当需要并行执行时必须在测试库层面实现让库在后台执行代码。典型模式是提供一对关键词启动类关键词如Start Something启动后台执行并立即返回取结果类关键词如Get Results From Something阻塞等待结果就绪并返回。官方文档以 Process 库的Start Process与Wait For Process作为范例见 Process.py。Start ProcessProcess.py在后台启动一个新进程并立即返回。它返回subprocess.Popen对象Robot Framework 5.0 起直接返回 Popen更早版本返回通用句柄需用Get Process Object获取进程对象可通过alias命名也可直接用返回对象操作如${process.pid}。底层实现是subprocess.Popen(command, **conf.popen_config)并将进程注册为新的 active process。Wait For ProcessProcess.py等待进程完成或到达超时。timeout支持 Robot Framework 时间格式PythonNone、字符串NONE、0 或负数会被忽略on_timeout可取continue默认进程保持运行、terminate优雅终止、kill强制停止。进程在超时前结束、被终止或被 kill 时返回结果对象进程仍在运行时返回None。典型用法*** Test Cases *** Run Two Processes In Parallel ${p1} Start Process python script1.py aliasfirst ${p2} Start Process python script2.py aliassecond # 后台并行运行此处可穿插其他操作…… ${r1} Wait For Process first ${r2} Wait For Process second Should Be Equal As Integers ${r1.rc} 0 Should Be Equal As Integers ${r2.rc} 0需要指出的是这并非测试用例级别的并行测试用例仍按顺序执行并行发生在单个测试用例内部、由库在后台管理多个进程/线程这与 Robot Framework 的设计哲学一致——把并发细节封装在库中测试数据保持简单可读。四、小结同名关键词优先顺序为当前套件用户关键词 资源文件关键词 外部库关键词 标准库关键词冲突时可用LibraryName.Keyword全名精确指定或用Set Library Search Order批量设定解析顺序资源始终优先于库。超时Test Timeout/[Timeout]控制测试用例[Timeout]控制用户关键词时间格式支持秒数与描述性写法多个超时并存时取剩余时间最少者POSIX 用SIGALRM定时器实现。并行在库层面实现后台执行 取结果的成对关键词Process库的Start Process/Wait For Process是官方推荐范例。如需深入了解可继续阅读仓库中的相关文档与源码关联文档AdvancedFeatures.rst关键词解析实现namespace.pySet Library Search Order关键词文档与实现BuiltIn.py超时实现timeouts 包、posix.py、windows.py并行执行范例Process.py时间格式规范TimeFormat.rst赞分享测试RPA接口测试【免费下载链接】robotframeworkGeneric automation framework for acceptance testing and RPA项目地址https://gitcode.com/gh_mirrors/ro/robotframework点击查看免费下载相关推荐Robot Framework命令行执行完全指南标签过滤、执行顺序与超时控制Robot Framework命令行执行完全指南标签过滤、执行顺序与超时控制 Robot Framework通用自动化测试框架支持通过命令行直接启动测试测试RPA接口测试Robot Framework 5.1 alpha 2 新特性详解本地化、标签体系重构与执行控制增强Robot Framework 5.1 alpha 2 新特性详解本地化、标签体系重构与执行控制增强 本文基于仓库内发布说明 doc/releasenotes测试RPA接口测试Robot Framework 6.0 新特性全解析本地化、参数转换与关键字命名空间深度指南Robot Framework 6.0 新特性全解析本地化、参数转换与关键字命名空间深度指南 Robot Framework 6.0 是该项目迈向本地化的首个测试RPA接口测试创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

独蛾手写实现:3步搞定项目搭建,避开90%的坑
独蛾手写实现:3步搞定项目搭建,避开90%的坑

独蛾手写实现:3步搞定项目搭建,避开90%的坑 刚学完语法,看着满屏API发呆?别慌。这是无数开发者的通病, 学会语法却不知怎么搭项目 ,卡在“从0到1”的鸿沟里。 别被那些花里胡哨的教程忽悠。真正的能力,往往藏在最朴素的 手写实现… · 2026/9/23 15:40:41

知乎数据分析与处理系统:从爬虫到可视化完整实战
知乎数据分析与处理系统:从爬虫到可视化完整实战

简介:这套源码实现了一个基于Python的知乎数据分析与处理系统,适合计算机相关专业学生、爬虫与NLP初学者,以及想了解用户画像构建的开发者。项目覆盖数据爬取、中文分词、词频统计、KMeans聚类和验证码识别等模块,并提供多线程优化… · 2026/9/23 15:40:41

遗传规划选股因子挖掘:从公式进化到实盘验证的工程实践
遗传规划选股因子挖掘:从公式进化到实盘验证的工程实践

简介:这份华泰证券金工深度研究报告聚焦遗传规划在选股因子挖掘中的应用,面向量化投资研究者、因子开发人员及金融工程方向的学习者,帮助读者理解如何借助启发式公式演化技术突破人工构建因子的思维局限。资源为1个PDF文件,压缩包… · 2026/9/23 15:40:41

153微信编辑器源码解析:从入门到精通避坑指南
153微信编辑器源码解析:从入门到精通避坑指南

153微信编辑器源码解析:从入门到精通避坑指南 复制来的富文本编辑器代码跑不通?别急,这通常是粘贴时丢失了上下文或依赖库版本冲突。很多开发者卡在“153微信编辑器”这类基于 Wangeditor… · 2026/9/23 19:26:36

2026最新手写输入查字避坑指南,别再死记硬背了
2026最新手写输入查字避坑指南,别再死记硬背了

2026最新手写输入查字避坑指南,别再死记硬背了 很多程序员朋友跟我抱怨,刚把Python或Java的语法啃完,信心满满地想做个小项目,结果卡在“怎么把想法变成代码”这一步。这就是典型的“学会语法却不知怎么搭项目”的困境。2026年的技术栈… · 2026/9/23 19:26:17

5分钟搞定手机归属地批量查询实战速查手册
5分钟搞定手机归属地批量查询实战速查手册

5分钟搞定手机归属地批量查询实战速查手册 是不是看了一堆关于手机归属地查询的教程,结果一到项目现场就懵了?明明代码看着都懂,真让写个批量处理脚本,要么跑不动,要么报错一堆。别急,这份 手机归属地批量查询… · 2026/9/23 19:26:11

2026最新上海手机怎么刷交通卡性能优化实战
2026最新上海手机怎么刷交通卡性能优化实战

2026最新上海手机怎么刷交通卡性能优化实战 官方文档里关于 NFC 交互流程的章节往往长达数十页,读得人头晕脑胀,根本抓不住核心。想快速搞定上海交通卡手机充值与刷卡逻辑,别去啃那些晦涩的规范原文。本文结合 2026… · 2026/9/23 19:26:10

电机马达控制开发避坑指南:附STM32与Arduino完整示例
电机马达控制开发避坑指南:附STM32与Arduino完整示例

电机马达控制开发避坑指南:附STM32与Arduino完整示例 配置环境就卡半天,串口不通、库函数报错、电机乱转,这是不少嵌入式新手在接触 电机马达控制开发… · 2026/9/23 19:25:58

多尺度边缘检测实战:从尺度选择到网络融合的避坑指南
多尺度边缘检测实战:从尺度选择到网络融合的避坑指南

简介:这份资源聚焦图像处理中的多尺度边缘检测技术,面向具备一定图像处理基础、希望深入理解LoG算子与尺度空间分析的开发者与学习者。内容围绕高斯滤波器与拉普拉斯算子的组合展开,讲解如何通过不同σ值的高斯核平滑图像、计算拉普拉斯响应&… · 2026/9/23 19:25:58

3招搞定手机怎么下载微信面试难题实战项目解析
3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧
Win7无线热点配置工具源码解析:解决API失效的3个实战技巧

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧 Win7无线热点配置工具在Win10/11上跑不动?不是你的问题,是版本升级后 API 全变了。很多老项目里的 netsh wlan… · 2026/9/23 0:00:36

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码