Web性能测试篇:AB 压力测试
1. 压力测试的概念\定义
2. AB的起源
AB 全称【ApacheBench】是 Apache 自带的一款功能强大的测试工具,可以快速测试基于 HTTP 协议所有 Web 页面的最大负载压力,扩展性非常强,
下载地址:https://www.apachelounge.com/download/
下载相应系统的zip包,这里我演示的是 https://www.apachelounge.com/download/VC15/binaries/httpd-2.4.33-win64-VC15.zip ApacheBench Ver 2.3
本章教程只授权本作者写在:https://www.cnblogs.com/BenLam/p/9263927.html ,他人盗用必究
3. 运行平台区分(Windows\Linux|Mac)
3.1、Windows 7、8、10运行方式
使用 cmd/Windows PowerShell,进入 Apache 下的 bin 目录,运行 ad 工具
cd ./Apache24/bin/
start ab
shell/Windows PowerShell会打印以下信息,即表明 ab 正常工作
Usage: ab [options] [http://]hostname[:port]/path
Options are:
-n requests Number of requests to perform
-c concurrency Number of multiple requests to make at a time
-t timelimit Seconds to max. to spend on benchmarking
This implies -n 50000
-s timeout Seconds to max. wait for each response
Default is 30 seconds
-b windowsize Size of TCP send/receive buffer, in bytes
-B address Address to bind to when making outgoing connections
-p postfile File containing data to POST. Remember also to set -T
-u putfile File containing data to PUT. Remember also to set -T
-T content-type Content-type header to use for POST/PUT data, eg.
'application/x-www-form-urlencoded'
Default is 'text/plain'
-v verbosity How much troubleshooting info to print
-w Print out results in HTML tables
-i Use HEAD instead of GET
-x attributes String to insert as table attributes
-y attributes String to insert as tr attributes
-z attributes String to insert as td or th attributes
-C attribute Add cookie, eg. 'Apache=1234'. (repeatable)
-H attribute Add Arbitrary header line, eg. 'Accept-Encoding: gzip'
Inserted after all normal header lines. (repeatable)
-A attribute Add Basic WWW Authentication, the attributes
are a colon separated username and password.
-P attribute Add Basic Proxy Authentication, the attributes
are a colon separated username and password.
-X proxy:port Proxyserver and port number to use
-V Print version number and exit
-k Use HTTP KeepAlive feature
-d Do not show percentiles served table.
-S Do not show confidence estimators and warnings.
-q Do not show progress when doing more than 150 requests
-l Accept variable document length (use this for dynamic pages)
-g filename Output collected data to gnuplot format file.
-e filename Output CSV file with percentages served
-r Don't exit on socket receive errors.
-m method Method name
-h Display usage information (this message)
本章教程只授权本作者写在:https://www.cnblogs.com/BenLam/p/9263927.html ,他人盗用必究
3.2、Linux|Mac 运行方式
通过 shell 输入 cd /etc/httpd/bin 路径,运行 ad 工具
cd /etc/httpd/bin
start ab
4. 你的第一个AB GET请求脚本
在 cmd/shell 中输入以下两条命令:
ab -n 10 -c 10 http://127.0.0.1/
# -n 总共10次请求
# -c 是 concurrency ,模拟10个并发用户,即发起10个并发请求 ab -t 10 -c 10 http://127.0.0.1/
# -t 是 timelimit 执行测试的时间,单位是秒
# -c 是 concurrency ,模拟10个并发用户,即发起10个并发请求 #######
# 命令说明:
# 通过 ab 工具模拟用户浏览器行为,Get请求cnblogs网站并返回参数告诉ab你有没有访问我
# ab 的刨坑: 千万别再URL上缺少 http:// ,否者无法发起请求
结果分析:
root~/># ab -t 10 -c 10 http://127.0.0.1/ This is ApacheBench, Version 2.3 <$Revision: 1826891 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://127.0.0.1/
Licensed to The Apache Software Foundation, http://www.apache.org/
#
# ------ 上边的不重要 ------
#
Benchmarking 127.0.0.1 (be patient)
Finished 311 requests
# 一共发了 311 个请求 Server Software:
Server Hostname: 127.0.0.1
Server Port: 80
# 描述你测试 URL 和端口号通常是 80 端口
Document Path: /
Document Length: 147 bytes
# 描述你请求的页面的相关信息,页面大小为 147 字节
#----------
# 从这开始是 ab 的重点
#Concurrency Level: 10
# 并发请求数量为:10
Time taken for tests: 10.179 seconds
# 整个测试耗费 10.179 秒
Complete requests: 311
# 完成请求数有311次
Failed requests: 0
# 失败请求数量
Non-2xx responses: 311
# HTTP Code 不是2xx的
Total transferred: 118907 bytes
# 整个测试场景中产生的网络传输总量
HTML transferred: 45717 bytes
# 整个测试场景中 HTML 内容传输量
Requests per second: 30.55 [#/sec] (mean)
# 每秒的请求平均数,这是重要指标之一
Time per request: 327.299 [ms] (mean)
# 每个请求的平均时间,这是重要指标之一
Time per request: 32.730 [ms] (mean, across all concurrent requests)
# 服务器处理请求的平均时间,这是重要指标之一
Transfer rate: 11.41 [Kbytes/sec] received
# 网络平均转移率 Connection Times (ms)
min mean[+/-sd] median max
Connect: 16 31 10.0 31 94
Processing: 235 284 55.1 265 655
Waiting: 31 189 82.3 203 655
Total: 266 315 58.7 296 686 Percentage of the requests served within a certain time (ms)
50% 296
66% 300
75% 312
80% 312
90% 344
95% 360
98% 577
99% 640
100% 686 (longest request)
本章教程只授权本作者写在:https://www.cnblogs.com/BenLam/p/9263927.html ,他人盗用必究
5. AB发起POST、PUT请求
AB的POST请求需要在当前路径下创建个空的notepad文档,命名为【Postdata.txt】,这里演示模拟login操作
【Postdata.txt】内容如下填写:
user_name=root&password=123
# 说明:
# user_name 是服务器约定好的字段,解释:有个用户叫:root 名
# password 是服务器约定好的字段,解释:有个root的用户密码是:123 # 填写完成后直接保存
ab用到的参数解释(为什么要用这些参数才能完成POST请求)
-p 是参数文档路径<path>
-T 是content-type,解释:这个一般指定POST\PUT请求头,例如:此次我们提交的是表单【application/x-www-form-urlencoded】
post 表单格式为:application/x-www-form-urlencoded 一般用 -p 参数都会带上 -T 指定请求头 组合成命令是: ab -n 1 -c 1 -p /home/postdata.txt -T application/x-www-form-urlencoded "http://127.0.0.1/login" 参数细节:
-p 我放在文件路径是/home/postdata.txt 中
-T 上边我们讲了这次我们做提交表单的操作所以必须是 application/x-www-form-urlencoded ,如果不带这个参数,服务器有可能会拒绝我们的请求
后边就是我们请求的URL了 当我们要修改的时候可以提出下边的参数:
ab -n 1 -c 1 -u /home/postdata.txt -T application/x-www-form-urlencoded "http://127.0.0.1/login" 此时的 -p 就替换成 -u 就可以完成Put 请求了
6. AB附带有趣的参数(AB的细节)
6.1、客户要求,一个页面在 1秒 内完成 10 个用户的 10次 并发请求,也就是说我们的命令是:
ab -n 10 -c 10 <Test URL> # 怎么才能更直观的 1秒 内完成所有请求
# ↓ ↓ ↓ ↓ ↓
# 通过 -s 参数来执行 -s 参数解释:我发起测试请求时计算计算,如果你不写这个参数,请求超时时间是30秒 我们来完成客户要求我们做的测试: command:# ab -n 10 -c 10 -s 0.001 <Test URL>
# 如果在1秒内能通过测试,就返回正常的测试数据
# 如果不能通过测试,会返回下边的提示:
This is ApacheBench, Version 2.3 <$Revision: 1826891 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (be patient)...apr_pollset_poll: The timeout specified has expired (70007)
# 意思是: apr_pollset_poll(指定的超时已过期)
6.2、AB如果输出详细的测试信息:
# ab 输出HTML测试报告 在 ab 中加上 -w 参数,即可打印出HTML测试报告
ab的测试报告截图:
6.3、AB如果插入Cookies 和 Header:
通过 ab 参数:-C 和 -H 两个参数实现
-C 即是 Cookies的第一个大写字母,意思:就是添加cookies
-H 即是 Header的第一个大写字母,意思:就是添加请求头信息 用法: # ab -n 1 -c 1 -H '_name=_value' -C 'cookie1_name=cookie1_value' <Test URL> # 这样就可以实现带表头、缓存的请求了
本章教程只授权本作者写在:https://www.cnblogs.com/BenLam/p/9263927.html ,他人盗用必究
6.4、AB请求带proxy:port
ab -n 1 -c 1 -X 8080 <Test URL>
本章教程只授权本作者写在:https://www.cnblogs.com/BenLam/p/9263927.html ,他人盗用必究
7. AB参数中文翻译:
ab参数翻译如下: -n 即requests,用于指定压力测试/总请求数。
-c 即concurrency,用于指定压力测试的并发数。
-t 即timelimit,测试执行最大秒数,它可以让测试限制在一个固定的总时间以内,默认值为50000。
-s 即timeout,请求最大等待时长,默认30s
-b 即windowsize,TCP发送/接收的缓冲大小(单位:字节)。
-p 即postfile,发送POST请求时需要上传的文件,文件格式如"p1=1&p2=2"。使用方法是 -p 123.txt 。 (配合-T)
-u 即putfile,发送PUT请求时需要上传的文件。(配合-T)
-T 即content-type,用于设置Content-Type请求头信息,如 -T "application/x-www-form-urlencoded”,默认值为text/plain。(配合-p)
-v 即verbosity,设置显示信息的详细程度 – 4或更大值会显示头信息, 3或更大值可以显示响应代码(404, 200等), 2或更大值可以显示警告和其他信息。
-w 以HTML表格形式打印结果。
-i 使用HEAD请求代替GET请求。
-x 插入字符串作为table标签的属性。
-y 插入字符串作为tr标签的属性。
-z 插入字符串作为td标签的属性。
-C 添加cookie信息,例如:"Apache=1234"。此参数可以重复,用逗号分割。提示:可以借助session实现原理传递 JSESSIONID参数, 实现保持会话的功能,如-C "c1=1234,c2=2,c3=3, JSESSIONID=FF056CD16DA9D71CB131C1D56F0319F8"。
-H 添加任意的请求头,例如:"Accept-Encoding: gzip",请求头将会添加在现有的多个请求头之后(可以重复该参数选项以添加多个)。
-A 添加一个基本的网络认证信息,用户名和密码之间用英文冒号隔开。
-P 添加一个基本的代理认证信息,用户名和密码之间用英文冒号隔开。如-P proxy-auth-username:password
-X 指定使用的代理服务器和端口号,例如:"126.10.10.3:88"。
-V 显示版本号并退出。
-k 使用HTTP的KeepAlive特性。
-d 不显示百分比。
-S 不显示预估和警告信息。
-q 超过150个请求后不显示进度
-l 接受可变文档长度(用于动态页面)
-g filename 输出结果信息到gnuplot格式的文件中。
-e filename 输出结果信息到CSV格式的文件中。
-r 指定接收到错误信息时不退出程序。
-m method 方法名
-h 帮助
原文在:https://www.cnblogs.com/BenLam/p/9263927.html ,他人勿盗用
写给读者的话:
本章已经结束,ab是个小巧又快速得到结果的好东西,很多初学者经常一上来就 LR 、Jmeter,不是说不好,用兵之时岂可用大刀挡小将,费时费力不讨好,请关注我的下一篇文章带大家学习接口测试
Web性能测试篇:AB 压力测试的更多相关文章
- ab使用详解—如何使用apache性能测试工具进行压力测试
作为后端工程师,除了实现业务需求之外,需要考虑的就是自己写的服务,在大并发下是否能正常运行了.但是,在一般开发情况下,没那么多大并发情况让你测试,那该怎么办呢? 这时候,我们就可以用到apache的压 ...
- 简单模拟一下ab压力测试
简单了解下ab ab全程是apache benchmark,是apache官方推出的一个工具,创建多个并发访问线程,模拟多个访问者同时对一个URL地址进行访问.它的测试目标是基于URL的,因此它既可以 ...
- ASP.NET 页面缓存OutputCache用法实例(附ab压力测试对比图)
本文主要介绍Web窗体页面中的使用方法,MVC中使用方法,大家自行百度. 一.简单一行指令即可实现 <%@ OutputCache VaryByParam=" %> 这样整个页面 ...
- 4分钟apache自带ab压力测试工具使用: 2015.10.4
2015.10.44分钟apache自带ab压力测试工具使用:win8.1 wampserver2.5 -Apache-2.4.9-Mysql-5.6.17-php5.5.12-64b 可以参考一下部 ...
- win8.1上wamp环境中利用apache自带ab压力测试工具使用超简单讲解
2015.10.4apache自带ab压力测试工具使用:本地环境:win8.1 wampserver2.5 -Apache-2.4.9-Mysql-5.6.17-php5.5.12-64b 可以参考一 ...
- apache ab压力测试报错(apr_socket_recv: Connection reset by peer (104))
apache ab压力测试报错(apr_socket_recv: Connection reset by peer (104)) 今天用apache 自带的ab工具测试,当并发量达到1000多的时 ...
- Web 应用性能和压力测试工具 Gor - 运维生存时间
Web 应用性能和压力测试工具 Gor - 运维生存时间 undefined 无需花生壳,dnspod实现ddns - 推酷 undefined
- ab压力测试nginx
centos7系统: yum install httpd-tools -y #安装ab压力测试工具
- apache ab压力测试报错apr_socket_recv
apache ab压力测试报错(apr_socket_recv: Connection reset by peer (104)) apache 自带的ab工具测试,当并发量达到1000多的时候报错如下 ...
随机推荐
- Redis简单集群配置
参考链接为:http://blog.csdn.net/u014230881/article/details/71123494 比较系统学习和熟练使用Redis命令可参考该教程:http://www.r ...
- 【转】实现Http Server的三种方法
一.使用SUN公司在JDK6中提供的新包com.sun.net.httpserver JDK6提供了一个简单的Http Server API,据此我们可以构建自己的嵌入式Http Server,它支持 ...
- loadrunner脚本中参数化和返回值输出log到外部文件
loadrunner脚本中参数化和返回值输出log到外部文件 很多时候,我们在做性能测试之前,需要造数据,但是使用的这些参数化数据和生成的返回数据在后面的测试都会用的,所以我们需要在造数据过程中,将参 ...
- 如何处理Entity Framework / Entity Framework Core中的DbUpdateConcurrencyException异常(转载)
1. Concurrency的作用 场景有个修改用户的页面功能,我们有一条数据User, ID是1的这个User的年龄是20, 性别是female(数据库中的原始数据)正确的该User的年龄是25, ...
- mysql常见字符串处理函数
- 决策树 - 可能是CART公式最严谨的介绍
目录 决策树算法 ID3算法[1] C4.5 改进[1] "纯度"度量指标:信息增益率 离散化处理 CART(分类与回归树,二叉) 度量指标 二值化处理 不完整数据处理 CART生 ...
- DBCP数据库连接池的简单使用
0.DBCP简介 DBCP(DataBase connection pool)数据库连接池是 apache 上的一个Java连接池项目.DBCP通过连接池预先同数据库建立一些连接放在内存中( ...
- 用JavaScript获取URL参数的方法之一
若地址栏URL为:abc.html?m=tomms&c=allsearchlist&pageNo=1&pageNum=20&text=1 <script> ...
- Hbase(1)-MySQL海量数据存储的启发
宽表拆分 有一张user表,记录了用户的信息,,如果表中的列有很多,就称之为宽表,为了提升效率,会进行垂直拆分 拆分后 将用户的信息分为基本信息和其他信息,页面一开打就需要展示的信息为基本信息,其他信 ...
- 请简述以下两个for 循环的优缺点
今天笔试时候遇到一个问题,找到相似的. ; i<N; i++) { if (condition) DoSomething(); else DoOtherthing(); } if (condit ...