菜单

测试框架

相关源文件

概述

frp 测试框架是一个端到端 (e2e) 测试系统,旨在验证 frp 组件在受控环境下的功能和可靠性。该框架通过模拟真实场景,实现了对客户端(frpc)和服务器(frps)组件的自动化测试。

测试框架专注于通过运行实际的软件实例并验证它们之间的交互来验证 frp 组件的行为。本文档解释了 e2e 测试框架的架构、组件和用法。

来源: test/e2e/framework/framework.go1-42 hack/run-e2e.sh1-34

架构

测试框架基于 Ginkgo v2 测试库构建,该库提供了 BDD 风格的测试结构。框架负责测试组件的生命周期,包括进程管理、端口分配和资源清理。

测试框架结构

来源: test/e2e/framework/framework.go43-91 hack/run-e2e.sh1-34

核心组件

框架

Framework 结构是测试框架的核心组件。它负责管理测试的生命周期,包括设置和拆卸操作、资源分配和进程管理。

主要职责

  • 为测试构件创建临时目录
  • 管理端口分配,以避免并行测试中的冲突
  • 启动和停止用于测试的模拟服务器
  • 使用动态端口分配渲染配置模板
  • 管理 frps 和 frpc 实例的进程生命周期
  • 确保测试后资源的正确清理

来源: test/e2e/framework/framework.go26-62 test/e2e/framework/framework.go85-110

端口分配

端口分配器确保并行运行的测试不会因使用相同的网络端口而发生冲突。它将可用端口范围分配给测试工作进程,并在分配端口之前验证端口是否确实可用。

来源: test/e2e/pkg/port/port.go1-116

进程管理

RunProcesses 方法负责使用配置模板启动 frps 和 frpc 进程。框架会渲染配置模板,将其写入临时文件,然后启动实际的进程。

关键能力

  • 启动多个服务器和客户端进程
  • 捕获 stdout 和 stderr 以供调试
  • 管理进程生命周期(启动、停止)
  • 处理配置文件的生成
  • 提供进程启动之间的超时

来源: test/e2e/framework/process.go13-69 test/e2e/framework/process.go71-100

测试生命周期

每个测试都遵循框架管理的标准生命周期

  1. 设置 (BeforeEach):

    • 创建临时目录
    • 初始化端口分配器
    • 启动模拟服务器
    • 准备环境
  2. 测试执行:

    • 渲染配置模板
    • 分配端口
    • 启动 frps 和 frpc 进程
    • 运行测试断言
  3. 拆卸 (AfterEach):

    • 停止所有进程
    • 释放已分配的端口
    • 关闭模拟服务器
    • 删除临时文件
    • 清理资源

此生命周期确保每个测试都在隔离环境中运行,并且不会干扰其他并行运行的测试。

来源: test/e2e/framework/framework.go86-164

模板渲染

该框架使用 Go 模板来生成 frps 和 frpc 的配置文件。模板可以包含用于动态端口分配的占位符,框架会将这些占位符替换为实际分配的端口。

模板中端口分配的示例

[common]
bind_port = {{ .Port1 }}

框架将从模板中提取端口名称,分配实际端口,并渲染最终的配置文件。

来源: test/e2e/framework/framework.go166-231

运行测试

要运行 e2e 测试,请使用 run-e2e.sh 脚本

./hack/run-e2e.sh

该脚本支持多个环境变量来控制测试执行

可变描述默认
DEBUG启用调试输出false
LOG_LEVEL设置日志级别debug
FRPC_PATHfrpc 二进制文件的路径./bin/frpc
FRPS_PATHfrps 二进制文件的路径./bin/frps
CONCURRENCY并行测试工作进程的数量16

来源: hack/run-e2e.sh1-34

示例测试工作流程

来源: test/e2e/framework/process.go13-69 test/e2e/framework/framework.go86-164

高级用法

运行自定义进程命令

框架提供方法来运行带有自定义命令行参数的 frps 和 frpc

来源: test/e2e/framework/process.go71-92

生成配置文件

您可以生成具有特定内容的配置文件

来源: test/e2e/framework/process.go94-100

设置环境变量

框架允许为 frps 和 frpc 进程设置环境变量

来源: test/e2e/framework/framework.go257-259

最佳实践

  1. 使用模板渲染:利用模板渲染机制来创建具有动态端口分配的配置文件。

  2. 清理资源:框架会自动清理资源,但请确保任何自定义资源都已正确释放。

  3. 处理故障:在启动进程和分配端口时检查错误。

  4. 调试输出:在排查测试故障时启用调试输出。

  5. 并行测试:设计独立运行的测试,以利用并行测试执行。

结论

frp e2e 测试框架提供了一种健壮的方式来在受控环境中测试 frp 组件的功能。它处理了进程管理、端口分配和资源清理等复杂任务,使测试作者能够专注于编写有意义的测试场景。

有关为 frp 项目贡献和了解开发指南,请参阅 贡献指南