Skip to content

How to test

Xiaochen Wang edited this page Sep 5, 2017 · 2 revisions

测试库的来源

Tengine目前的测试库包含两个部分:nginx-tests (http://mdounin.ru/hg/nginx-tests/) 和 test-nginx (http://search.cpan.org/dist/Test-Nginx/) ,前者是Maxim Dounin 开发的,后者是agentzh开发的。Tengine开发者可以根据自己的喜好,选择相应的测试库。

测试库的位置

所有的测试代码位于tengine/tests目录下面。所有的测试脚本都是perl写的,后缀名为.t,可以用prove命令进行测试。

make test指令

现在Tengine已经支持make test,可以直接在tengine的源代码根目录运行:

 make test

如果有任何错误,你可以往https://github.com/taobao/tengine/issues 报告bug。

如何使用nginx-tests

nginx-tests测试集的代码位于tengine/tests/nginx-tests里面,其中nginx-tests目录下面的测试代码是Maxim针对Nginx官方的测试集,lib目录是nginx-tests测试库的位置。

Tengine的测试集位于cases目录下面,在测试时可能缺失上述lib目录,你可以把在prove命令的-I选项中加入lib目录:

-I /path/to/tests/nginx-tests/nginx-tests/lib 

当你安装了Tengine以后,就可以运行nginx-tests的测试集合了。下面是测试的命令:

TEST_NGINX_BINARY=/path/to/your/nginx/sbin/nginx prove -I nginx-tests/lib cases
TEST_NGINX_BINARY=/path/to/your/nginx/sbin/nginx prove nginx-tests

TEST_NGINX_BINARY指向的是Tengine二进制代码的路径。

如何测试DSO模块

在测试命令中加入 TEST_NGINX_DSO=1 这个环境变量,比如:

 TEST_NGINX_DSO=1 TEST_NGINX_BINARY=/path/to/nginx/sbin/nginx prove -I nginx-tests/lib cases
 TEST_NGINX_DSO=1 TEST_NGINX_BINARY=/path/to/nginx/sbin/nginx prove -I nginx-tests/lib dso-nginx-tests

如果你的测试脚本需要支持DSO,首先需要动态编译好,放入模块的动态编译模块目录,然后在测试脚本里加上以下类似语句(请参考dso-nginx-tests目录下面的测试用例):

$t->set_dso("ngx_http_example_module", "ngx_http_example_module.so");
...
%%TEST_GLOBALS%%
%%TEST_GLOBALS_DSO%%

如何使用test-nginx

test-nginx测试集的代码位于tengine/tests/test-nginx里面,其中test-nginx目录是测试库的位置,cases目录是Tengine测试集的位置。

test-nginx的cases目录比较多,可以把cases目录软连接到test-nginx进行测试:

ln -s tengine/tests/test-nginx/cases tengine/tests/test-nginx/test-nginx/cases

然后,在test-nginx目录下面,就可以跑测试集了:

PATH=/path/to/nginx/sbin:$PATH prove cases/footer.t
PATH=/path/to/nginx/sbin:$PATH prove cases/syslog.t
PATH=/path/to/nginx/sbin:$PATH prove cases/user_agent.t

upstream check模块的测试集需要在测试之前sleep几秒中,以便该模块获取后端的健康状况(TEST_NGINX_SLEEP_BEFORE是Tengine开发组加上的参数):

TEST_NGINX_SLEEP_BEFORE=6 TEST_NGINX_USE_HUP=1 PATH=/path/to/nginx/sbin:$PATH prove -r cases/ngx_http_upstream_check_module

lua模块的测试集依赖比较多,可以参考这里的文档:http://wiki.nginx.org/HttpLuaModule#Test_Suite

PATH=/path/to/nginx/sbin:$PATH prove -r cases/lua-tests/

如何测试DSO模块

test-nginx可以支持在测试脚本里面编译动态模块,然后进行加载使用,所以你需要指定模块的源代码目录,可以通过 TEST_NGINX_DSO_PATH这个变量来指定,它也是test-nginx测试库开关DSO测试的变量。比如:

TEST_NGINX_DSO_PATH=/path/to/dso/module/source/ TEST_NGINX_BINARY=/path/to/nginx/sbin/nginx prove -r dso_cases/footer.t
TEST_NGINX_DSO_PATH=/path/to/dso/module/source/ TEST_NGINX_BINARY=/path/to/nginx/sbin/nginx prove -r dso_cases/syslog.t
TEST_NGINX_DSO_PATH=/path/to/dso/module/source/ TEST_NGINX_BINARY=/path/to/nginx/sbin/nginx prove -r dso_cases/user_agent.t
TEST_NGINX_DSO_PATH=/path/to/dso/module/source/ TEST_NGINX_BINARY=/path/to/nginx/sbin/nginx TEST_NGINX_SLEEP_BEFORE=6 TEST_NGINX_USE_HUP=1 prove -r cases/ngx_http_upstream_check_module
Clone this wiki locally