测试文件结构
了解 Test::Nginx 测试文件的详细组成:prologue、__DATA__ 和测试块
文件结构总览
每个 .t 测试文件由两大部分组成,以 __DATA__ 行为分界:
perl
1# ============ Prologue(序言部分)============2use Test::Nginx::Socket::Lua;34# 配置函数调用5repeat_each(2);6no_shuffle();7no_long_string();89run_tests();1011# ============ 分界线 ============12__DATA__1314# ============ Data 部分:测试块 ============15=== TEST 1: basic test16--- config17 location /t {18 echo "hello";19 }20--- request21GET /t22--- response_body23helloPrologue(序言)
序言部分是标准的 Perl 代码,用于:
- 加载测试模块:通常是
Test::Nginx::Socket::Lua - 调用配置函数:如
repeat_each()、no_shuffle()等 - 设置计划:可以使用
no_plan或指定测试数量 - 自定义预处理:通过
add_block_preprocessor添加逻辑 - 调用
run_tests():必须在__DATA__之前调用
run_tests() 必须在 DATA 之前调用,否则测试不会执行。
测试块
每个测试块以 === TEST N: title 开头,包含若干数据段(sections)。常见格式:
- 每个数据段以
--- section_name开头 - 单行值使用冒号语法:
--- error_code: 200 - 多行值另起一行书写
- 段之间没有分隔符,下一个
---自动结束上一段
perl
1=== TEST 1: multi-section example2这里是测试的描述文字(可选)3--- config4 location /t {5 content_by_lua_block {6 ngx.say("hello")7 }8 }9--- request10GET /t11--- response_body12hello13--- no_error_log14[error]过滤器
每个数据段可以附加过滤器来处理其值:
| 过滤器 | 作用 |
|---|---|
chomp | 去除末尾换行符 |
chop | 去除末尾最后一个字符 |
eval | 将值作为 Perl 代码执行 |
trim | 去除首尾空白 |
过滤器写在段名后面,用空格分隔:
perl
1--- response_body chomp2Hello World3--- error_code eval4200 + 1