openresty开发 test-nginx 使用文档
test-nginx 使用文档
install git clone https://github.com/agentzh/test-nginx.git cd test-nginx & perl Makefile.PL sudo make install
如果缺少包的话,可以通过 cpan 装;例如 装 Test:More
sudo perl -MCPAN -e shell cpan[1]> install Test:LongString geting started
文件目录组织:
一般是在一个项目下新建 t 目录来存放测试集
以lua-resty-redis 为例:https://github.com/agentzh/lua-resty-redis
有 Makefile ,test 选项里有重要的一句:
prove -I../test-nginx/lib -r t
这里有调用 perl 的 prove 指令,prove 会去执行测试
t 目录下有 很多个 .t 文件,里面就是测试案例
编写测试案例:
一个测试案例主要有三部分内容:
程序代码: nginx location 的配置内容
输入: http 的 request 信息
输出检查: status,header,body,error_log 检查
https://github.com/agentzh/lua-resty-redis/blob/master/t/sanity.t
还是以 lua-resty-redis 的一个为例,第 25 行之后的才是每个测试案例的内容
即完成一个测试案例里的那三项内容
=== Test 1:
— request 表示输入是 发一起 http GET 请求 /t
GET /t
— config 表示 nginx.conf 里 location /t 里的内容
— response_body 表示对 http 返回的 body 进行匹配检查
— no_error_log 表示会对 nginx 的 error.log 检查,必须没有 EORROR 级别的记录
更完成的输入,输出检查项 定义,可以看 https://github.com/agentzh/test-nginx/blob/master/lib/Test/Nginx/Socket.pm
1870 行之后有完整的文档
进一步解释, test-nginx 执行流程:
组装 nginx.conf,启动 nginx 实例进程
根据我们在 Makefile 里配置的 PATH,和每一个 .t 文件最前面的一些配置项
会组装一个完整的 nginx.conf 文件
把 t/servroot 当成 nginx 的工作目录,启动 nginx 实例
发起 http 请求,根据每个测试案例的提供的信息
检查 http 的返回项
包括 http status,http response header, http response body
更多测试项:
etcproxy 可以在 tcp 层上做一个延时转发,模拟测试 bad 网络环境
valgrind 内存泄露检查
stap 检查; 调用 systemtap 做输出检查