完全指南:从日志、装饰器到解析与执行)
测试RPA接口测试【免费下载链接】robotframeworkGeneric automation framework for acceptance testing and RPA项目地址https://gitcode.com/gh_mirrors/ro/robotframework点击查看免费下载robot.api是 Robot Framework 对外暴露稳定公共 API 的官方包是测试库开发者、工具链构建者与自动化平台集成方绕不开的入口。本指南以仓库中的 API 文档定义doc/api/autodoc/robot.api.rst为主体骨架结合 src/robot/api 包的实际实现与 utest/api 单元测试系统讲解 logger、deco、exceptions、interfaces、parsing 五大子模块以及 TestSuite、ResultWriter、SuiteVisitor、ExecutionResult 等顶层导出对象的用法与原理。读完本文你将能够为测试库编写高质量日志、用装饰器定制关键字元数据、通过自定义异常控制执行流程并用解析 API 程序化地读写和修改 Robot 测试数据。一、robot.api 是什么稳定公共 API 的官方承诺robot.api包在 src/robot/api/init.py 中定义其 docstring 明确声明除非另有说明该包暴露的 API 均被视为稳定的可以安全地用于在 Robot Framework 之上构建外部工具。这意味着你基于robot.api编写的代码不会因框架内部重构而意外破坏。当前robot.api暴露的 API 家族包括logger模块供测试库写日志。deco模块供测试库使用的装饰器。exceptions模块包含测试库用于报告失败及其他事件的异常也可以直接从顶层robot.api导入如from robot.api import SkipExecution。interfaces模块创建库和其他扩展时可选用的基类Robot Framework 6.1 新增。parsing模块暴露解析 APIRobot Framework 4.0 新增3.2 中通过robot.api直接暴露的解析函数与类已弃用未来会移除。TestSuite类以编程方式创建可执行测试套件TestSuiteBuilder类根据文件系统上的现有测试数据创建套件。SuiteVisitor抽象类用于在测试执行前处理测试数据可作为--prerunmodifier命令行选项的基类。ExecutionResult工厂方法从 XML 输出文件读取执行结果ResultVisitor抽象类便于进一步处理结果也可作为--prerebotmodifier的基类。ResultWriter类用于写报告、日志、XML 输出和 XUnit 文件。TypeInfo类解析类型注解并据此转换值Robot Framework 7.0 新增。Languages与Language类供需要处理不同翻译i18n的外部工具使用。以上所有类都支持统一导入方式from robot.api import ClassName。该包还遵循 PEP 484 的分布式类型信息规范包含 py.typed 标记文件类型检查器可以正确获取类型提示。从源码结构看robot.api本质上是一个再导出re-export层TestSuite来自 src/robot/running、ExecutionResult来自 src/robot/result、ResultWriter来自 src/robot/reporting、SuiteVisitor来自 src/robot/model。单元测试 utest/api/test_exposed_api.py 逐一对这些导出关系做了断言如assert_equal(api.TestSuite, running.TestSuite)确保再导出不因重构而断裂。二、logger 模块测试库的标准日志接口2.1 为什么不用 print传统上测试库通过标准输出写日志如print(*INFO* My message)。而 src/robot/api/logger.py 提供了更干净的编程接口from robot.api import logger logger.info(My message)除了接口更简洁该 API 还有一个关键优势日志消息带有准确的时间戳。若在 Robot Framework 未运行时调用这些日志方法消息会被重定向到标准 Pythonlogging模块使用的 logger 名为RobotFramework。2.2 日志级别与函数支持TRACE、DEBUG、INFO、WARN、ERROR五个级别可用通用的write函数也可用更常用的级别专用函数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)各函数的语义源自 src/robot/api/logger.py函数级别说明logger.trace(msg, htmlFalse)TRACE最细粒度默认不输出logger.debug(msg, htmlFalse)DEBUG默认不输出logger.info(msg, htmlFalse, also_consoleFalse)INFOalso_consoleTrue时同时写控制台logger.warn(msg, htmlFalse)WARN自动写入控制台与日志的Test Execution Errors区logger.error(msg, htmlFalse)ERROR自动写入控制台与Test Execution Errors区logger.console(msg, newlineTrue, streamstdout)—只写控制台streamstderr可写标准错误流logger.write(msg, levelINFO, htmlFalse)任意通用底层接口级别说明TRACE 与 DEBUG 默认不记录可通过命令行选项--loglevel开启。WARN 与 ERROR 会自动同时写入控制台和日志文件的Test Execution Errors部分。2.3 写 HTML 日志所有写日志文件的方法都有可选的html参数当消息要以 HTML 形式展示时置为True框架便不会对消息进行转义。另外write还接受伪日志级别HTML日志文件中记录为 INFO与CONSOLE同时写日志文件和控制台Robot Framework 6.1 新增。从实现看write会先判断执行上下文若EXECUTION_CONTEXTS.current非空即框架正在运行则委托给robot.output.librarylogger否则回退到标准logging模块并按级别映射到对应的logging级别TRACE 映射为DEBUG // 2。这与 utest/api/test_logging_api.py 中验证的行为一致。三、deco 模块用装饰器定制关键字src/robot/api/deco.py 提供了三个装饰器分别用于控制关键字暴露、设置关键字元数据和配置库。3.1 keyword自定义名称、标签与参数类型keyword装饰器会在被装饰的函数/方法上设置robot_name、robot_tags、robot_types三个属性Robot Framework 据此决定关键字的名称、标签与参数类型。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): ...要点name必须是字符串tags是字符串列表types可以是「参数名 → 类型」的字典也可以是「按位置对应参数」的类型列表只给部分参数指定类型是允许的。设置typesNone会彻底禁用类型转换。若自动关键字发现已被library装饰器或ROBOT_AUTO_KEYWORDS False关闭则必须用keyword显式标记关键字。3.2 not_keyword隐藏不想暴露的方法默认情况下库中所有公共方法都会被当作关键字。若某个辅助方法不想暴露用not_keyword标记not_keyword def not_exposed_as_keyword(): ... def exposed_as_keyword(): ...其实现是给函数设置robot_not_keyword True属性框架在关键字发现时会跳过它。也可以改用library装饰器或把ROBOT_AUTO_KEYWORDS设为假值来整体关闭自动发现。3.3 library控制库级配置library是类装饰器默认关闭自动关键字发现设置ROBOT_AUTO_KEYWORDS False此时只有显式用keyword标记的方法才成为关键字如想恢复自动发现用auto_keywordsTrue。library class KeywordDiscovery: keyword def do_something(self): ... def not_keyword(self): ... library(scopeGLOBAL, version3.2) class LibraryConfiguration: ...各参数通过设置类属性生效仅当参数给定时才设置且会覆盖类中已有的同名属性参数设置的类属性说明scopeROBOT_LIBRARY_SCOPEGLOBAL/SUITE/TEST/TASKversionROBOT_LIBRARY_VERSION库版本号convertersROBOT_LIBRARY_CONVERTERS类型转换器字典5.0 新增doc_formatROBOT_LIBRARY_DOC_FORMATROBOT/HTML/TEXT/RESTlistenerROBOT_LIBRARY_LISTENER库监听器auto_keywordsROBOT_AUTO_KEYWORDS是否自动发现关键字默认Falselibrary与keyword的生效行为由 utest/api/test_deco.py 验证例如keyword(Given name)会设置func.robot_name Given namelibrary默认将ROBOT_AUTO_KEYWORDS置为False且装饰器参数会覆盖类级属性。四、exceptions 模块用异常控制执行流程src/robot/api/exceptions.py 提供了一系列可被测试库抛出的异常用于向框架报告失败及其他事件。它们也可以从顶层包直接导入from robot.api import SkipExecution。所有异常均支持message与html两个构造参数htmlTrue时消息会被视为 HTML 且不转义。4.1 异常族谱AssertionError └── Failure # 报告验证失败 └── ContinuableFailure # 报告失败但允许继续执行 RuntimeError └── Error # 报告执行错误如关键字被错误使用 └── FatalError # 报告错误并终止整个执行 Exception └── SkipExecution # 将执行的测试/任务标记为跳过4.2 各异常用途Failure(AssertionError)报告失败的验证。与直接用标准AssertionError没有实际差别主要好处是支持 HTML 消息、命名与模块内其他异常一致ROBOT_SUPPRESS_NAME True使日志中不显示异常名。ContinuableFailure(Failure)报告失败的验证但允许执行继续ROBOT_CONTINUE_ON_FAILURE True对应命令行--continueonfailure的语义。Error(RuntimeError)报告执行错误。系统未按预期行为如关键字被错误使用时通常应该用Failure或标准AssertionErrorError适用于关键字使用错误等场景。FatalError(Error)报告会停止整个执行的错误ROBOT_EXIT_ON_FAILURE True。SkipExecution(Exception)将当前执行的测试或任务标记为跳过ROBOT_SKIP_EXECUTION True。from robot.api import SkipExecution def skip_on_condition(condition): if not condition: raise SkipExecution(Precondition not met, skipping.)使用建议验证类失败优先用Failure/AssertionError需要继续执行用ContinuableFailure需要中止全部执行用FatalError主动跳过用例用SkipExecution。五、interfaces 模块可选基类与类型定义src/robot/api/interfaces.pyRobot Framework 6.1 新增提供DynamicLibrary、HybridLibrary、ListenerV2、ListenerV3、Parser等可选基类。使用这些基类的主要好处是编辑器可以获得自动补全、文档与类型信息使用它们并非必需。需要注意这些类不通过顶层robot.api导出必须从robot.api.interfaces导入。5.1 DynamicLibrary动态库 API实现动态库 API 需要实现两个抽象方法from robot.api.interfaces import DynamicLibrary class MyDynamicLibrary(DynamicLibrary): def get_keyword_names(self): return [do_something] def run_keyword(self, name, args, named): if name do_something: print(args, named) return done除此之外还有若干可选方法用于向框架返回更丰富的信息get_keyword_documentation(name)返回关键字文档特殊名字__intro__与__init__分别用于获取库整体文档与导入文档。get_keyword_arguments(name)返回参数规格格式规则见下。get_keyword_types(name)返回类型规格字典或列表用于执行时的自动参数转换。get_keyword_tags(name)返回标签列表。get_keyword_source(name)返回path:lineno格式的源码位置供 IDE 跳转。参数规格arguments格式是动态库最重要的约定普通参数为字符串列表[arg1, arg2]空列表表示不接受参数。可变参数varargs以*前缀[*numbers]只能有一个且须跟在普通参数后。varargs 之后的参数视为仅命名参数named-only[*items, arg]。若没有 varargs可用单独的*作分隔符[normal, *, named]。kwargs 以**前缀且必须是最后一个[**config]。默认值可嵌入参数名namedefault此时默认值类型恒为字符串也可用二元组(name, default)表示支持非字符串默认值与自动转换无默认值的参数也可用单元素元组(name,)。普通参数中带默认值的必须排在无默认值之后仅命名参数无此限制。类型规格types既可用字典按名字映射{arg: str, second: int}也可用列表按位置映射[str, int]列表中的None表示该参数无类型信息支持联合类型Union[int, float]或元组(int, float)也支持类型名/别名如int、boolean。5.2 HybridLibrary混合库 API混合库只需实现get_keyword_names()返回关键字方法名列表框架随后像静态库一样通过getattr获取实际关键字方法关键字的名称、参数、文档、标签等直接取自方法本身。若关键字实现在主库类之外库需要提供__getattr__方法返回这些关键字方法。5.3 ListenerV2 / ListenerV3监听器基类ListenerV2设置ROBOT_LISTENER_API_VERSION 2回调风格为「方法名 字符串/字典属性」start_suite(name, attrs)、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包含id、longname、doc、metadata、source、suites、tests、totaltests、starttimeEndSuiteAttributes额外包含endtime、elapsedtime、status、statistics、messageOptionalKeywordAttributes记录了控制结构IF/FOR/WHILE/TRY 等附加的属性如condition、limit、patterns、variables、flavor、values。ListenerV3设置ROBOT_LISTENER_API_VERSION 3回调参数改为模型对象data为运行模型、result为结果模型。自 Robot Framework 7.0 起它提供了非常细粒度的回调通用关键字回调start_keyword/end_keyword默认实现调用start_body_item/end_body_item更具体的start_user_keyword/start_library_keyword/start_invalid_keyword系列实现了具体方法时不再调用通用方法以及覆盖 FOR、WHILE、IF、TRY、VAR、BREAK、CONTINUE、RETURN、GROUP、ERROR 等所有控制结构的start_xxx/end_xxx回调。7.1 起library_import(library, importer)、resource_import(resource, importer)、variables_import(attrs, importer)回调可接收可检查/修改的导入对象与导入位置信息。5.4 Parser自定义解析器基类自定义解析器不必显式继承Parser简单场景下甚至可实现为模块但都必须具备extension属性与parse方法parse_init可选若未实现遇到初始化文件会报错。from pathlib import Path from robot.api import TestSuite from robot.api.interfaces import Parser, TestDefaults class ExampleParser(Parser): extension .example def parse(self, source: Path, defaults: TestDefaults) - TestSuite: suite TestSuite(TestSuite.name_from_source(source), sourcesource) # parse the source file and add tests to the created suite return suiteextension可以是字符串或字符串序列也可命名为EXTENSION模块式实现时更合适。parse与parse_init的defaults参数均可选即方法也可以只接收source。自定义解析器支持自 Robot Framework 6.1 起提供仓库中有对应的验收测试atest/robot/parsing/custom_parsers.robot 与测试数据 atest/testdata/parsing/custom。六、parsing 模块解析、检查与修改测试数据src/robot/api/parsing.py 是 Robot Framework 4.0 起推荐的解析 API 入口。注意3.2 中通过robot.api直接暴露的解析函数与Token类已弃用新代码应使用本模块未来这些旧入口会被移除。6.1 解析为 Token 流用get_tokens测试/任务文件、get_resource_tokens资源文件、get_init_tokens套件初始化文件三个函数按需解析区别在于允许的设置与区块不同from robot.api.parsing import get_tokens path example.robot for token in get_tokens(path): print(repr(token))若example.robot内容为*** Test Cases *** Example Keyword argument Second example Keyword xxx *** Keywords *** Keyword [Arguments] ${arg} Log ${arg}则输出的开头为Token(TESTCASE_HEADER, *** Test Cases ***, 1, 0) Token(EOL, \n, 1, 18) Token(EOS, , 1, 19) Token(TESTCASE_NAME, Example, 2, 0) Token(EOL, \n, 2, 7) Token(EOS, , 2, 8) Token(SEPARATOR, , 3, 0) Token(KEYWORD, Keyword, 3, 4) Token(SEPARATOR, , 3, 11) Token(ARGUMENT, argument, 3, 15) Token(EOL, \n, 3, 23) Token(EOS, , 3, 24)Token的字符串表示包含类型、值、行号与列偏移。查找 token 时应使用Token.TESTCASE_NAME、Token.EOL这类类常量而不要直接依赖常量值如TESTCASE NAME因为 4.0 中这些值已有变化且未来可能再变。EOL表示行尾含换行与可能的后缀空格EOS表示逻辑语句结束...续行时一条语句跨多行。无法识别的数据如不存在的区块或设置名在 token 化阶段即产生ERROR类型 token错误消息在其error属性中而空 FOR 循环这类语法错误要到构建高层模型时才处理。6.2 解析为 AST 模型用get_model、get_resource_model、get_init_model得到高层模型它是在 Python 标准ast.AST之上实现的抽象语法树import ast import astpretty from robot.api.parsing import get_model model get_model(example.robot) print(ast.dump(model, include_attributesTrue)) print(- * 72) astpretty.pprint(model)模型节点分**块blocks与语句statements**两类块可以包含子块和语句语句则持有 token 形式的具体数据。两类节点都通过lineno、col_offset、end_lineno、end_col_offset暴露位置信息。块File根、SettingSection、VariableSection、TestCaseSection、KeywordSection、CommentSection、TestCase、Keyword、If、Try、For、While、Group7.2 新增。语句SectionHeader、LibraryImport、ResourceImport、VariablesImport、Documentation、Metadata、ForceTags、DefaultTags、SuiteName、SuiteSetup、SuiteTeardown、TestSetup、TestTeardown、TestTemplate、TestTimeout、Variable、TestCaseName、KeywordName、Setup、Teardown、Tags、Template、Timeout、Arguments、Return已弃用8.0 将改指ReturnStatement、ReturnSetting6.1 新增别名、KeywordCall、TemplateArguments、IfHeader、InlineIfHeader、ElseIfHeader、ElseHeader、TryHeader、ExceptHeader、FinallyHeader、ForHeader、WhileHeader、GroupHeader7.2 新增、Var7.0 新增、End、ReturnStatement、Break、Continue、Comment、Config6.0 新增、Error、EmptyLine。这些模型类全部由 src/robot/api/parsing.py 从 src/robot/parsing/model 再导出测试 utest/api/test_exposed_api.py 会遍历parsing.model.Statement.statement_handlers与固定块名列表逐一断言再导出的完整性且确认Statement/Block基类本身不对外暴露。6.3 用 ModelVisitor 检查模型实现ModelVisitor并定义visit_NodeName方法即可遍历关心的节点。下面示例打印某个测试用例文件包含的所有测试from robot.api.parsing import get_model, ModelVisitor class TestNamePrinter(ModelVisitor): def visit_File(self, node): print(fFile {node.source} has the following tests:) self.generic_visit(node) def visit_TestCaseName(self, node): print(f- {node.name} (on line {node.lineno})) model get_model(example.robot) printer TestNamePrinter() printer.visit(model)输出File example.robot has the following tests: - Example (on line 2) - Second example (on line 5)注意visit_File中要调用generic_visit才能继续访问子节点。6.4 模型中的错误处理模型中的每个节点都有errors属性包含该节点的错误既有空 FOR 循环、IF 无条件这类语法错误也有不存在的区块/设置名这类无法识别数据的错误。无法识别的数据在 token 化阶段就被标记模型中表示为Error节点其errors属性携带来自底层ERRORtoken 的信息语法错误不产生Error节点而是挂在If等正常节点上。用ModelVisitor即可遍历检查class ErrorReporter(ModelVisitor): def generic_visit(self, node): if node.errors: print(fError on line {node.lineno}:) for error in node.errors: print(f- {error}) ModelVisitor.generic_visit(self, node)6.5 修改数据与保存修改模型有两种方式方式一直接修改 token 值适合简单改动。先通过visit_NodeName找到节点再用节点的get_token/get_tokens找到具体 token或直接用get_value/get_values取值的快捷方式改完调用根对象的save()保存。下面是关键字改名示例from robot.api.parsing import get_model, ModelVisitor, Token class KeywordRenamer(ModelVisitor): def __init__(self, old_name, new_name): self.old_name self.normalize(old_name) self.new_name new_name def normalize(self, name): return name.lower().replace( , ).replace(_, ) def visit_KeywordName(self, node): if self.normalize(node.name) self.old_name: token node.get_token(Token.KEYWORD_NAME) token.value self.new_name def visit_KeywordCall(self, node): if self.normalize(node.keyword) self.old_name: token node.get_token(Token.KEYWORD) token.value self.new_name model get_model(example.robot) renamer KeywordRenamer(Keyword, New Name) renamer.visit(model) model.save()一个真实的改名工具还需考虑 setup、teardown 与 template 中的关键字调用。修改 token 值后同行其他 token 的列偏移可能不准——这通常不影响保存与典型用途。方式二用 ModelTransformer 增删节点。删除节点只需在visit_NodeName中返回None不删除时必须返回原节点或替换节点。添加节点需要先构造模型对象既可以从 token 列表构造语句也可以用from_params便捷方法。下面的示例演示删除一个测试、给另一个测试插入新关键字、并新增带文档的设置区块from robot.api.parsing import ( get_model, Documentation, EmptyLine, KeywordCall, ModelTransformer, SettingSection, SectionHeader, Token ) class TestModifier(ModelTransformer): def visit_TestCase(self, node): name node.header.get_value(Token.TESTCASE_NAME) if name Second example: return None new_keyword KeywordCall([ Token(Token.SEPARATOR, ), Token(Token.KEYWORD, New Keyword), Token(Token.SEPARATOR, ), Token(Token.ARGUMENT, xxx), Token(Token.EOL) ]) node.body.insert(1, new_keyword) return node def visit_File(self, node): settings SettingSection( headerSectionHeader.from_params(Token.SETTING_HEADER), body[ Documentation.from_params(This is a really\npowerful API!), EmptyLine.from_params() ] ) node.sections.insert(0, settings) return self.generic_visit(node) model get_model(example.robot) TestModifier().visit(model) model.save(modified.robot)6.6 将模型转成可执行套件解析且可能修改过的模型可以用TestSuite.from_model类方法转换为可执行套件。此时应给get_model传入curdir参数以便${CURDIR}变量被正确解析from robot.api import TestSuite from robot.api.parsing import get_model model get_model(example.robot, curdir/home/robot/example) # modify model as needed suite TestSuite.from_model(model) suite.run()如果不需要修改模型直接用TestSuite.from_file_system得到可执行套件更简单。七、顶层导出的关键对象robot.api顶层再导出的核心对象均可from robot.api import XXX导入7.1 TestSuite 与 TestSuiteBuilder编程式构建与运行套件TestSuite来自 src/robot/running/model.py支持完全编程式地创建套件、测试、关键字并执行TestSuiteBuilder则从文件系统测试数据构建套件from robot.api import TestSuiteBuilder # 多个数据源会合并为一个套件名称由数据源名连接而成 suite TestSuiteBuilder().build(path/to/tests.robot) result suite.run()utest/api/test_exposed_api.py 验证了build接受单个字符串或多个数据源列表合并套件名形如Pass And Fail Normal。7.2 SuiteVisitor 与 prerunmodifierSuiteVisitor是处理测试数据的抽象基类可作为--prerunmodifier命令行选项的实现基类在执行前修改套件结构例如按标签筛选测试、重排执行顺序。仓库中--prerunmodifier的使用可参考验收测试 atest/robot/cli/model_modifiers。7.3 ExecutionResult、ResultVisitor 与 ResultWriterfrom robot.api import ExecutionResult, ResultVisitor, ResultWriter result ExecutionResult(output.xml) # 读取 XML 输出 # 用 ResultVisitor 遍历、处理结果 writer ResultWriter(result) # 或直接传入 output.xml 路径 writer.write_results()ResultWriter既能基于文件系统上的 XML 输出也能基于ExecutionResult返回的结果对象或已执行TestSuite的结果来写报告、日志、XML 与 XUnit 文件。ResultVisitor也是--prerebotmodifier的基类。7.4 TypeInfo、Languages 与 LanguageTypeInfo7.0 新增来自 src/robot/running/arguments/typeinfo.py用于解析类型注解并依据其转换值。Languages与Language供需要处理翻译的外部工具使用Language同时也是实现自定义翻译的基类相关单元测试位于 utest/api/test_languages.py。八、命令行入口与文档构建与命令行入口相关的 API 通过robot根包直接暴露而非robot.api包括robot.run执行测试。robot.rebot后处理输出Rebot。robot.libdocLibdoc 工具。robot.testdocTestdoc 工具。本文所述 API 文档即由 doc/api/autodoc/robot.api.rst 通过 Sphinx 的automodule指令从源码 docstring 自动生成仓库根目录执行make -C doc/api html可构建其内容骨架与本文讲解的五个子模块一一对应。总结robot.api是 Robot Framework 对外提供稳定契约的核心包logger负责测试库日志deco负责关键字与库的元数据定制exceptions负责通过异常控制执行走向interfaces提供动态库、混合库、监听器与自定义解析器的可选基类parsing则让你能以 Token 流或 AST 模型两种粒度程序化地检查与修改测试数据并可无缝转换为可执行套件。结合 utest/api 中的单元测试与 atest 中的验收测试可以持续验证这些 API 的契约不被破坏——这正是它作为外部工具集成基础的可靠保证。赞分享测试RPA接口测试【免费下载链接】robotframeworkGeneric automation framework for acceptance testing and RPA项目地址https://gitcode.com/gh_mirrors/ro/robotframework点击查看免费下载相关推荐Robot Framework API 使用指南从命令行入口点到 robot.api 公共 API 的完整解读Robot Framework API 使用指南从命令行入口点到 robot.api 公共 API 的完整解读 本篇技术指南基于仓库中 doc/api/ind测试RPA接口测试Robot Framework 顶层 robot 包解析公开 API、命令行入口与子包结构Robot Framework 顶层 robot 包解析公开 API、命令行入口与子包结构 导读 本文以仓库中的 API 文档页 doc/api/autodo测试RPA接口测试Robot Framework命令行执行完全指南标签过滤、执行顺序与超时控制Robot Framework命令行执行完全指南标签过滤、执行顺序与超时控制 Robot Framework通用自动化测试框架支持通过命令行直接启动测试测试RPA接口测试上一篇PyGaze插件开发指南如何扩展眼动追踪工具箱功能下一篇从入门到精通node-amqp 消息队列客户端实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考