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 执行流程:

  1. 组装 nginx.conf,启动 nginx 实例进程
    根据我们在 Makefile 里配置的 PATH,和每一个 .t 文件最前面的一些配置项

会组装一个完整的 nginx.conf 文件
把 t/servroot 当成 nginx 的工作目录,启动 nginx 实例

  1. 发起 http 请求,根据每个测试案例的提供的信息

  2. 检查 http 的返回项
    包括 http status,http response header, http response body

更多测试项:
etcproxy 可以在 tcp 层上做一个延时转发,模拟测试 bad 网络环境
valgrind 内存泄露检查
stap 检查; 调用 systemtap 做输出检查

相关推荐