Web压测工具http_load原理分析

这篇具有很好参考价值的文章主要介绍了Web压测工具http_load原理分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

01、前言

http_load是一款测试web服务器性能的开源工具,从下面的网址可以下载到最新版本的http_load:

http://www.acme.com/software/http_load/

这个软件一直在保持着更新(不像webbench,已经是十年的老古董了。

webbench的源码分析请参考:http://www.cnblogs.com/xuning/p/3888699.html ),并且更新频率还蛮高的样子。好在每个版本之间差别非常小,本文还是具有较好的通用性的。

02、使用方法

下载并解压缩之后,进入工具的根目录直接make,就可以得到可执行的工具。

其使用方法如下图所示:
Web压测工具http_load原理分析,http,网络协议,网络,程序人生,软件测试,自动化测试,python

图中所示的url.txt内容是若干url链接,每行一个,详细说明一下使用格式:

./http_load [-checksum] [-throttle] [-proxy host:port] [-verbose] [timeout secs] [-sip sip_file]

         -parallel N | -rate N [-jitter]

         -fetches N | -seconds N

 url_file

选项与参数:

-fetches:

总计要访问url的次数,无论成功失败都记为一次,到达数量后程序退出。

-rate:

每秒访问的次数(即访问频率),控制性能测试的速度。

-seconds:

工具运行的时间,到达seconds设置的时间后程序退出。

-parallel:

最大并发访问的数目,控制性能测试的速度。

-verbose:

使用该选项后,每60秒会在屏幕上打印一次当前测试的进度信息。

-jitter:

该选项必须与-rate同时使用,表示实际的访问频率会在rate设置的值上下随机波动10%的幅度。

-checksum:

由于要访问某个url很多次,为了保证每次访问时收到的服务器回包内容都一样,可以采用checksum检查,不一致会在屏幕上输出错误信息。

-cipher:

使用SSL层的时候会用到此参数(url是https开头),使用特定的密码集。

-timeout:

设置超时时间,以秒为单位,默认为60秒。每超过一次则记为一次超时的连接

-proxy:

设置web代理,格式为-proxy host:port

-throttle:

限流模式,限制每秒收到的数据量,单位bytes/sec。该模式下默认限制为3360bytes/sec。

-sip:

指定一个source ip文件,该文件每一行都是ip+port的形式。

需要特别说明的是:

-parallel参数 和 -rate参数 中必须有一个,用于指定发请求包的方式;

-fetches 和 -seconds两个参数必须有一个,用于指定程序的终止条件。

03、与webbench的对比

webbench是另外一款网页性能测试工具,它采用多进程发包,最多支持3万并发量,而http_load采用单一进程并行复用方式发包。

由于只有一个进程,http_load对于机器资源消耗较小,性能要求不高,但它的劣势就是最大并发量比webbench要少许多,只能达到千的量级。在很多场景中,几千的量级也已经绰绰有余了,因此具体工具的选用还要看实际情况。

我们分别使用webbench和http_load对同一个URL进行压力访问,结果如下。

[horstxu@vps ~/webbench-1.5]$ ./webbench -t 30 -c 1000 http://127.0.0.1:8080/user.png



Webbench - Simple Web Benchmark 1.5



Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.



Benchmarking:GET http://127.0.0.1:8080/user.png



1000 clients, running 30 sec.



Speed=180340 pages/min, 5268934 bytes/sec.Requests: 90170 susceed, 0 failed.



[horstxu@vps ~/http_load-02aug2014]$ ./http_load -parallel 1000 -fetches 90000 url.txt    



90000 fetches, 830 max parallel, 1.2933e+08 bytes, in 30.5439 seconds



1437 mean bytes/connection



2946.58 fetches/sec, 4.23424e+06 bytes/sec



msecs/connect:0.772754 mean, 215 max, 0.025 min



msecs/first-response: 17.2259 mean, 288.007 max, 1.735 min



HTTP response codes:  



     code 200 – 90000

如果进行一下换算,webbench测得的页面RPS为180340 pages/min = 3006rps,这与http_load的测试结果2946fetches/sec结果是很接近的,并且,http_load统计数据更加全面,数据校验也更加完善。对于每秒流量数据,webbench的结果是5268934bytes/sec,http_load是4234240bytes/sec。

这其中的差别在于,http_load在统计时剔除了http报文的头部(head),而webbench是没有剔除头部的。接下来我们来领略一下http_load的实现原理。

04、工作流程

程序的工作流程可以用下面这幅图来表示,执行时程序主要环节位于流程图中的循环内。

http_load为单一进程的程序,因此进程内的所有调用都是非阻塞方式进行, 保证程序的流畅度。

程序的执行过程主体在一个大循环当中,不间断进行结束条件的判定和超时判定。

时间管理方式是使用拉链式哈希表,超时情况下即运行超时处理函数。
Web压测工具http_load原理分析,http,网络协议,网络,程序人生,软件测试,自动化测试,python

05、原理分析

1、程序执行过程解析

如果使用简化的代码来描述上一节所述的流程图,可以参考下图。流程图中的循环也就是主函数中的for循环。

在主循环内主要做4件事情:

首先,检测当前程序是否满足终止条件,如果满足,则调用结束函数退出程序,否则进行下一步。

然后,采用select监听描述符状态,一旦出现可读或可写状态的描述符,则采用handle_connect与handle_read两函数分别进行处理。

需要提醒的是

源程序在处理读取socket缓冲区这一段为了完美剔除掉http请求报文的头部,耗费了大量的代码。

再然后,循环尾部执行超时检测,检查当前时间有没有超过在哈希表中注册的每一个时间戳,如果超过,则要执行其对应的超时处理函数。

源码中共有5种时间戳需要注册,分别对应着5个超时处理函数,请参考图中的超时处理函数集合。
Web压测工具http_load原理分析,http,网络协议,网络,程序人生,软件测试,自动化测试,python

2、三个重要的结构体

下图中详细描述了三个源码中最为重要的结构体。

首先,程序采用全局变量connections数组控制每一个TCP连接,connections数组中每个元素都是一个指向connection结构体的指针。connection结构体包含了用于记录测试数据的变量,连接状态的控制变量,以及最开始从文件中读取的连接配置信息。

第二个结构体为url结构体,在http_load当中,想要请求的url存储在文件内,可以大于一个。

这些URL的信息会被读取至由指向url结构体的指针组成的urls数组。请求会随机发向这些数组。相比webbench,http_load的一个优势是它的数据校验环节。每一个url会配有返回请求的checksum值,用于校验每次请求同一个url返回的内容是否一致。

第三个结构体是时间管理方法中组成拉链式哈希表的每一个节点。它包含了指向超时处理函数的指针,以及记录超时时间的变量。
Web压测工具http_load原理分析,http,网络协议,网络,程序人生,软件测试,自动化测试,python

3、时间戳管理方法

http_load中最为巧妙的就是它的时间管理方法。在该工具中,有很多需要定时触发的地方,比如每隔一段时间输出一份测试进度汇报;链接超过一定时间未响应则记为超时,输出超时错误信息;设定发送频率,每隔一段时间发出一个请求等等。这些时间戳和其超时触发的函数以Timer结构体的形式,全部注册于拉链法构成的哈希表中。每个链表都是以时间戳顺序从早到晚依次排列。

这样,在每一个for循环执行超时检测的部分,我们可以很方便地判断出当前时间是否已经超过了时间戳的时间,如果超过,则执行超时处理函数。同时,这样的数据结构也提高了插入新时间戳的效率。
Web压测工具http_load原理分析,http,网络协议,网络,程序人生,软件测试,自动化测试,python

06、结语

http_load与webbench都是很常用的压测工具,如果配合使用,结果做对比,既是对测得结果的校验,也能帮助熟悉两种工具的优劣。http_load的设计思路也可以使用到业务测试工具中来,帮助开发出更高效的压测工具。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:


          【下面是我整理的2023年最全的软件测试工程师学习知识架构体系图】


一、Python编程入门到精通

二、接口自动化项目实战  

Web压测工具http_load原理分析,http,网络协议,网络,程序人生,软件测试,自动化测试,python

三、Web自动化项目实战

四、App自动化项目实战 

Web压测工具http_load原理分析,http,网络协议,网络,程序人生,软件测试,自动化测试,python

五、一线大厂简历

六、测试开发DevOps体系 

Web压测工具http_load原理分析,http,网络协议,网络,程序人生,软件测试,自动化测试,python

七、常用自动化测试工具

八、JMeter性能测试 

Web压测工具http_load原理分析,http,网络协议,网络,程序人生,软件测试,自动化测试,python

九、总结(尾部小惊喜)

生命不息,奋斗不止。每一份努力都不会被辜负,只要坚持不懈,终究会有回报。珍惜时间,追求梦想。不忘初心,砥砺前行。你的未来,由你掌握!

生命短暂,时间宝贵,我们无法预知未来会发生什么,但我们可以掌握当下。珍惜每一天,努力奋斗,让自己变得更加强大和优秀。坚定信念,执着追求,成功终将属于你!

只有不断地挑战自己,才能不断地超越自己。坚持追求梦想,勇敢前行,你就会发现奋斗的过程是如此美好而值得。相信自己,你一定可以做到!  文章来源地址https://www.toymoban.com/news/detail-694120.html

到了这里,关于Web压测工具http_load原理分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • WEB服务器配置与HTTP分析

    目录 实验目的: 实验要求: 实验原理: 实验步骤: 步骤1:创建拓扑 步骤2:为PC、Client和Server配置IPv4地址、子网掩码和域名服务器 步骤3:启动设备和服务器 步骤4:测试PC-1、Client-1和Server-1之间的通信 步骤5:在Server-1上配置并启动DNS服务器  步骤6:在Server-1上配置并启动

    2024年01月17日
    浏览(54)
  • 网络原理 - HTTP / HTTPS(1)——http请求

    目录 一、认识HTTP协议 理解 应用层协议 二、fiddler的安装以及介绍 1、fiddler的安装 2、fiddler的介绍 http请求 三、HTTP 报文格式 1、http的请求 2、http的响应 五、认识URL (1)协议方案名 (2)登录信息(认证) (3)服务器地址 (4)服务器的端口号 (5)带层次的文件路径 (6)

    2024年04月16日
    浏览(84)
  • Web架构安全分析/http/URL/Cookie攻击

    传统 Web 架构 LAMP 网页 概念 网页就是我们可以通过浏览器上网看到的精美页面,一般都是经过浏览器渲染过的 .html 页面,html 语言在浏览器中渲染。其中包含了CSS、JavaScript 等前端技术。通过浏览器访问的 Web 页面大部分都是 HTML 页面。 静态网页 静态的网页,都是一些 .htm

    2024年02月05日
    浏览(34)
  • 网络原理 - HTTP / HTTPS(4)——构造http请求

    目录 一、postman 的下载安装以及简单介绍 1、下载安装 2、postman的介绍 二、通过 Java socket 构造 HTTP 请求         构造http请求的方式有两种: (1)通过代码构造 (有一点难度)        (2)通过第三方工具构造 (非常容易)。         下面介绍第三方工具构造http请求,这

    2024年04月17日
    浏览(43)
  • 网络爬虫之HTTP原理

    ** URI的全称Uniform Resource Identifier ,即 统一资源标志符 。URL的全称Uniform Resource Locator 即 统一资源定位符 。 URL是URI的子集,也就是每一个URL就是URI,但是每一个URI不一定是URL,URI还有一个子类叫URN,它的全称Universal Resource Name- 统一资源名称 ,URN只命名资源而不指定资源位置

    2024年04月26日
    浏览(41)
  • [网络原理] HTTP协议

    要珍惜时间呀 HTTP协议是应用层协议,TCP/IP协议为传输层协议,负责传输数据.而HTTP协议相当于对传输的数据据怎样处理和使用进行说明. 每次,我们访问网站的时候,都会给网站的服务器发送一个HTTP请求,服务器收到请求后,会返回一个HTTP响应.如下图所示. 下图,为一个HTTP请求的格式

    2024年02月03日
    浏览(41)
  • 【JavaEE】网络原理-HTTP

    HTTP是一种 基于传输层TCP并位于应用层的超文本协议 目前主要使用HTTP1.1和HTTP2.0 2.1 使用Fiddler抓包进行分析 关于Fiddler: 是一个代理工具,就像高速路上的收费站,不管什么车,只要它从高速路上经过,那么就需要经过收费站 对应到网站上,就是不管什么网站,只要有数据的

    2024年03月21日
    浏览(60)
  • 网络原理(HTTP篇)

    如图: HTTP/3.0之前 是基于TCP实现的 。到了HTTP3.0版本,则是基于UDP实现的 HTTP,全称为 “ 超文本传输协议 ”,现在最新版本为 HTTP/3.0,但 主流 使用的仍然是 HTTP/1.1 版本。 什么叫超文本? 我们知道,文本文件其实就是字符串文件(即能在 UTF8/GBK 等码表上找到合法字符的字

    2024年02月19日
    浏览(26)
  • 网络原理--http

    目录 一、   DNS(应用层协议) 1、域名概念 2、维护ip地址和域名之间的映射(域名解析系统) 3、DNS系统(服务器) 4、如何解决DNS服务器高并发问题 二、HTTP(应用层协议) 1、http协议使用场景 2、抓包工具获取http格式 3、http中请求格式 (1)首行 (2)请求头(header) (

    2024年01月16日
    浏览(26)
  • 网络原理 - HTTP/HTTPS(4)

    状态码表示访问一个页面的结果 .(是访问成功,还是失败,还是其它的一些情况...).( 响应结果如何 ) 学习状态码 - 为了调试问题. 写服务器时,按照状态码的含义正确使用. 200 OK 这是最常见的状态码,表示访问成功 . 抓包抓到的大部分结果都是200. 例如访问搜狗主页. HTTP/1.1 200 OK

    2024年02月22日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包