Openresty测试框架--Test::Nginx

本文详细介绍了Test::Nginx测试框架的使用,包括组件介绍、测试目录结构、文件格式和进阶技巧。讲解了Perl变量引用、lua流程模块、超时测试、丰富测试模式等内容,帮助开发者更好地进行Openresty的测试工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Test::Nginx使用说明

1. 简介

1.1 组件介绍

Test::Nginx是一个由Perl编写的nginx测试组件,继承自Test::Base。

1.2 安装方法

sudo cpan Test::Nginx

1.3 测试目录结构

测试目录最好命名为t,因为在测试过程中会在t中创建conf目录存储当前测试的配置和日志(默认路径为t/),应该可以提供参数来指定目录,尚未研究。

cc_cache/
├── go.sh
└── t
    ├── 001-test.t
    ├── 002-strategy.t
    ├── 003-rule.t
    └── ANYU.pm

1.4 测试文件格式

Test::Nginx遵循一种特殊的设计。

#codes...

__DATA__

#suites...

如代码片段所示,使用__DATA__将每个测试文件分割成代码和测试用例两部分,Perl解释器将只运行代码部分内容。

__DATA__
其实这是Perl相关的语法,在代码中使用<STDIN>可以从标准输入接收数据,类似地使用<DATA>文件句柄可以直接从脚本自身获取数据(脚本中特殊常量__DATA__之后的内容),同时它也标志着脚本的逻辑代码的结束。
注意:第二次使用句柄时,需要修改偏移量才能重新从头读取数据。

1.4.1 代码部分
# 调用对应的测试模块,一般情况使用'no plan'即可
use Test::Nginx::Socket 'no plan';
# 运行测试用例
run_tests();
1.4.2 用例部分

由一系列测试块(BLOCK)组成,每个测试块由标题、可选描述和一组用例组成。

# 标题名称,合理标题前缀有利于测试结果分析
# 可以使用reindex命令自动生成TEST编号前缀
=== title TEST01: NAME
optional description

# value1包含换行符在内多行数据
# 可以使用多个filter对value1进行预处理
--- section1 (filter ...)
value1

# value2默认使用了chmop去掉了两边的空白符
--- section2 : value2

常用sections举例。

=== TEST 1: hello, world
This is just a simple demonstration

# 增加配置到server{}
--- config
location = /t {
   
    echo "hello, world!";
}

# 发起测试请求
--- request
GET /t

# 确认响应body
# chomp用来去掉value两边的空白符
--- response_body chomp
hello, world!

# 确认响应状态码,不显示指定该section时默认200
--- error_code: 200

# 仅运行此block
--- ONLY

# 跳过此block
--- SKIP

# eval将value作为代码执行并获取对应结果
-- response_body eval
"a" x 4096
1.4.3 更多Sections
Section 说明 备注
config 插入server块配置
http_config 插入http块配置
main_config 插入顶层配置
request 发起请求 默认HTTP/1.1,可以后缀指定
pipelined_requests 多个请求 request好像会自动转换
response_body 响应body 可以用eval支持qr//格式的正则
response_body_like 响应正则 response_body好像会自动转换
error_code 响应码 默认200
more_headers 请求头
response_headers 响应头检查
error_log 错误日志包含
no_error_log 错误日志不包含 使用[error]确定没异常
grep_error_log 筛选日志条件 结果与grep_error_log_out匹配
grep_error_log_out 匹配筛选日志 类res可以是多行内容
wait 日志等待时间 单位秒,支持float
must_die 测试启动失败 标记,启动失败则测试通过
ONLY 只测试当前block 标记
SKIP 跳过当前block 标记
ignore_response 不检查响应完整性 默认HTTP/1.1协议格式
timeout 连接超时时间 默认3秒

测试时将为每个block生成一个配置文件t/servroot/conf/nginx.conf进行测试。
我们还可以通过编写perl代码的方式来新增section或扩展现有的section。

1.4.4 测试代码实例

测试用例文件t/001-test.t中的内容如下所示,以供参考。

  1
  2 use t::ANYU 'no_plan';
  3
  4 run_tests();
  5
  6
  7 __DATA__
  8
  9 === TEST 1: test hello world
 10 Start test::nginx.
 11
 12 --- config
 13 location /test {
   
 14     rewrite_by_lua_block {
   
 15         ngx.print('hello world');
 16     }
 17 }
 18
 19 --- pipelined_requests eval
 20 [
 21     "GET /test",
 22     "GET /test"
 23 ]
 24
 25
 26 --- response_body eval
 27 [
 28     "hello world",
 29     qr/hello.*world/
 30 ]
 31
 32
 33 #--- error_code chomp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值