本页面为 frp 项目的贡献者提供必要信息,重点介绍开发工作流程和测试基础设施。它解释了如何设置开发环境、理解测试框架以及运行测试来验证您的更改。有关具体的贡献指南,请参阅贡献指南。
要为 frp 做贡献,您需要设置一个包含以下组件的本地开发环境:
该项目使用 Go modules 进行依赖管理,因此不需要额外的包管理器。
frp 项目采用了一个全面的端到端测试框架来验证跨不同组件的功能。该框架旨在启动完整的 frp 环境(服务器和客户端),并具有各种配置来测试不同的场景。
来源: test/e2e/framework/framework.go18-64 test/e2e/framework/framework.go86-164
测试框架包含几个关键组件:
Framework 结构体是管理测试生命周期的核心组件。它负责:
来源: test/e2e/framework/framework.go26-62
PortAllocator 负责管理端口分配,以避免在并行测试时发生冲突。主要功能:
来源: test/e2e/pkg/port/port.go12-86 test/e2e/framework/framework.go237-246
测试框架通过结构化的方法执行 frp 进程并管理它们的生命周期。
来源: test/e2e/framework/process.go13-69
该项目包含一个端到端测试脚本,可以自动化测试执行过程。该脚本位于 hack/run-e2e.sh,可以从项目根目录执行。
# Run all end-to-end tests
./hack/run-e2e.sh
# Run with debug output
DEBUG=true ./hack/run-e2e.sh
# Specify log level
LOG_LEVEL=info ./hack/run-e2e.sh
# Specify frpc/frps paths (for testing custom builds)
FRPC_PATH=/path/to/frpc FRPS_PATH=/path/to/frps ./hack/run-e2e.sh
# Adjust concurrency
CONCURRENCY=8 ./hack/run-e2e.sh
该脚本会在找不到 Ginkgo 的情况下自动安装它,然后设置环境并使用适当的参数运行测试。
测试通过全局 TestContext 结构体进行配置,该结构体包含:
| 参数 | 描述 | 默认 |
|---|---|---|
| FRPClientPath | frpc 二进制文件的路径 | ./bin/frpc |
| FRPServerPath | frps 二进制文件的路径 | ./bin/frps |
| LogLevel | 测试的日志级别 | debug |
| 调试 | 启用调试输出 | false |
| 并发 | 并行测试数量 | 16 |
新测试应使用 Ginkgo 测试框架编写。典型的测试结构:
test/e2e/ 下创建一个带有描述性名称的新文件示例测试工作流程
框架使用 Go 模板生成 frp 配置文件。模板可以包含端口占位符,这些占位符将被分配的端口替换。
[common]
bind_port = {{ .PortServerName }}
[test_tcp]
type = tcp
local_port = {{ .PortLocalService }}
remote_port = {{ .PortRemoteService }}
来源: test/e2e/framework/framework.go174-231
在为 frp 项目贡献时,请遵循以下测试最佳实践: