作为程序员,写好一个模块后,不知道这个模块在高并发的情况下能不能平稳过渡,这里所说的平稳过渡是指,在高并发的情况下还能正常访问并处理相关数据库服务请求并返回数据。APACHE自带的测试工具AB(apache benchmark),能帮我来测试我的模块能否胜任高并发(不要也要看数据库服务器和应用服务器的性能)。
AB在APACHE的bin目录下,以命令行的方式执行:
格式: ./ab [options] [http://]hostname[:port]/path
参数说明:
-n requests //在测试会话中所执行的请求个数。默认时,仅执行一个请求
-c concurrency //一次产生的请求个数。默认是一次一个
t timelimit //测试所进行的最大秒数
其他的参数看中就用。
参数很多,一般我们用 -c 和 -n 参数就可以了. 例如:
./ab -c 1000 -n 1000 http://127.0.0.1/index.jsp
这个表示同时处理1000个请求并运行1000次index.jsp文件.
其返回的结果集是有很多内容,我们选择关键的几个看看就大概知道我们的模块性能了
我比较关心的几个结果:
Concurrency Level: 1000
Time taken for tests: 1.190 seconds //处理1000个并发请求总共花了1.19秒
Complete requests: 1000 //完成处理的请求量
Failed requests: 0 //请求失败数
Write errors: 0
Non-2xx responses: 1000
Total transferred: 164000 bytes //总共传输了多少流量
HTML transferred: 0 bytes
Requests per second: 840.58 [#/sec] (mean) //平均一个请求花840.58毫秒 大家最关心的指标之一,相当于 LR 中的每秒事务数,后面括号中的 mean 表示这是一个平均值
Time per request: 1189.651 [ms] (mean) //大家最关心的指标之二,相当于 LR 中的平均事务响应时间,后面括号中的 mean 表示这是一个平均值
Time per request: 1.190 [ms] (mean, across all concurrent requests) //每个请求实际运行时间的平均值 ms是毫秒
Transfer rate: 134.62 [Kbytes/sec] received //传输速率 可以帮助排除是否存在网络流量过大导致响应时间延长的问题
一、Ab是常用的性能测试工具,因为它支持windows……
通常使用的命令是ab –c –n –k -r,分别表示:模拟终端数、发送包数、请求是否带keepalive、忽略错误,默认都是以GET方式去请求的,也就是下面这种请求就可以用它测试:
这里不再说了。
二、本次主要说测试post方式的请求,也就是浏览器抓包看到的下面这种:
需要加上两个参数-p和-T,先说-T是指请求的内容类型,比如上图的'application/x-www-form-urlencoded'就写-T "application/x-www-form-urlencoded",-p后面跟的是要post的内容,以文本方式记录即可,以我这次测试的例子为例:
-T参数就要写成-T "multipart/form-data; boundary=----------------------------350e95503198",但事实上boundary的内容是可以自己定义的,只要是给服务端识别出内容在哪里而已
比如我测试时就是写-T "multipart/form-data; boundary=---1234ceshi"。
-p参数跟的是内容,只要把上图抓包结果保存为txt即可,比如test.txt,但是注意如果你修改了boundary,那么这里记得也要修改,如
-----1234abcd
Content-Disposition: form-data; name="midn"
7213c8d95ccc968d28d2d48b0c59a63e
-----1234abcd—
注意最后那两个破折号不能省略哦。
那文中例子的测试命令行就是:ab -n 1 -p test.txt -T "multipart/form-data; boundary=---1234abcd" http://172.22.31.45:8080/check_client_need_query.html 如果出现“ab: Could not stat POST data file : Partial results are valid but processing is incomplete”这是因为ab对post支持不好,尤其是在windows下。
如果数据类型是josn的时候,-T 后面的参数就是application/json, 对应文件里面的内容格式就需要json格式的数据例如:{"itemCode":"t123456"},
三、通过面的例子可以看到这种方法是存在缺陷的,就是c.txt的内容是写死的,如果实际测试需要post不同的数据(比如不同的mid)怎么做?有两个方法:
1、通过另外的脚本或者程序在测试前修改这个文档
2、换loadrunner。。。