- 测试
- RPA
- 接口测试
【免费下载链接】robotframework
Generic automation framework for acceptance testing and RPA
本指南基于 Robot Framework 用户指南附录 Registrations,系统梳理与 Robot Framework 官方注册/关联的技术标识:套件文件与资源文件的扩展名体系、数据媒体类型text/robotframework,以及远程服务器(Remote Server)默认端口 8270。读完本文,你将能准确区分哪些扩展名会被自动解析、哪些需要单独配置,并能在项目实践中正确选择文件格式、配置远程库连接端口。文中每个结论都结合仓库源码与测试用例给出可验证依据。
为什么需要"注册信息"?
Robot Framework 在解析目录、导入资源文件时,需要依据文件扩展名判断文件的"身份"与"格式"——是测试套件(Suite)还是资源文件(Resource),是纯文本格式、reStructuredText 格式还是 JSON 格式。附录 Registrations 正是这些规则的官方汇总。理解这些注册规则,可以避免两个常见误区:
- 随意命名的文件(如
.foo、.bar)不会被自动发现,除非通过 --extension 选项 单独配置; - 资源文件与套件文件的扩展名集合并不相同,混用可能导致文件被当作套件解析而产生意外行为。
套件文件扩展名
Suite files(套件文件)携带以下扩展名时会被自动解析:
| 扩展名 | 对应格式 | 说明 |
|---|---|---|
.robot | 纯文本格式(plain text format) | 最常用的现代格式 |
.robot.rst | reStructuredText 格式 | 以.rst结尾的套件文件 |
.rbt | JSON 格式 | 由robot输出/导入的 JSON 套件文件 |
使用其他扩展名是可能的,但需要单独配置(即通过命令行选项--extension显式指定要解析的扩展名)。
源码级验证:默认扩展名从哪来
在 src/robot/parsing/suitestructure.py 中,SuiteStructureBuilder的构造函数明确给出了默认扩展名元组:
class SuiteStructureBuilder: ignored_prefixes = ('_', '.') ignored_dirs = ('CVS',) def __init__(self, extensions: Sequence[str] = ('.robot', '.rbt', '.robot.rst'), included_files: Sequence[str] = ()): self.extensions = ValidExtensions(extensions, included_files) self.included_files = IncludedFiles(included_files)可以看到默认值正是.robot、.rbt、.robot.rst三个。而 src/robot/parsing/suitestructure.py 中的ValidExtensions会做去点、小写化处理,并在目录扫描时逐个匹配文件后缀。运行目录发现(Directory Discovery)时,只有匹配这些扩展名的文件才会被纳入套件结构。
在 src/robot/conf/settings.py 中,--extension命令行选项(对应内部键'extension')正是用来覆盖这一默认集合的,例如:
robot --extension robot . # 仅解析 .robot 文件 robot --extension .robot:.rbt . # 同时解析 .robot 与 .rbtJSON 套件格式的来历
.rbt扩展名对应 JSON 格式套件。在 src/robot/running/builder/parsers.py 中,JsonParser通过TestSuite.from_json(source)直接反序列化 JSON 文件:
class JsonParser(Parser): def parse_suite_file(self, source: Path, defaults: TestDefaults) -> TestSuite: return TestSuite.from_json(source) def parse_init_file(self, source: Path, defaults: TestDefaults) -> TestSuite: return TestSuite.from_json(source)这类文件通常由robot的 JSON 输出功能生成(如--json选项产生的输出),也可以手工构造后作为输入,用于二次处理或结果复用场景。
资源文件扩展名
Resource files(资源文件)可以使用的扩展名更多,因为资源文件既有"格式"维度,也有"向后兼容"维度:
| 扩展名 | 对应格式/用途 | 说明 |
|---|---|---|
.resource | 纯文本格式 | 推荐用于纯文本格式资源文件 |
.robot/.txt/.tsv | 纯文本格式 | 出于向后兼容原因被支持;官方推荐改用.resource,未来可能强制要求 |
.rst/.rest | reStructuredText 格式 | 资源文件的 reStructuredText 形式 |
.rsrc/.json | JSON 格式 | 资源文件的 JSON 形式 |
源码级验证:资源扩展名集合
在 src/robot/running/importer.py 中,资源文件的合法扩展名被定义为常量集合:
RESOURCE_EXTENSIONS = {'.resource', '.robot', '.txt', '.tsv', '.rst', '.rest', '.json', '.rsrc'}这与附录所列完全一致。而资源解析器的选择逻辑位于 src/robot/running/builder/builders.py,按后缀分流到不同解析器:
def _parse(self, source: Path) -> ResourceFile: suffix = source.suffix.lower() if suffix in ('.rst', '.rest'): parser = RestParser(self.lang, self.process_curdir) elif suffix in ('.json', '.rsrc'): parser = JsonParser() else: parser = RobotParser(self.lang, self.process_curdir) return parser.parse_resource_file(source)reStructuredText 与 JSON 资源文件的解析器
.rst/.rest:由 src/robot/running/builder/parsers.py 中的RestParser处理,其扩展名声明为('.robot.rst', '.rst', '.rest'),内部通过read_rest_data(reader)把 reStructuredText 数据转换为普通文本模型再解析。.json/.rsrc:由JsonParser处理,调用ResourceFile.from_json(source)反序列化。
注意.rest与.rsrc是.rst、.json的别名扩展名,二者都接受。这也解释了为什么在 atest 测试数据(见 atest/parsing/data_formats 目录下 8 个测试数据文件)中会同时出现.rest、.rsrc等多种后缀的样本——它们用于验证"非标准但合法"扩展名的解析路径。
扩展名后缀匹配的大小写处理
从源码可以推断,扩展名匹配是不区分大小写的:builders.py中先执行source.suffix.lower()再比较,suitestructure.py中ValidExtensions也统一转为小写。因此.ROBOT、.Rbt等大小写变体同样能被识别。
媒体类型:text/robotframework
与 Robot Framework 数据关联的官方媒体类型(Media Type)为:
text/robotframework该标识用于在 HTTP 传输、内容协商、编辑器语法高亮插件、文件类型识别等场景中标记 Robot Framework 数据文件。当你在编辑器或 Web 服务中需要为 Robot Framework 文件声明 MIME 类型时,应使用该值,而非笼统的text/plain。仓库中此标识在文档体系中被正式登记(见 doc/userguide/src/Appendices/Registrations.rst),是其官方身份标识的一部分。
远程服务器默认端口:8270
Robot Framework 的远程库接口(Remote library interface)默认端口为8270,且该端口已由 IANA 正式注册登记,避免与其他服务冲突。
源码级验证:Remote 库的默认 URI
在 src/robot/libraries/Remote.py 中,内置 Remote 库的构造函数默认 URI 即为http://127.0.0.1:8270:
class Remote: def __init__(self, uri='http://127.0.0.1:8270', timeout=None):这意味着当你导入Remote库而不指定 URI 时,Robot Framework 会默认连接本机 8270 端口上运行的远程服务器。远程服务器可以是任何语言实现的进程,只要遵循远程接口协议(XML-RPC 风格接口)即可。
在 Libdoc 中的使用示例
src/robot/libdoc.py 中提供了结合远程库与端口的实际命令行示例:
libdoc --name MyLibrary Remote::10.0.0.42:8270 MyLibrary.xml libdoc Remote::10.0.0.42:8270 show这里使用Remote::host:port语法把远程服务器包装为库对象,再生成 XML 规范文档或直接查看。实际使用中,若远程服务器部署在非默认端口,只需在 URI 中显式给出端口号:
*** Settings *** Library Remote http://192.168.1.10:9000实践速查与建议
- 新项目套件文件:一律使用
.robot(纯文本格式),可读性最好、工具链支持最全;需要 reStructuredText 文档化测试时用.robot.rst;需要机器可读、可程序化生成的测试数据时用.rbt(JSON)。 - 新项目资源文件:一律使用
.resource。.robot/.txt/.tsv仅为向后兼容保留,官方已提示未来可能强制要求.resource,尽早迁移可避免升级风险。 - 遗留项目:若目录中存在
.txt、.tsv等旧扩展名套件文件,需要通过--extension显式配置才能被解析(它们属于"其他扩展名"范畴)。 - 远程库:默认端口 8270 已被 IANA 注册,本地调试可直接使用默认值;多实例或跨机器部署时在
Remote库 URI 中显式指定端口,并用 Libdoc 校验接口。 - 内容分发:在 HTTP 响应头或编辑器配置中为 Robot Framework 数据文件声明
text/robotframework媒体类型。
如需深入了解格式本身(如 reStructuredText 与 JSON 数据的具体语法),可继续阅读 用户指南数据解析相关章节 与 解析器源码,并参考 atest/parsing/data_formats 下的真实测试数据验证各类扩展名的解析行为。
- 测试
- RPA
- 接口测试
【免费下载链接】robotframework
Generic automation framework for acceptance testing and RPA
相关推荐
ThinkPHP Framework文件类型验证:MIME类型与扩展名
ThinkPHP Framework文件类型验证:MIME类型与扩展名 你是否在开发上传功能时遇到过用户上传恶意文件的困扰?是否担心过看似无害的.jpg文件其实
后端Web框架OHIF 全局类型扩展指南:使用 withAppTypes 与 AppTypes 命名空间为扩展服务注入类型安全
OHIF 全局类型扩展指南:使用 withAppTypes 与 AppTypes 命名空间为扩展服务注入类型安全 本文是一份面向 OHIF Viewer 应用开
医疗健康前端音视频Robot Framework 资源文件扩展名机制详解:以 reST(.rst)资源文件为例
Robot Framework 资源文件扩展名机制详解:以 reST(.rst)资源文件为例 导读 Robot Framework 的资源文件(Resource
测试RPA接口测试
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考