aaashun's site

home

how to test openresty

09 May 2014

5月份的时候为openresty/lua-nginx-module实现全双工cosocket时写测试用例, 翻了半天资料才写完测试用例, 这篇文章其实是当时的一个笔记, 后边的几个参考文章比正文更值得看.

本文假设你学习过perl编程, 且了解perl的测试框架Test::Simple, Test::More, Test::Class等, 亦可根据结尾的参考文章快速入门.

在开发openresty/nginx模块时, 需要针对具体某一特性做单元测试, Test::Nginx就是为满足这一需求而诞生的一个测试框架(春哥出品). 目前很多nginx模块都是用Test::Nginx做的单元测试, 例如ngx_lua, ngx_echo等 如下是简单的入门使用教程.

1. 安装Test::Nginx模块


先检查是否已安装Test::Nginx模块, 若已安装则跳过这一步

perl -e 'use Test::Nginx'

安装perl的模块管理程序CPAN, 类似apt, yum

sudo yum install perl-CPAN
sudo cpan> o conf init

安装YAML(若已安装则跳过)

sudo cpan> install YAML

安装Text::Nginx模块

sudo cpan> install Test::Nginx

2. 第一个测试用例


保存如下测试代码到文件t/foo.t

use Test::Nginx::Socket;

repeat_each(1);
plan tests => 2 * repeat_each() * blocks();

$ENV{PATH} .= ":/usr/local/openresty/nginx/sbin";  # make sure 'nginx' is in $PATH

run_tests();

__DATA__

=== TEST 1: sanity
--- config
location /foo {
    content_by_lua 'ngx.print("hello, world");';
}
--- request
GET /foo HTTP/1.0
--- response_body_like: ^hello, world$
--- error_code: 200

执行单个测试用例

perl t/foo.t

测试通过返回

1..2
ok 1 - TEST 1: sanity - status code ok
ok 2 - TEST 1: sanity - response_body_like - response is expected (hello, world)


参考:

comments powered by Disqus