Test::Nginx 模块介绍
先说句题外话,Perl的测试模块那真是相当的爽,不仅可以爽到无与伦比的正则,还可以对测试用例自由组合、乱序运行等等。
Perl测试模块大概有如下:
- Test::Simple
- Test::More
- Test::Base 及衍生(这个我还没搞透)
一般Perl的测试用例,会在一个叫t/的目录下,一堆叫*.t的文件,其实就是普通的Perl脚本。
来段最简单的测试代码:
$ cat 1.t
use Test::Simple tests=>2;
ok(1 + 1 == 2, "test1 true");
ok("10" == 10, "test2 true");
$ perl 1.t
1..2
ok 1 - test1 true
ok 2 - test2 true
Test::Simple模块只有一个ok()函数,需要复杂的一些的话就用Test::More吧。
跑偏题太远了,回到本文要介绍的Test::Nginx模块。个人觉得这个测试适用于以下场景:
- Nginx测试,包括:自身、模块、配置等测试
- 反向代理测试,比如后端的HTTP或者其他服务
安装可以用cpan或者直接clone一份Test::Nginx,库地址:https://github.com/agentzh/test-nginx
文档:
摘抄模块中的一段测试用例:
use Test::Nginx::Socket;
repeat_each(1);
plan tests => 2 * repeat_each() * blocks();
$ENV{TEST_NGINX_MEMCACHED_PORT} ||= 11211; # make this env take a default value
run_tests();
__DATA__
=== TEST 1: sanity
--- config
location /foo {
set $memc_cmd set;
set $memc_key foo;
set $memc_value bar;
memc_pass 127.0.0.1:$TEST_NGINX_MEMCACHED_PORT;
}
--- request
GET /foo
--- response_body_like: STORED
--- error_code: 201
可以看出就是一个基础的Perl代码,外加一部分Nginx的配置。TEST部分扩展自Test::Base:
- config,一段标准的location
- request,发起HTTP请求
- response_body_like,类似于匹配,这里可以用帅气的正则(例子)都可以
可以参考 @agentzh 很多跟Nginx有关的模块,都包含有大量的测试代码。
像我一样懒惰的人,直接copy一份,补一些业务代码就可以啦。
如果有一堆*.t测试脚本,还用perl *.t方式就不合适,Perl自带了一个工具:prove,常用参数:
-l 类似-Ilib路径,加载一些库。比如上面的Test::Nginx模块不在默认LIB下
-s 随机跑测试用例
prove命令默认会找当前目录下t/文件夹下所有*.t脚本。