测试文件结构

了解 Test::Nginx 测试文件的详细组成:prologue、__DATA__ 和测试块

文件结构总览

每个 .t 测试文件由两大部分组成,以 __DATA__ 行为分界:

perl
1# ============ Prologue(序言部分)============
2use Test::Nginx::Socket::Lua;
3
4# 配置函数调用
5repeat_each(2);
6no_shuffle();
7no_long_string();
8
9run_tests();
10
11# ============ 分界线 ============
12__DATA__
13
14# ============ Data 部分:测试块 ============
15=== TEST 1: basic test
16--- config
17 location /t {
18 echo "hello";
19 }
20--- request
21GET /t
22--- response_body
23hello

Prologue(序言)

序言部分是标准的 Perl 代码,用于:

  1. 加载测试模块:通常是 Test::Nginx::Socket::Lua
  2. 调用配置函数:如 repeat_each()no_shuffle()
  3. 设置计划:可以使用 no_plan 或指定测试数量
  4. 自定义预处理:通过 add_block_preprocessor 添加逻辑
  5. 调用 run_tests():必须在 __DATA__ 之前调用

run_tests() 必须在 DATA 之前调用,否则测试不会执行。

测试块

每个测试块以 === TEST N: title 开头,包含若干数据段(sections)。常见格式:

  • 每个数据段以 --- section_name 开头
  • 单行值使用冒号语法:--- error_code: 200
  • 多行值另起一行书写
  • 段之间没有分隔符,下一个 --- 自动结束上一段
perl
1=== TEST 1: multi-section example
2这里是测试的描述文字(可选)
3--- config
4 location /t {
5 content_by_lua_block {
6 ngx.say("hello")
7 }
8 }
9--- request
10GET /t
11--- response_body
12hello
13--- no_error_log
14[error]

过滤器

每个数据段可以附加过滤器来处理其值:

过滤器作用
chomp去除末尾换行符
chop去除末尾最后一个字符
eval将值作为 Perl 代码执行
trim去除首尾空白

过滤器写在段名后面,用空格分隔:

perl
1--- response_body chomp
2Hello World
3--- error_code eval
4200 + 1