Nginx 单元测试自动化浅析之一-Test::Nginx源码分析和使用

  http://www.taobaotest.com/blogs/2433html

主题 Nginx 源码分析 单元测试java

Nginx 单元测试自动化浅析之一 -Test::Nginx 源码分析和使用 linux

Test::Nginx 是用来进行 Nginx 测试的一个 perl 语言的框架。该框架提供动态编写、更改 nginx 配置文件的功能,提供 Nginx 服务器启动关闭的功能以及提供 http 请求等功能。接下来经过分析源码来介绍该测试框架的使用。nginx

 

源码分析服务器

         接下来介绍 Test::Nginx 测试框架中经常使用的功能的实现,主要包括构造函数, Nginx 配置文件的加载,服务器的启动,服务的获取,以及服务器的关闭的实现。数据结构

 

构造函数:框架

使用 Test::Nginx 模块应该先调用其构造函数,在 perl 中的构造函数是调用的是 new() 方法。构造函数完成了测试须要的临时文件夹的创建,构造函数源码以下:函数

 

      

其中 $self->{_testdir} 实例化 hash 变量,并在 /tmp/ 文件夹下建立名为 nginx-test-XXXXXXXXXX 的文件夹, XXXXXXXXXX 表示这些位的文件夹名称为随机生成。理论每次实例化对象时建立的文件夹名称都不同。源码分析

经过在测试用例中用 Test::Nginx->new() 来获取 Test::Nginx 的实例。单元测试

 

Nginx 配置文件加载:

Nginx 测试的配置文件是 write_file_expand() 函数传入的。该函数要求传入两个参数,第一个参数是配置文件的名称,第二个参数传入的是配置的内容。配置的内容能够是以文件读取为字符串的方式进行传入,还能够经过 write_file_expand('nginx.conf', <<'EOF') 。第二种传参方式函数后面, 'EOF' 标志以前的全部字符在输入字符将做为该函数的第二个字符串,即配置参数被传入到写入到配置中。

  

实现方式为 write_file_expand() 先将传入的配置文件随机生成的测试的根路径的临时文件夹,在该路径下建立 Nginx.conf 文件,其中 $self->write_file($name, $content) 方法的写文件是经过覆盖写的方式进行的。

 

Nginx 测试对象的启动:

Nginx 测试对象的启动是经过调用 run() 函数进行的启动的。 run() 函数能提供 0 个或者一个函数的传参。 run() 函数经过建立一个子线程来对 nginx 进行启动。父线程等待直到子线程启动完毕再设置 $self->{_started} 来保证 nginx 服务器的启动。 $self->{_started} 设置为 1 表明该测试服务器已经启动,源码以下。

 

  

测试服务器服务的获取:

服务器的获取是经过 Test::Nginx 向外曝露的接口 http_get() 获取的。该方法 http_get() 相似于 java 中的静态方法,不须要实例化 Test::Nginx 的实例就能提供调用。该方法提供一个变量或者一个 hash 数据结构的传参,该方法是调用 http() 方法进行实现的。源码以下图。

 

 

         http() 函数调用了 IO::Socket::INET 模块,设定请求协议为 TCP 协议,请求地址为测试框架的本地地址。该函数能经过 hash 的方式设置请求超时时间,该请求默认是用 get 的方式。经过 $s->getline() 方式读取服务的返回值,该返回值包括响应 head 和 body ,并返回给用户。

 

 

 

 

服务器的关闭:

测试服务器的关闭是经过 stop() 函数来实现的,该函数终止 run() 启动的全部线程。并将 $self->{_started} 设置为 0 ,退出该服务。

 

  

 

简单的使用说明:

下列代码功能是配置 Nginx 的启动配置,进行 Nginx 服务器的启动,制定测试用例计划,启动后验证提供的服务的正确性,关闭服务器。初略的解释为代码的 12 行声明使用 Test::Nginx 模块, 18 行经过一个自定义的读取文件的方法,将配置文件值存储于在变量 $conf 中。 20 行经过 write_file_expand() 函数将该 nginx 配置文件存在零时文件夹的一级目录下。 25 行经过 http_get() 方法获取服务器的服务。 30 行关闭服务器。

  

 

 

Perl 语法文档连接

http://perldoc.perl.org/index-tutorials.html

http://jianlee.ylinux.org/Computer/Perl/perl_base.html

相关文章
相关标签/搜索