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

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

大家好,又见面了,我是全栈君。

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

主题 Nginx 源码分析 单元测试

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

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

 

源码分析

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

 

构造函数:

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

 

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

其中 $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’ 标志之前的所有字符在输入字符将作为该函数的第二个字符串,即配置参数被传入到写入到配置中。

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

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

 

Nginx 测试对象的启动:

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

 

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

测试服务器服务的获取:

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

 

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

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

 

 

 

 

服务器的关闭:

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

 

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

 

简单的使用说明:

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

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

 

 

Perl 语法文档链接

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

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

转载于:https://my.oschina.net/QAAQ/blog/799792

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/108744.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • goland激活码2021【2021.10最新】

    (goland激活码2021)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html6EK6WKOHUX-eyJsaWN…

    2022年3月28日
    47
  • 简单网络管理协议SNMP(史上最全)

    简单网络管理协议SNMP(史上最全)简单网络管理协议(SNMP)是TCP/IP协议簇的一个应用层协议。在1988年被制定,并被Internet体系结构委员会(IAB)采纳作为一个短期的网络管理解决方案;由于SNMP的简单性,在Internet时代得到了蓬勃的发展,1992年发布了SNMPv2版本,以增强SNMPv1的安全性和功能。现在,已经有了SNMPv3版本。SNMP版本…

    2022年10月17日
    3
  • es数据库查询API「建议收藏」

    es数据库查询API「建议收藏」1.背景ES数据库是非关系型数据库2.ES数据库优点1.存储优化内存中使用有限状态机FST优化本质上是前缀树加上后缀树的结合,利用这个数据结构可以把Term更节省内存地放置并查询,它有着字典树的查询时间复杂度,但是由于做了后缀合并会更节约内存传统Bitmap优化使用Bitmap来记录文档的Id,每个bit对应一个文档,表示它是否存在。2.联合查询优化若要对多个t…

    2022年5月24日
    274
  • 光棍节程序员闯关秀第1关(总共10关)

    光棍节程序员闯关秀第1关(总共10关)[我的博客](http://antiless.com/) 无意中看到http://segmentfault.com/game/,感觉挺有意思,记录一下闯关历程 第一关 提示: 从所有信息中找到进入下一关的方法 这一关很简单,即使没有任何web知识也能轻松通过。只要你懂得晃鼠标~~查看源代码会发现有这么一行:&lt;p&gt;&lt;astyle="color…

    2022年7月17日
    23
  • Python详细知识体系总结(2021版)「建议收藏」

    Python知识体系总结(持续更新ing)本文专注整理一些有关Python学习的知识体系,不定期更新。整理的Python知识体系主要包括基础知识,Python热门的应用方向,推荐书籍,FAQ以及一些常见面试题目,包含了作为一个Python全栈工程师以及数据分析工程师在开发工作和学习中需要用到或者可能用到的绝大部分知识。希望大家可以根据自己感兴趣的方面多多学习。另:写的博客如有错误或者疏忽的地方,还望各位大佬指点,在此表示感激不尽。文章目录Python知识体系总结(持续更新ing)面试题汇总Pyth

    2022年4月7日
    88
  • 射灯怎么安装图解_牛眼灯安装图解法

    射灯怎么安装图解_牛眼灯安装图解法炫派照明多光色晶元芯片LED轨道灯,静音风扇智能散热,风神Ⅱ导轨射灯智能散热导轨射灯风神Ⅱ灯体支架高碳钢材质,连接牢固不易滑落,360度旋转顺畅,全方位调节照射角度,感受无死角的光线触感。与灯体主色彩射灯安装图示融为一体,统一的美感低调的华贵,烤漆漆皮带来舒适光滑的质感,使整个射灯看起来精致完美。雷士照明LED家居客厅轨道射灯,电视背景照明灯,TLN204黑白双色家居黑白轨道射灯雷士照明轨道射灯椭…

    2025年8月14日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号