Robot Framework 注册信息全解:文件扩展名、媒体类型与远程服务器端口
2026/9/24 17:36:38 网站建设 项目流程
  • 测试
  • RPA
  • 接口测试

【免费下载链接】robotframework

Generic automation framework for acceptance testing and RPA

项目地址:https://gitcode.com/gh_mirrors/ro/robotframework
点击查看免费下载

本指南基于 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.rstreStructuredText 格式.rst结尾的套件文件
.rbtJSON 格式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 与 .rbt

JSON 套件格式的来历

.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/.restreStructuredText 格式资源文件的 reStructuredText 形式
.rsrc/.jsonJSON 格式资源文件的 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.pyValidExtensions也统一转为小写。因此.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

实践速查与建议

  1. 新项目套件文件:一律使用.robot(纯文本格式),可读性最好、工具链支持最全;需要 reStructuredText 文档化测试时用.robot.rst;需要机器可读、可程序化生成的测试数据时用.rbt(JSON)。
  2. 新项目资源文件:一律使用.resource.robot/.txt/.tsv仅为向后兼容保留,官方已提示未来可能强制要求.resource,尽早迁移可避免升级风险。
  3. 遗留项目:若目录中存在.txt.tsv等旧扩展名套件文件,需要通过--extension显式配置才能被解析(它们属于"其他扩展名"范畴)。
  4. 远程库:默认端口 8270 已被 IANA 注册,本地调试可直接使用默认值;多实例或跨机器部署时在Remote库 URI 中显式指定端口,并用 Libdoc 校验接口。
  5. 内容分发:在 HTTP 响应头或编辑器配置中为 Robot Framework 数据文件声明text/robotframework媒体类型。

如需深入了解格式本身(如 reStructuredText 与 JSON 数据的具体语法),可继续阅读 用户指南数据解析相关章节 与 解析器源码,并参考 atest/parsing/data_formats 下的真实测试数据验证各类扩展名的解析行为。

  • 测试
  • RPA
  • 接口测试

【免费下载链接】robotframework

Generic automation framework for acceptance testing and RPA

项目地址:https://gitcode.com/gh_mirrors/ro/robotframework
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询