用ab的post方式进行测试
一、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下。
三、通过面的例子可以看到这种方法是存在缺陷的,就是test.txt的内容是写死的,如果实际测试需要post不同的数据(比如不同的midn)怎么做?有两个方法:
1、通过另外的脚本或者程序在测试前修改这个文档
2、换loadrunner。。。
ab的应用
ab的命令参数比较多,我们经常使用的是-c和-n参数。
ab -c 10 -n 100 http://www.myvick.cn/index.php :同时处理100个请求并运行10次index.php
-c10表示并发用户数为10
-n100表示请求总数为100
[root@vic html]# ab -c 10 -n 100 http://www.myvick.cn/index.php This is ApacheBench, Version 2.3 <$Revision: 655654 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www.myvick.cn (be patient).....done Server Software: nginx/1.13.6 #测试服务器的名字 Server Hostname: www.myvick.cn #请求的URL主机名 Server Port: 80 #web服务器监听的端口 Document Path: /index.php #请求的URL中的根绝对路径,通过该文件的后缀名,我们一般可以了解该请求的类型 Document Length: 799 bytes #HTTP响应数据的正文长度 Concurrency Level: 10 # 并发用户数,这是我们设置的参数之一 Time taken for tests: 0.668 seconds #所有这些请求被处理完成所花费的总时间 单位秒 Complete requests: 100 # 总请求数量,这是我们设置的参数之一 Failed requests: 0 # 表示失败的请求数量,这里的失败是指请求在连接服务器、发送数据等环节发生异常,以及无响应后超时的情况 Write errors: 0 Total transferred: 96200 bytes #所有请求的响应数据长度总和。包括每个HTTP响应数据的头信息和正文数据的长度 HTML transferred: 79900 bytes # 所有请求的响应数据中正文数据的总和,也就是减去了Total transferred中HTTP响应数据中的头信息的长度 Requests per second: 149.71 [#/sec] (mean) #吞吐率,计算公式:Complete requests/Time taken for tests 总请求数/处理完成这些请求数所花费的时间 Time per request: 66.797 [ms] (mean) # 用户平均请求等待时间,计算公式:Time token for tests/(Complete requests/Concurrency Level)。处理完成所有请求数所花费的时间/(总请求数/并发用户数) Time per request: 6.680 [ms] (mean, across all concurrent requests) #服务器平均请求等待时间,计算公式:Time taken for tests/Complete requests,正好是吞吐率的倒数。也可以这么统计:Time per request/Concurrency Level Transfer rate: 140.64 [Kbytes/sec] received #表示这些请求在单位时间内从服务器获取的数据长度,计算公式:Total trnasferred/ Time taken for tests,这个统计很好的说明服务器的处理能力达到极限时,其出口宽带的需求量。 Connection Times (ms) min mean[+/-sd] median max Connect: 1 2 0.7 2 5 Processing: 2 26 81.3 3 615 Waiting: 1 26 81.3 3 615 Total: 3 28 81.3 6 618 Percentage of the requests served within a certain time (ms) 50% 6 66% 6 75% 7 80% 7 90% 10 95% 209 98% 209 99% 618 100% 618 (longest request)
#Percentage of requests served within a certain time(ms)这部分数据用于描述每个请求处理时间的分布情况,比如以上测试,80%的请求处理时间都不超过7ms,这个处理时间是指前面的Time per request,即对于单个用户而言,平均每个请求的处理时间
ab带session的请求测试
如 ab -c 10 -n 100 -C JSESSIONID=A0ECB52A493B7287C767F0C9FE46F270 http://47.107.159.29/iqc-pc/task/listTaskRecordVO?current=1&size=20&taskName=&taskType=&voiceSource=