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

Vicki ·
更新时间:2024-09-21
· 776 次阅读

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

  源码分析

  接下来介绍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



自动 自动化 测试自动化 单元 单元测试 测试 Nginx

需要 登录 后方可回复, 如果你还没有账号请 注册新账号