Robot Framework API 使用指南:从命令行入口点到 `robot.api` 公共 API 的完整解读

发布时间:2026/9/23 11:04:53
Robot Framework API 使用指南:从命令行入口点到 `robot.api` 公共 API 的完整解读 测试RPA接口测试【免费下载链接】robotframeworkGeneric automation framework for acceptance testing and RPA项目地址https://gitcode.com/gh_mirrors/ro/robotframework点击查看免费下载本篇技术指南基于仓库中 doc/api/index.rst 这一 API 文档入口系统梳理 Robot Framework 的编程接口体系四大命令行入口点robot.run、robot.rebot、robot.libdoc、robot.testdoc、robot.api包暴露的稳定公共 APIlogger、deco、exceptions、interfaces、parsing、以及robot.api之外与结果处理、套件构建相关的核心类。读完本文你将掌握如何在 Python 中通过编程方式驱动测试执行、结果后处理与文档生成并学会利用SuiteVisitor、ResultVisitor、ExecutionResult、ResultWriter等类构建自定义工具与扩展同时了解如何基于源码定位每个 API 的实现位置。适用前提本文所述 API 行为以当前仓库版本7.2rc2.dev1见 src/robot/version.py的实现为准不同版本之间的 API 细节可能有差异文中所有示例均需在安装了本仓库源码的 Python 3 环境中运行。一、API 文档入口与整体定位doc/api/index.rst 是 Robot Framework 官方 API 文档的入口页Sphinx 项目构建配置见 doc/api/conf.py构建辅助脚本见 doc/api/generate.py。该页面的核心定位是公开 API 说明描述robot.api公共 API 及四个命令行入口点安装与基本使用指引安装、基本用法等话题由用户指南User Guide覆盖API 文档页本身聚焦于编程接口问题与 Bug 反馈渠道API 相关问题可通过 Slack、Forum、邮件列表提问发现 Bug 可提交 issue包索引通过 toctree 收录autodoc/robot*一系列包级文档如 doc/api/autodoc/robot.api.rst、doc/api/autodoc/robot.running.rst、doc/api/autodoc/robot.result.rst 等并生成 genindex通用索引、modindex模块索引与 search 索引。从索引结构可以看出API 文档划分为三大板块Entry points入口点、Public API公共 API与All packages全部包。本文后续章节将依次深入这三个板块。二、命令行入口点四把钥匙与其编程等价物索引页明确指出命令行入口点以 Python 模块形式实现同时提供编程式 API。四个入口点分别是入口点模块用途命令行形态编程 APIrobot.run执行测试及 RPA 任务robot/python -m robotrun()、run_cli()robot.rebot结果后处理Rebotrebot/python -m robot.rebotrebot()、rebot_cli()robot.libdoc库文档生成Libdoclibdoc/python -m robot.libdoclibdoc_cli()、libdoc()robot.testdoc测试用例文档生成Testdoctestdoc/python -m robot.testdoctestdoc_cli()、testdoc()2.1robot.run执行测试src/robot/run.py 的模块 docstring 说明了三种命令行执行方式python -m robot.run python path/to/robot/run.py robot # 安装后生成的 start-up 脚本其编程式入口在根包中统一暴露见 src/robot/init.py可直接from robot import run, run_cli。run_cli(argumentsNone, exitTrue)接收命令行参数列表默认sys.argv[1:]内部通过RobotFramework().execute_cli(arguments, exitexit)完成参数解析并执行src/robot/run.py。它适合自定义脚本需要透传 Robot 命令行参数的场景from robot import run_cli # 运行测试并返回返回码 rc run_cli([--name, Example, tests.robot], exitFalse) # 运行测试并自动退出系统 run_cli([--name, Example, tests.robot])run(*tests, **options)更丰富的编程式执行入口src/robot/run.py选项以关键字参数形式传递from robot import run run(path/to/tests.robot) run(tests.robot, include[tag1, tag2], splitlogTrue) with open(stdout.txt, w) as stdout: run(t1.robot, t2.robot, nameExample, logNone, stdoutstdout)run()的参数映射规则值得注意选项名与命令行长选项去掉连字符一一对应如--name→name可重复选项以列表传递如include[tag1,tag2]等价于--include tag1 --include tag2单次使用也可传字符串无值选项以布尔值传递如dryrunTrue等价于--dryrun特殊值NONE可用 PythonNone如logNone等价于--log NONE对象直传listener、prerunmodifier、prerebotmodifier支持直接传 Python 对象如run(tests, listenerMyListener())而命令行只能传模块名输出捕获可通过特殊关键字参数stdout、stderr传入文件对象捕获标准输出/错误不支持--pythonpath、--argumentfile、--help、--version四个选项返回码与命令行一致——0 表示全部通过1–250 表示失败数量251–255 表示其他状态详见 src/robot/run.py 中 Return Codes 一节。2.2robot.rebot输出后处理Rebot 用于对output.xml进行后处理合并多个输出、过滤、生成 log/report、生成 xUnit 等。编程式调用为rebot()与rebot_cli()由 src/robot/rebot.py 实现同样在根包中导出src/robot/init.py。2.3robot.libdoc与robot.testdoc文档生成Libdoc为库/资源文件生成 HTML、XMLlibspec、JSON 格式的文档实现见 src/robot/libdoc.py核心逻辑在 src/robot/libdocpkg/ 包中。编程式调用libdoc_cli()、libdoc()需按from robot.libdoc import libdoc_cli方式导入。Testdoc根据测试用例数据生成 HTML 文档实现见 src/robot/testdoc.py。索引页特别强调与命令行入口点相关的 API 直接通过robot根包暴露robot.api的 docstring 中的 tip 也说明了这一点见 src/robot/api/init.py因此from robot import run, run_cli, rebot, rebot_cli是最常见的导入方式。根包中__all__ [run, run_cli, rebot, rebot_cli]src/robot/init.py进一步明确了稳定契约。三、robot.api稳定的公共 API 包src/robot/api/init.py 的 docstring 给出了核心承诺除非另有说明该包暴露的 API 均视为稳定可安全用于构建基于 Robot Framework 的外部工具。同时有一个重要历史信息所有解析parsing相关 API 在 Robot Framework 3.2 中被重写。所有类均可按from robot.api import ClassName方式导入。下面逐一展开robot.api的子模块与核心类。3.1robot.api.logger库内日志 APIsrc/robot/api/logger.py 为测试库提供了向日志文件与控制台写入消息的公共 API替代早期通过标准输出print(*INFO* My message)这种脆弱写法。使用方式from robot.api import logger def my_keyword(arg): logger.debug(fGot argument {arg}.) do_something() logger.info(iThis/i is a boring example., htmlTrue)日志级别TRACE、DEBUG、INFO、WARN、ERROR分别对应trace()、debug()、info()、warn()、error()函数通用入口write(msg, level, html)还支持两个伪级别HTML按 HTML 格式写入日志文件中级别记为 INFOCONSOLE同时写入日志文件与控制台Robot Framework 6.1 新增。关键行为可从 src/robot/api/logger.py 的write()实现确认TRACE 与 DEBUG 默认不输出需通过--loglevel命令行选项调整阈值WARN 与 ERROR 会自动写入控制台并出现在日志的Test Execution Errors区段所有写日志方法都带可选html参数为True时消息按 HTML 渲染若在 Robot Framework 未运行时调用消息会被重定向到标准 Pythonlogging模块logger 名为RobotFramework——实现依据是EXECUTION_CONTEXTS.current is not None的判断相比标准输出方式该 API 生成的日志消息带有准确时间戳。info(msg, htmlFalse, also_consoleFalse)的also_consoleTrue可让消息同时出现在控制台console(msg, newlineTrue, streamstdout)则专门写控制台可指定stderr。3.2robot.api.deco库开发装饰器src/robot/api/deco.py 提供三个装饰器新增于 Robot Framework 3.2keyword为关键字设置自定义名称、标签和参数类型。实现上通过设置robot_name、robot_tags、robot_types三个属性完成src/robot/api/deco.pyfrom robot.api.deco import keyword keyword def example(): # ... keyword(Login as user ${user} with password ${password}, tags[custom name, embedded arguments, tags]) def login(user, password): # ... keyword(types{length: int, case_insensitive: bool}) def types_as_dict(length, case_insensitive): # ... keyword(types[int, bool]) def types_as_list(length, case_insensitive): # ... keyword(typesNone) def no_conversion(length, case_insensitiveFalse): # ...types可以是参数名 → 类型的字典也可以按位置排列的类型列表typesNone完全禁用类型转换当库关闭了自动关键字发现时keyword是显式标记关键字的必需手段。library库级装饰器控制关键字发现及其他库设置。默认在类上设置ROBOT_AUTO_KEYWORDS False即关闭自动关键字发现只有keyword标记的方法才成为关键字可通过auto_keywordsTrue重新开启。其余参数分别设置类属性参数设置的类属性含义scopeROBOT_LIBRARY_SCOPE库作用域GLOBAL/SUITE/TEST/TASKversionROBOT_LIBRARY_VERSION库版本convertersROBOT_LIBRARY_CONVERTERS类型转换器Robot Framework 5.0 新增doc_formatROBOT_LIBRARY_DOC_FORMAT文档格式ROBOT/HTML/TEXT/RESTlistenerROBOT_LIBRARY_LISTENER库内监听器from robot.api.deco import library library class KeywordDiscovery: keyword def do_something(self): # ... def not_keyword(self): # ... library(scopeGLOBAL, version3.2) class LibraryConfiguration: # ...not_keyword禁止某函数/方法被暴露为关键字实现为在函数上设置robot_not_keyword True属性src/robot/api/deco.py。替代方案是library或类属性ROBOT_AUTO_KEYWORDS设为假值。3.3robot.api.exceptions库内异常体系src/robot/api/exceptions.py 提供库与框架通信失败/跳过等事件的异常Robot Framework 4.0 新增既可通过from robot.api.exceptions import ...导入也可直接from robot.api import SkipExecution。异常继承用途关键类属性FailureAssertionError报告校验失败ROBOT_SUPPRESS_NAME TrueContinuableFailureFailure报告失败但允许继续执行ROBOT_CONTINUE_ON_FAILURE TrueErrorRuntimeError报告执行错误如关键字被误用ROBOT_SUPPRESS_NAME TrueFatalErrorError报告会终止整个执行的错误ROBOT_EXIT_ON_FAILURE TrueSkipExecutionException将当前测试/任务标记为跳过ROBOT_SKIP_EXECUTION TrueFailure、Error、SkipExecution的构造函数均接受message与html两个参数htmlTrue时消息被视为 HTML 不被转义实现上消息会加上*HTML*前缀见 src/robot/api/exceptions.py。使用建议来自 docstring系统行为不符合预期时用Failure或标准AssertionError关键字使用方式错误时用Error需要跳过测试时抛SkipExecution。这些异常通过ROBOT_*类属性被框架识别并驱动对应行为继续执行、退出执行、跳过等。3.4robot.api.interfaces可选基类6.1 新增src/robot/api/interfaces.py 提供库与其他扩展的可选基类Robot Framework 6.1 新增。注意这些类不通过顶层robot.api暴露需from robot.api.interfaces import ...导入。主要价值在于编辑器可以据此提供自动补全、文档与类型信息并非强制使用。包含DynamicLibrary动态库 API 的基类。必须实现get_keyword_names()返回关键字名列表与run_keyword(name, args, named)执行关键字可选实现get_keyword_documentation()、get_keyword_arguments()、get_keyword_types()、get_keyword_tags()、get_keyword_source()。其中参数规范get_keyword_arguments支持普通参数、*varargs、**kwargs、命名专属参数*分隔符、带默认值参数namedefault或二元组(name, default)形式二元组支持非字符串默认值与自动类型转换等完整语法。HybridLibrary混合库 API 基类只需实现get_keyword_names()框架通过getattr取得实际关键字方法与静态库 API 相同机制关键字也可在类外实现通过库的__getattr__返回。ListenerV2监听器 API 版本 2 的基类设置ROBOT_LISTENER_API_VERSION 2提供start_suite/end_suite、start_test/end_test、start_keyword/end_keyword、log_message、message、library_import、resource_import、variables_import、output_file、log_file、report_file、xunit_file、debug_file、close等方法。方法签名中的属性字典均以TypedDict形式给出类型契约如StartSuiteAttributes、StartKeywordAttributes、MessageAttributes等。ListenerV3监听器 API 版本 3 的基类ROBOT_LISTENER_API_VERSION 3回调接收运行期模型对象running.TestSuite、result.TestSuite等。从 7.0 起新增了针对用户关键字/库关键字/无效关键字start_user_keyword等以及 FOR/WHILE/IF/TRY/VAR/BREAK/CONTINUE/RETURN/GROUP 等控制结构start_for、start_while、start_if、start_try、start_var、start_break、start_continue、start_return、start_group等的细粒度回调并引入start_body_item/end_body_item作为默认兜底实现7.1 起library_import/resource_import可直接接收并修改导入对象。Parser自定义解析器基类需提供extension属性与parse方法可选parse_init详细定义见 src/robot/api/interfaces.py 之后的内容。3.5robot.api.parsing与解析 API解析相关 API 全部封装在robot.api.parsing模块Robot Framework 4.0 起。在 3.2 时代解析函数与类直接通过robot.api顶层暴露如今已实际废弃并计划未来移除。当前建议的导入方式from robot.api.parsing import get_model, get_resource_model, get_init_model from robot.api.parsing import get_tokens, get_resource_tokens, get_init_tokens from robot.api.parsing import Token从 src/robot/api/init.py 可以看到robot.api仍在为兼容性转发这些符号get_tokens、get_model、Token等但新代码应优先从robot.api.parsing导入。3.6robot.api直接暴露的核心类除了上述子模块robot.api顶层还直接暴露一批高频使用的类导入方式统一为from robot.api import ClassNameTestSuite与TestSuiteBuilderTestSuitesrc/robot/running/model.py用于程序化创建可执行测试套件TestSuiteBuildersrc/robot/running/builder.py基于文件系统上已有的测试数据构建套件。组合使用即可实现先构建、再修改、后执行的完整流水线from robot.api import TestSuiteBuilder, TestSuite from robot.running import TestSuite as RunningSuite # 或使用 robot.api.TestSuiteSuiteVisitor执行前修改测试数据SuiteVisitorsrc/robot/model/visitor.py是抽象访问者基类用于在执行前处理测试数据同时是--prerunmodifier命令行选项的基类。仓库自带两个可运行的完整示例doc/api/code_examples/ExcludeTests.py —— 按名称排除测试的 pre-run modifierfrom robot.api import SuiteVisitor from robot.utils import Matcher class ExcludeTests(SuiteVisitor): def __init__(self, pattern): self.matcher Matcher(pattern) def start_suite(self, suite): suite.tests [t for t in suite.tests if not self._is_excluded(t)] def _is_excluded(self, test): return self.matcher.match(test.name) or self.matcher.match(test.longname) def end_suite(self, suite): suite.suites [s for s in suite.suites if s.test_count 0] def visit_test(self, test): pass # 避免访问测试及其关键字以节省时间doc/api/code_examples/disable.py —— 禁用套件/测试级 setup 与 teardown 的四个 modifierfrom robot.api import SuiteVisitor class SuiteSetup(SuiteVisitor): def start_suite(self, suite): suite.setup None class SuiteTeardown(SuiteVisitor): def start_suite(self, suite): suite.teardown None class TestSetup(SuiteVisitor): def start_test(self, test): test.setup None class TestTeardown(SuiteVisitor): def start_test(self, test): test.teardown None命令行启用方式以ExcludeTests为例模式同时忽略大小写与空格支持*、?通配符robot --prerunmodifier ExcludeTests:pattern tests.robotExecutionResult与ResultVisitor读取与后处理结果ExecutionResultsrc/robot/result/resultbuilder.py从 XML 输出文件读取执行结果的工厂方法ResultVisitorsrc/robot/result/visitor.py抽象访问者基类简化结果的进一步处理同时是--prerebotmodifier命令行选项的基类。典型用法是在执行结束后加载output.xml并访问结果模型from robot.api import ExecutionResult result ExecutionResult(output.xml) result.suite.visit(MyResultVisitor())ResultWriter写日志/报告/XML/xUnitResultWritersrc/robot/reporting/resultwriter.py用于写出报告、日志、XML 输出与 xUnit 文件。其输入有两种来源文件系统上的 XML 输出字符串路径ExecutionResult返回的结果对象或已执行的TestSuite。在 src/robot/run.py 中可以看到框架自身的用法——测试执行结束后若配置了 log/report/xunit则用ResultWriter(settings.output if settings.log else result)写出结果if settings.log or settings.report or settings.xunit: writer ResultWriter(settings.output if settings.log else result) writer.write_results(settings.get_rebot_settings())TypeInfo类型提示解析与值转换7.0 新增TypeInfosrc/robot/running/arguments/typeinfo.pyRobot Framework 7.0 新增用于解析类型提示并据此转换值供外部工具使用。Languages与Language本地化支持Languages与Languagesrc/robot/conf/languages.py面向需要处理不同翻译本地化的外部工具Language同时是自定义翻译的基类。它们支持通过--language命令行选项激活内置语言或加载自定义语言文件自定义语言文件可以是路径或模块名。3.7 类型信息分发承诺robot.api的 docstring 明确承诺遵循 PEP 484 定义的类型信息分发规范distributing type information specification这意味着这些 API 带有可靠的类型注解IDE 与静态检查工具可以依赖它们。四、All packagesrobot包全景与内部模块定位索引页强调通常情况下你不需要直接导入robot包下的内部模块——它们的存在是为了让你处理公共 API 返回的对象。索引页列出的全部包如下这里给出每个包在当前仓库中的实现位置与职责包源码路径职责robot.apisrc/robot/api/稳定公共 API本文第三章robot.confsrc/robot/conf/设置RobotSettings、语言/本地化、解析配置robot.htmldatasrc/robot/htmldata/log/report/libdoc/testdoc 的 HTML/JS/CSS 资源robot.libdocpkgsrc/robot/libdocpkg/Libdoc 工具核心实现robot.librariessrc/robot/libraries/标准库BuiltIn、Collections、DateTime 等robot.modelsrc/robot/model/模型基类与访问者含SuiteVisitorrobot.outputsrc/robot/output/日志、控制台输出、监听器分发robot.parsingsrc/robot/parsing/词法分析lexer、解析器parser、模型robot.reportingsrc/robot/reporting/结果写出ResultWriter、JS 模型构建robot.resultsrc/robot/result/结果模型与读取ExecutionResult、ResultVisitorrobot.runningsrc/robot/running/运行期模型TestSuite、TestSuiteBuilder、执行器robot.utilssrc/robot/utils/通用工具Matcher、文本处理、连接管理等robot.variablessrc/robot/variables/变量存储与解析每个包的详细 API 文档见 doc/api/autodoc/ 目录下对应的.rst文件由 automodule 自动从源码 docstring 生成配置见 doc/api/autodoc/robot.api.rst 等文件。五、从入口点到底层的调用链剖析以robot run为例可以清晰地看到公共 API 如何串联起整个执行流程。RobotFramework.main()src/robot/run.py的执行链为RobotSettings(options)将选项解析为设置对象src/robot/conf/ 包TestSuiteBuilder(...).build(*datasources)依据--extension、--parseinclude、--parser、--rpa、--language等选项构建套件suite.visit(ModelModifier(...))应用--prerunmodifier指定的修改器这正是 doc/api/code_examples/ExcludeTests.py 等SuiteVisitor子类被调用的位置suite.run(settings)执行测试并返回结果对象ResultWriter(...).write_results(...)按--log/--report/--xunit配置写出结果文件最终返回result.return_code0–255 的返回码语义见前文 2.1 节。这一链条印证了索引页命令行入口点是 Python 模块同时提供编程式 API的论断——run()与run_cli()只是同一执行管线RobotFramework应用类的两种调用形态src/robot/run.py。六、API 版本演进速览结合各模块 docstring 中的New in ...标注可以快速梳理公共 API 的关键演进节点以当前仓库为准3.2解析 API 全面重写keyword、library、not_keyword装饰器新增解析类开始直接暴露于robot.api4.0robot.api.exceptions及其异常类新增robot.api.parsing模块正式推出原robot.api顶层解析符号进入废弃通道5.0library的converters参数新增6.1robot.api.interfacesDynamicLibrary、HybridLibrary、ListenerV2、ListenerV3、Parser基类新增logger增加CONSOLE伪级别7.0TypeInfo新增ListenerV3大幅扩展用户/库/无效关键字及控制结构回调、start_body_item/end_body_item兜底7.1ListenerV3的library_import/resource_import改为接收可检查、可修改的导入对象7.2ListenerV3增加start_group/end_groupGROUP 结构。七、结语如何把 API 文档用起来回到 doc/api/index.rst 的定位——它是理解 Robot Framework 编程接口的导航图写库扩展用 src/robot/api/deco.py 的装饰器控制关键字发现用 src/robot/api/logger.py 输出结构化日志用 src/robot/api/exceptions.py 表达失败/跳过语义复杂库可继承 src/robot/api/interfaces.py 的DynamicLibrary/HybridLibrary基类写外部工具用run()/rebot()编程式驱动执行与后处理用TestSuiteBuilderSuiteVisitor在执行前改造套件用ExecutionResultResultVisitorResultWriter读取并重新生成结果查阅细节每个 API 的自动化文档由 doc/api/autodoc/ 下的.rst从源码 docstring 生成遇到签名细节可直接查阅对应源码模块utest/api/目录下的单元测试如 utest/api/test_exposed_api.py、utest/api/test_run_and_rebot.py可作为 API 行为验证的参考。稳定性边界请牢记robot.api与robot根包导出项run/run_cli/rebot/rebot_cli之外的模块属于内部实现可能随时变化见 src/robot/init.py 的明确声明。将自定义代码建立在这些稳定 API 之上才能在框架升级时保持兼容。赞分享测试RPA接口测试【免费下载链接】robotframeworkGeneric automation framework for acceptance testing and RPA项目地址https://gitcode.com/gh_mirrors/ro/robotframework点击查看免费下载相关推荐AnimateDiff自适应运动模块架构解析下一代动态视频生成解决方案AnimateDiff自适应运动模块架构解析下一代动态视频生成解决方案 AnimateDiff作为基于Stable Diffusion的动画生成框架通过创新测试RPA接口测试Robot Framework 顶层 robot 包解析公开 API、命令行入口与子包结构Robot Framework 顶层 robot 包解析公开 API、命令行入口与子包结构 导读 本文以仓库中的 API 文档页 doc/api/autodo测试RPA接口测试从源码到实践深入理解 ha-bridge 的 Hue 模拟器HueMulator工作原理从源码到实践深入理解 ha bridge 的 Hue 模拟器HueMulator工作原理 ha bridge 是一款强大的智能家居桥接工具它通过模拟 P上一篇pg8000: Python连接PostgreSQL的纯Python驱动下一篇MiaoProject 使用教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考