mooon http-stress使用教程

简介:

1. http-stress是什么?

http-stress 是一个和 ab Apache Benchmark )类似的 HTTP 压力测试工具,是作为 dispatcher http_parser 等测试用的附属应用,具备如下特性:
1) 多线程
2) 同时支持 IPV4 IPV6
3) 模拟多用户并发测试
4) 可以配置多个不同或相同的 URLs
5) 可以同时对同一个域名的不同 IP 进行测试
6) 每秒定时输出测试进度:成功和失败个数
7) 长连接和短连接测试
8) 暂只支持 GET 方法测试
 

2. 测试结果样本

[2010-10-15 21:11:29][0xf35bc6f0][STATE]time: 52 seconds
[2010-10-15 21:11:29][0xf35bc6f0][STATE]total number: 100000
[2010-10-15 21:11:29][0xf35bc6f0][STATE]failure number: 0
[2010-10-15 21:11:29][0xf35bc6f0][STATE]success number: 98040
[2010-10-15 21:11:29][0xf35bc6f0][STATE]percent number: 1923
[2010-10-15 21:11:29][0xf35bc6f0][STATE]bytes sent: 8600000
[2010-10-15 21:11:29][0xf35bc6f0][STATE]bytes received: 32894278
以上信息分别为:
耗时(暂只精确到秒,因此建议请求数不要地少)
总请求个数(每个用户的请求数  用户数)
成功请求个数
失败请求个数
发送出去的字节数
接收到的字节数

3. 配置文件

需要配置两个文件,分别为 tress.xml route.table tress.xml 用来配置测试参数, route.table dispatcher 模块需要的路由表。
 

3.1. route.table

指定消息应当发往哪,为文本文件,由两部分组成:首行必须为路由项个数,其余行的格式必须满足:路由 ID\t 目标 IP\t 目标端口,其中 IP 可以为 IPV4 IPV6 或者域名,路由 ID 不可以重复,其它可以重复。
另外,建议尽量避免配置域名,因为域名解析的系统调用是阻塞的,会影响测试的真实性,如果实在需要使用域名,建议在 /etc/hosts 中配置和 IP 的映射关系。
route.table 文件示例,注意是以分隔:
10
1       127.0.0.1       9999
2       127.0.0.1       9999
3       127.0.0.1       9999
4       127.0.0.1       9999
5       127.0.0.1       9999
6       127.0.0.1       9999
7       127.0.0.1       9999
8       127.0.0.1       9999
9       127.0.0.1       9999
10      127.0.0.1       9999
route.table 中的每一行路由项,代表一个用户,所以用户数需要通过它来配置,而不能通过 tress.xml 配置。
路由 ID 取值范围为从 0 65535 ,可以不连续。
mk_table.sh 脚本可以用来自动生成 route.table ,运行参数为:
并发数 目标 IP   目标端口
如: sh mk_table.sh 10 127.0.0.1 9999

3.2. tress.xml

定义各测试参数,示例如下:
<?xml version="1.0" encoding="gb2312"?>
<stress>
<log level="state" />
<thread number="1" />
<connect keep_alive="true" />
<request number="1000" domain_name="127.0.0.1" error_number="100" />
<urls>
<url value="/" />
</urls>
</stress>
 
<log level="state" />:日志级别,除调试外,因为设置为 state 级别
<thread number="1" />:线程个数
<connect keep_alive="true" />:是否为长连接
<request number="1000" domain_name="127.0.0.1" error_number="100" />:分别为每个用户发送的请求个数(注意不是总请求个数)、测试的域名、允许的最大出错个数(超出这个数进程将退出)。
urls :需要测试的 url 列表
<url value="/" />:每行一个 URL ,要求以“ / ”打头,可以重复。

4. 测试方法

直接运行 http_stress 即可,不带任何参数,但 http_stress 依赖 libutil.so libsys.so libnet.so libdispatcher.so libhttp_parser.so 这几个库文件,因此运行之前需要先设置好 LD_LIBRARY_PATH 环境变量,如: export  LD_LIBRARY_PATH=$MOOON_HOME/lib

5. 编译步骤

在编译 http-stress 之前,需要依次先编译好基础类库( common-library )和公共组件( common-component )。
请使用 SVN http://mooon.googlecode.com/svn/trunk/ 上下载源代码。

5.1. 编译基础类库

基础类库( common-library )包含 util sys net plugin 等几个库,编译步骤如下:
1) 进入基础类库的 src 目录
2) 运行 first_once.sh 脚本,如: sh first_once.sh (建议这样用,因为从 SVN 取下的 first_once.sh 没有可执行权限,如果不为它增加可执行权限,直接 ./first_once.sh 将报错)。下面的操作遵循 automake
3) 运行 configure ,生成 Makefile ,如: ./configure --prefix=/usr/local/mooon ,其中 --prefix 后面为 mooon 的安装目录,必须指定
4) 编译源文件,运行 make 即可
5) 安装,运行 make install 即可。基础类库( common-library )编译成功后,就可以开始编译公共组件了。

5.2. 编译公共组件

公共组件( common-component )依赖于基础类库( common-library ),在这里只需要编译 dispatcher http-parser 两个公共组件,不要尝试去编译其它组件,因为可能编译通不过。公共组件编译步骤如下:
1) 进入公共组件的 src 目录
2) 运行 first_once.sh 脚本
3) 运行 configure ,注意指定 --prefix 参数为 mooon 安装目录
4) 进入 dispatcher 目录,运行 make 编译源文件
5) dispatcher 编译成功后,运行 make install 安装
6) 进入 http_parser 目录,运行 make 编译源文件
7) http_parser 编译成功后,运行 make install 安装。下面可以开始编译 http-stress 了。

5.3. 编译http-stress

http-stress 隶属 web application ,编译方法相同,分别如下:
1) 进入 web application src 目录
2) 运行 first_once.sh 脚本
3) 运行 configure ,注意指定 --prefix 参数为 mooon 安装目录
4) 进入 http_stress 目录,运行 make 编译源文件
5) http_stress 编译成功后,运行 make install 安装。
 
假设 MOOON_HOME 代表 mooon 的安装目录,则 $MOOON_HOME/lib 库文件存放目录, $MOOON_HOME/bin http_stress 等可执行文件存放目录,如下所示:
mooon/
|-- bin
|   |-- http_stress
|   `-- mk_table.sh
|-- conf
|   |-- route.table
|   `-- stress.xml
|-- include
|   |-- sys
|   |-- net
|   |-- plugin
|   `-- util
|   |-- dispatcher
|   |-- http_parser
|-- lib
|   |-- libdispatcher.so
|   |-- libhttp_parser.so
|   |-- libnet.so
|   |-- libsys.so
|   |-- libutil.so
|   `-- libxtinyxml.so
`-- log
 
请注意,要将 $MOOON_HOME/lib 所在路径加入到 LD_LIBRARY_PATH 中,才可以运行 http_stress ,否则运行时会报 .so 找不到错误。

6. 后序

mooon 中, http-stress 是作为 dispatcher http-parser 的测试工具而诞生的,因而比较粗鲁简单,在易用性和测试输出的数据方面还有很大改进空间,欢迎动手对它进行改进并分享。
如需要任何帮助、或有任何建议、或发现任何问题,请发邮件给 eyjian@qq.com ,谢谢!

附件:http://down.51cto.com/data/2360887



    本文转自eyjian 51CTO博客,原文链接:http://blog.51cto.com/mooon/909763,如需转载请自行联系原作者



相关文章
|
缓存 网络协议 安全
49. 【Android教程】HTTP 使用详解
49. 【Android教程】HTTP 使用详解
302 1
|
XML Java 数据格式
Servlet 教程 之 Servlet 客户端 HTTP 请求 3
该教程展示了如何在Servlet中处理客户端HTTP请求,特别是获取HTTP头信息。示例代码创建了一个名为`DisplayHeader`的Servlet,它扩展了`HttpServlet`并重写了`doGet`方法。在`doGet`中,使用`HttpServletRequest`的`getHeaderNames()`遍历所有头部,显示其名称和对应值。Servlet在TomcatTest项目下,通过`web.xml`配置映射到`/TomcatTest/DisplayHeader`路径。
136 14
Servlet 教程 之 Servlet 服务器 HTTP 响应 2
Servlet教程讲解了如何通过HttpServletResponse设置HTTP响应,包括编码URL、添加cookie、设置报头、控制缓冲区、发送错误或重定向响应。方法如encodeURL、addCookie、sendError、sendRedirect等,涉及状态码、报头、字符编码和内容长度的管理。
131 2
|
JSON 网络协议 安全
《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(1)-HTTP和HTTPS基础知识
【2月更文挑战第3天】《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(1)-HTTP和HTTPS基础知识
231 0
|
安全 Java 网络安全
Servlet 教程 之 Servlet 客户端 HTTP 请求 2
Servlet教程介绍了如何在Servlet中处理HTTP请求,包括获取Cookie、头信息、参数、Session等。方法如:`getCookies()`、`getAttributeNames()`、`getHeaderNames()`、`getParameterNames()`等。还能获取身份验证类型、字符编码、MIME类型、请求方法、远程用户信息、URL路径、安全通道状态以及请求内容长度等。此外,可通过`getSession()`创建或获取Session,并以`Map`形式获取参数。
145 8
|
XML Java 数据格式
Servlet 教程 之 Servlet 服务器 HTTP 响应 3
`Servlet`教程示例展示了如何创建一个HTTP响应,使用`@WebServlet(&quot;/Refresh&quot;)`的`Refresh`类继承`HttpServlet`。在`doGet`方法中,设置了`Refresh`头以每5秒自动刷新,并用`setContentType(&quot;text/html;charset=UTF-8&quot;)`设定内容类型。还使用`Calendar`和`SimpleDateFormat`获取并格式化当前时间显示。相应的`web.xml`配置指定了Servlet路径。当访问此Servlet时,页面将每5秒更新一次显示的系统时间。
110 4
|
数据安全/隐私保护
Servlet 教程 之 Servlet HTTP 状态码 1
Servlet教程讲解了HTTP状态码,如200(成功)、404(未找到)和500(服务器错误)。状态码帮助标识HTTP响应的状态,包括继续请求、重定向、权限问题、方法不允许和服务器故障等不同情况。这些代码是通信中的关键反馈元素。
107 3
|
11月前
|
Java 网络架构 Kotlin
kotlin+springboot入门级别教程,教你如何用kotlin和springboot搭建http
本文是一个入门级教程,介绍了如何使用Kotlin和Spring Boot搭建HTTP服务,并强调了Kotlin的空安全性特性。
293 8
kotlin+springboot入门级别教程,教你如何用kotlin和springboot搭建http
|
JSON 网络协议 安全
《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(1)-HTTP和HTTPS基础知识
【7月更文挑战第16天】本文介绍了HTTP和HTTPS协议的基本概念与作用,强调了理解HTTP协议对使用抓包工具Fiddler的重要性。HTTP是用于Web浏览器与服务器间信息传输的协议,不加密,易被截取,不适合传输敏感信息。HTTPS是HTTP的安全版,通过SSL/TLS提供加密和服务器身份验证,确保数据安全。HTTP请求包括请求行、请求头、空行和可选的请求主体,响应则有响应行、响应头、空行和响应主体。HTTP协议无状态,而HTTPS解决了安全性问题,但也带来了额外的计算开销。Fiddler作为一个强大的抓包工具,可以帮助开发者和测试人员分析HTTP/HTTPS通信,理解请求和响应的结构。
286 4
《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(1)-HTTP和HTTPS基础知识
|
SQL 存储 小程序
【教程】navicat配合HTTP通道远程连接SQLite数据库
本文介绍了如何通过 Navicat Premium 工具配合 n_tunnel_sqlite.php 和 HTTP 通道远程连接服务器上的 SQLite 数据库。SQLite 是一种自给自足的、无服务器的 SQL 数据库引擎,由于其端口未对外开放,直接使用 Navicat 进行远程连接不可行。文章详细记录了使用 HTTP 通道实现远程连接的过程,包括定位本地 `ntunnel_sqlite.php` 文件,将其上传至服务器,并通过 Navicat 配置 HTTP 通道连接 SQLite 数据库的具体步骤。
671 0
【教程】navicat配合HTTP通道远程连接SQLite数据库