菜单

测试框架

相关源文件

本文档介绍了 Caddy 完善的集成测试框架,该框架提供了用于测试服务器配置、HTTP 请求/响应处理以及配置适配的实用工具。该框架主要位于 caddytest 包中,并支持 JSON 和 Caddyfile 两种配置格式。

有关 Caddy 命令行界面测试工具的信息,请参阅命令。有关 Caddyfile 语法和解析的详细信息,请参阅Caddyfile

核心架构

该测试框架围绕 Tester 结构体构建,该结构体管理测试服务器实例,并提供配置加载、HTTP 测试和断言的实用工具。

来源:caddytest/caddytest.go1-590

Tester 结构体包含一个 HTTP 客户端,该客户端带有 cookie jar 和自定义传输层,可将所有请求重定向到 localhost,并提供配置管理功能。

测试配置管理

该框架通过 Config 结构体支持灵活配置,并提供将 JSON 和 Caddyfile 配置加载到运行中的 Caddy 实例的方法。

来源:caddytest/caddytest.go118-210 caddytest/caddytest.go267-302

关键配置功能

功能方法描述
服务器初始化InitServer()加载配置并确保服务器正在运行
证书路径解析prependCaddyFilePath()自动解析用于测试的证书路径
配置验证ensureConfigRunning()验证加载的配置与预期状态匹配
错误测试AssertLoadError()测试无效配置是否产生预期错误

HTTP 测试工具

该框架提供了一套全面的 HTTP 测试工具,可处理常见的测试场景,包括请求/响应断言、重定向和 Cookie 管理。

来源:caddytest/caddytest.go337-589

传输配置

该测试框架使用自定义 HTTP 传输层,其功能包括:

  • 无论主机名如何,都将所有请求重定向到 127.0.0.1
  • 跳过 TLS 证书验证以便测试
  • 支持 HTTP/2 和各种超时配置
  • 启用 cookie jar 功能以进行会话测试

配置适配测试

该框架包括用于测试 Caddyfile 到 JSON 配置适配的专用工具,确保 Caddyfile 语法正确转换为 Caddy 的内部 JSON 格式。

来源:caddytest/caddytest.go411-475 caddytest/integration/caddyfile_adapt_test.go16-56 caddyconfig/caddyfile/adapter.go32-64

适配测试功能

适配测试系统

  • caddyfile_adapt/ 目录中的文件加载测试用例
  • 根据 ---------- 分隔符分割测试文件(Caddyfile 在上,预期 JSON 在下)
  • 规范化平台特定路径和行尾符
  • 当适配不符合预期时提供详细的差异输出
  • 验证成功的适配和错误条件

集成测试示例

该框架支持各种类型的集成测试,从基本的 HTTP 功能到复杂的 TLS 和路由场景。

测试类别

测试类型示例文件主要功能
基本 HTTPcaddyfile_test.go请求/响应测试,重定向
配置适配caddyfile_adapt_test.goCaddyfile 到 JSON 转换
TLS/SNIsni_test.go证书处理,SNI 路由
错误处理caddyfile_test.go:696-823错误响应测试

测试结构示例

来源:caddytest/integration/caddyfile_test.go11-31 caddytest/integration/sni_test.go9-106

证书管理

该框架通过以下方式自动处理测试证书:

  • 检查集成目录中的证书文件
  • 使用正则表达式模式替换配置中的证书路径
  • caddy.localhost 域提供默认证书
  • 通过 Config 结构体支持自定义证书配置

来源:caddytest/caddytest.go55-57 caddytest/caddytest.go327-334 caddytest/caddytest.go269-273

错误测试

该框架包括用于测试配置错误和验证的工具

  • AssertLoadError() 验证无效配置是否产生预期的错误消息
  • 支持测试 Caddyfile 语法错误和逻辑配置错误
  • 当测试失败时提供详细的错误上下文

来源:caddytest/caddytest.go364-371 caddytest/integration/caddyfile_test.go63-73 caddytest/integration/caddyfile_test.go825-850