一, 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
- [[email protected] 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=
来源: http://www.bubuko.com/infodetail-3489206.html