概述

Test::Nginx 是一个基于 Perl 的 Nginx 测试框架,由 OpenResty 团队开发和维护,是 OpenResty 生态系统中最核心的测试工具。

什么是 Test::Nginx

Test::Nginx::Socket 是一个用于自动化测试 Nginx C 模块、Nginx 配置以及 OpenResty/Lua 相关模块的测试框架。它以数据驱动(data-driven)的方式编写测试用例,将测试的输入、配置和预期输出都声明在测试文件的 __DATA__ 段中。

该框架会自动完成以下工作:

  • 根据测试用例生成完整的 nginx.conf 配置文件
  • 启动一个临时的 Nginx 服务器实例
  • 向该实例发送 HTTP 请求
  • 检查响应状态码、响应头、响应体
  • 检查错误日志内容
  • 测试完成后自动关闭并清理 Nginx 实例

它是 OpenResty 自身(包含 80+ 子项目,共计 600,000+ 行测试代码)的核心测试基础设施。

为什么使用 Test::Nginx

相比其他 Nginx 测试方法,Test::Nginx 具有以下优势:

声明式测试:你只需要描述"做什么"和"期望什么",而不需要写大量的过程式代码。每个测试块都是自描述的。

完整的生命周期管理:框架自动处理 Nginx 的启动、配置生成、请求发送、日志检查、进程关闭等全部流程。

内置 Mock 服务器:支持 TCP/UDP mock 服务器,无需依赖外部服务即可测试代理和上游交互。

强大的断言系统:支持精确匹配、正则匹配、日志检查、错误码检查等多种断言方式。

与 Perl TAP 生态集成:基于 Perl 的 TAP (Test Anything Protocol) 协议,可以与 prove 等标准工具无缝配合。

模块体系

Test::Nginx 包含多个子模块:

模块用途
Test::Nginx::Socket最常用的核心模块,基于 socket 进行 HTTP 通信
Test::Nginx::Socket::Lua针对 OpenResty Lua 模块的扩展测试类
Test::Nginx::Socket::Lua::Stream针对 stream 模块的 Lua 测试
Test::Nginx::Socket::Lua::Dgram针对 UDP/dgram 的 Lua 测试

大多数情况下你只需要使用 Test::Nginx::Socket::Lua,它继承了 Test::Nginx::Socket 的所有功能并添加了 Lua 相关的测试支持。

perl
1use Test::Nginx::Socket::Lua;
2
3# 或者直接使用基础模块
4use Test::Nginx::Socket 'no_plan';