目录
性能测试是利用产品、人员和流程来降低应用程序、升级程序或补丁程序部署风险的一种手段。性能测试的主要思想是通过模拟产生真实业务的压力对被测系统进行加压,验证被测系统在不同压力情况下的表现,找出其潜在的瓶颈。
性能测试相关术语:响应时间、并发用户数、事务响应时间、吞吐量、TPS(每秒事务响应数)、性能计数器等。
性能测试方法:负载测试、压力测试、配置测试、并发测试、可靠性测试等。
应用领域:能力验证、规划能力、性能调优、缺陷发现。
性能测试工具架构一般包括:虚拟用户脚本产生器(Virtual User Generator)、压力产生器(player)、用户代理(Agent)、压力调度和监控系统(Controller)、压力结果分析工具(Analysis)。
在软件测试中:压力测试(Stress Test),也称为强度测试、负载测试。压力测试是模拟实际应用的软硬件环境及用户使用过程的系统负荷,长时间或超大负荷地运行测试软件,来测试被测系统的性能、可靠性、稳定性等。
压力测试通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大的服务级别的测试。通俗地讲,压力测试是为了发现在什么条件下您的应用程序的性能会变得不可接受。
极限压力测试举例:
1) 接收大数据量的数据文件时间;
2) 大数据恢复时间;
3) 大数据导入导出时间;
4) 大批量录入数据时间;
5) 大数据量的计算时间;
6) 多客户机同时进行某一个提交操作;
7) 采用测试工具软件;
8) 编写测试脚本程序;
9) 大数据量的查询统计时间。
实例:
在一个系统内,仅有一个用户登录使用相同的操作,对不同的数据量进行测试。记录下数据量和对应的资源占用率,响应时间。
数据:1万盏灯
- web获取1万盏灯所耗时间(大数据量的查询统计时间)
- 轮询获取1万盏灯比较函数所耗时间(大数据量的计算时间)
- Node转存数据程序所耗时间(大数据导入时间)
- 服务器资源的耗用(CPU)
软件名称 | 是否开源 | 简介 |
webbench | 开源 | 由Lionbridge公司开发,主要测试每秒钟请求数和每秒钟数据传输量,同时支持静态、动态、SSL。 部署简单,静动态均可测试。适用于小型网站压力测试(单例最多可模拟3万并发) |
apache bench | 开源 | Apache自带的压力测试工具,主要功能用于测试网站每秒钟处理请求个数。 多见用于静态压力测试,功能较弱,非专业压力测试工具 |
tcpcopy | 开源 | 基于底层应用请求复制,可转发各种在线请求到测试服务器,具有分布式压力测试功能,所测试数据与实际生产数据较为接近。 后起之秀,主要用于中大型压力测试,所有基于 tcp的packets均可测试 |
loadrunner | 付费软件/破解版本 | 压力测试界的泰斗,可以创建虚拟用户,可以模拟用户真实访问流程从而录制成脚本,其测试结果也最为逼真。 模拟最为逼真,并可进行独立的单元测试,但是部署配置较为复杂,需要专业人员才可以。 |
Apache JMeter | 开源免费 | Jmeter 是一款使用Java开发的,开源免费的,测试工具, 主要用来做功能测试和性能测试(压力测试/负载测试). 而且用Jmeter 来测试 Restful API, 非常好用。 |
wrk | 开源 | https://github.com/wg/wrk |
腾讯WeTest | 付费 | 腾讯WeTest出品的线上服务器压力测试服务WeTest服务器压力测试 最高可至亿级并发,实时查看性能数据报表,专家级性能优化建议。我们通常要分析的性能数据像TPS,在线人数,事务数,网络吞吐,CPU,内存,磁盘IO等性能报告里都有。 |
阿里云PTS
| 付费 | 性能测试PTS(Performance Testing Service)是面向所有技术相关背景人员的云化性能测试工具,有别于传统工具的繁复,PTS以互联网化的交互,面向分布式和云化的设计,更适合当前的主流技术架构。无论是自研还是适配开源的功能,PTS都可以轻松模拟大量用户访问业务的场景,任务随时发起,免去搭建和维护成本。更是紧密结合监控类产品提供一站式监控、定位等附加价值,高效检验和管理业务性能。 |
Webbench是有名的网站压力测试工具,它是由 Lionbridge公司(http://www.lionbridge.com)开发。
Webbech能测试处在相同硬件上,不同服务的性能以及不同硬件上同一个服务的运行状况。webBech的标准测试可以向我们展示服务器的 两项 内容:每秒钟相应请求数和每秒钟传输数据量。webbench不但能具有便准静态页面的测试能力,还能对动态页面(ASP,PHP,JAVA,CGI)进 行测试的能力。还有就是他支持对含有SSL的安全网站例如电子商务网站进行静态或动态的性能测试。
-
-
- Ubuntu 下载安装
-
1、安装依赖包CTAGS
apt-get install ctags
2、安装 Webbench
下载程序: webbench-1.5.tar.gz
wget http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz
make
sudo make install
-
-
- webbench使用
-
#webbench -? (查看命令帮助)
常用参数 说明,-c 表示客户端数,-t 表示时间
测试实例:
#webbench -c 500 -t 30 http://127.0.0.1/phpionfo.php
测试静态图片:
#webbench -c 500 -t 30 http://127.0.0.1/test.jpg
-
-
- webbench测试结果
-
分析:每秒钟响应请求数:3230 pages/min,每秒钟传输数据量11614212 bytes/sec.
https://www.oschina.net/p/webbench
-
- ab(apache bench)
ab 命令会创建很多的并发访问线程,模拟多个访问者同时对某一 URL 进行访问,可用来测试 Apache 的负载压力,也可以测试 Nginx、lighthttp、IIS 等其它 Web 服务器的压力。
Unix 安装:yum install httpd
Windows安装:下载 http://pan.baidu.com/s/1mifnlUS
在安装目录 bin下可以看到 ab.exe。
为了避免因为网络原因而导致服务器压力测试结果不准确,一般可以用 ab -n 100 -c 50 http://127.0.0.1/index.php 来测试自己服务器Web性能。所有 ab 命令的组成遵循此结构: ab [options] [full path to web document] 。
ab -n 1000 -c 10 http://www.qq.com/
“-n”表示:每次请求数,默认不能超过1024个,“-c”表示:1个请求的并发连接数,默认最大不能超过50000
https://blog.youkuaiyun.com/Jerome_s/article/details/47030671
TcpCopy顾名思义,就是一个可以将tcp流量复制的工具(其实也可以复制UDP)。有了这样一个工具,我们就可以真实的复制线上流量,然后将这些流量复制到我们的测试服务器上。这样就可以很容易模拟线上真实用户的访问,做一些功能上的,性能上的测试。而且经过实际测试发现TCPCopy对线上机器的资源消耗也是极低的。而请求复制,一般分为两类:1)基于应用层的请求复制2)基于底层数据包的请求复制。
Tcpcopy是由网易技术部王斌(http://weibo.com/tcpcopy)在王波的工作基础上开发的,2011年9月开源的项目(https://github.com/session-replay-tools/tcpcopy https://github.com/wangbin579/tcpcopy )
-
-
- tcpcopy代码下载
- Online Server 上的操作
- tcpcopy代码下载
-
下载并安装 tcpcopy 客户端;
git clone http://github.com/session-replay-tools/tcpcopy
./configure
make && make install
安装完成后的各结构目录:
Configuration summary
tcpcopy path prefix: "/usr/local/tcpcopy"
tcpcopy binary file: "/usr/local/tcpcopy/sbin/tcpcopy"
tcpcopy configuration prefix: "/usr/local/tcpcopy/conf"
tcpcopy configuration file: "/usr/local/tcpcopy/conf/plugin.conf"
tcpcopy pid file: "/usr/local/tcpcopy/logs/tcpcopy.pid"
tcpcopy error log file: "/usr/local/tcpcopy/logs/error_tcpcopy.log"
运行 tcpcopy 客户端,有几种可选方式:
./tcpcopy -x 80-172.16.***.52:80 -s 172.16.***.53 -d #全流量复制
./tcpcopy -x 80-172.16.***.52:80 -s 172.16.***.53 -r 20 -d #复制20%的流量
./tcpcopy -x 80-172.16.***.52:80 -s 172.16.***.53 -n 2 -d #放大2倍流量具体的生产环境和镜像环
-
-
-
- Test Server 上的操作:
-
-
添加静态路由:
route add -net 0.0.0.0/0 gw 172.16.***.53
-
-
-
- Assistant Server 上的操作:
-
-
下载并安装 intercept 服务端;
git clone http://github.com/session-replay-tools/intercept
./configure
make && make install
安装完成后的各结构目录:
Configuration summary
intercept path prefix: "/usr/local/intercept"
intercept binary file: "/usr/local/intercept/sbin/intercept"
intercept configuration prefix: "/usr/local"
intercept configuration file: "/usr/local/intercept/"
intercept pid file: "/usr/local/intercept/logs/intercept.pid"
intercept error log file: "/usr/local/intercept/logs/error_intercept.log"
运行 intercept 服务端;
./intercept -i eth0 -F 'tcp and src port 80' -d
对照上图5,再简单解释一下工作原理:
-
- TCPcopy 从数据链路层 copy 端口请求,然后更改目的 ip 和目的端口。
- 将修改过的数据包传送给数据链路层,并且保持 tcp 连接请求。
- 通过数据链路层从 online server 发送到 test server。
- 在数据链路层解封装后到达 nginx 响应的服务端口。
- 等用户请求的数据返回结果后,回包走数据链路层。
- 通过数据链路层将返回的结果从 test server 发送到 assistant server。注:test server 只有一条默认路由指向 assistant server。
- 数据到达 assistant server 后被 intercept 进程截获。
- 过滤相关信息将请求状态发送给 online server 的 tcpcopy,关闭 tcp 连接。
https://github.com/session-replay-tools/tcpcopy
https://sq.163yun.com/blog/article/182257750483230720
https://blog.youkuaiyun.com/u012928324/article/details/76216178
http://www.cnblogs.com/zhengyun_ustc/p/tcpcopy.html
LoadRunner是一种预测系统行为和性能的负载测试工具,通过模拟实际用户的操作行为进行实时性能监测,来帮助测试人员更快的查找和发现问题。LoadRunner适用于各种体系架构,能支持广泛的协议和技术,为测试提供特殊的解决方案。企业通过LoadRunner能最大限度地缩短测试时间,优化性能并加速应用系统的发布周期。
LoadRunner提供了3大主要功能模块,既可以作为独立的工具完成各自的功能,又可以作为LoadRunner的一部分彼此衔接,与其他模块共同完成软件性能的整体测试,这3大模块分别是:
- Virtual User Generator —— 用于录制性能测试脚本
- LoadRunner Controller—— 用于创建、运行和监控场景
- LoadRunner Analysis —— 用于分析性能测试结果
-
- LoadRunner 常用术语
-
1. 场景(Scenario):即测试场景,在LoadRunner的Controller部件中,可以设计与执行用例的场景,设置场景的步骤主要包括:在Controller中选择虚拟用户脚本、设置虚拟用户数量、配置虚拟用户运行时的行为、选择负载发生器(Load Generator)、设置执行时间等。
2. 负载发生器(Load Generator):用来产生压力的机器,受Controller控制,可以使用户脚本在不同的主机上执行。在性能测试工作中,通常由一个Controller控制多个Load Generator以对被测试系统进行加压。
3. 虚拟用户(Virtual User/Vuser):对应于现实中的真实用户,使用LoadRunner模拟的用户称为虚拟用户。性能测试模拟多个用户操作可以理解为这些虚拟用户在跑脚本,以模拟多个真正用户的行为。
4. 虚拟用户脚本(Vuser script):通过Vuser Generator录制或开发的脚本,这些脚本用来模拟用户的行为。
5. 事务(Transaction):测试人员可以将一个或多个操作步骤定义为一个事务,可以通俗的理解事务为“人为定义的一系列请求(请求可以是一个或者多个)”。在程序上,事务表现为被开始标记和结束标记圈定的一段代码区块。Loadrunner根据事务的开头和结尾标记,计算事务响应时间、成功/失败的事务数。
6. 思考时间(Think Time):即请求间的停顿时间。实际中,用户在进行一个操作后往往会停顿然后再进行下一个操作,为了更真实的模拟这种用户行为而引进该概念。在虚拟用户脚本中用函数lr_think_time()来模拟用户处理过程,执行该函数时用户线程会按照相应的time值进行等待。
7. 集合点(Rendezvous):设集合点是为了更好模拟并发操作。设了集合点后,运行过程中用户可以在集合点等待到一定条件后再一起发后续的请求。集合点在虚拟用户脚本中对应函数lr_rendezvous() 。
8. 事务响应时间:事务响应时间是一个统计量,是评价系统性能的重要参数。定义好事务后,在场景执行过程和测试结果分析中即可以看到对应事务的响应时间。通过对关键或核心事务的执行情况进行分析,以定位是否存在性能问题。
https://zhuanlan.zhihu.com/p/24812449
JMeter 是 Apache 组织的开放源代码项目,它是功能和性能测试的工具(压力测试/负载测试)。而且用Jmeter 来测试 Restful API, 非常好用。它可以用来:
-
- 生成测试负载
- 测试性能
- 测试功能性的行为
它包括对 HTTP(S), JDBC, JMS, FTP, LDAP,TCP,本机调用等协议的支持,也可以与用户编写的代码轻松扩展。
下载地址http://jmeter.apache.org/ 点击下载,Windows环境下,下载后解压,在bin目录中,双击 jmeter.bat运行。
Web项目测试报告中主要三种比较常见的报表,【聚合报告】【查看结果树】【用表格查看结果】
聚合报告:能显示测试次数、平均请求耗时、请求耗时百分百、最小、最大请求耗时、错误率、吞吐量、数据量等参数。
查看结果树:能查看每个请求的取样器结果、请求、详细返回结果
用表格查看结果:通过请求顺序查看请求地址,耗时、状态、数据量、延迟、连接耗时等信息。
官方网站:http://jmeter.apache.org/
参考文档:https://www.cnblogs.com/ios9/p/7644951.html
wrk -t12 -c400 -d30s http://127.0.0.1:8080/index.html
腾讯WeTest出品的线上服务器压力测试服务WeTest服务器压力测试 最高可至亿级并发,实时查看性能数据报表,专家级性能优化建议对于简单接口测试和评估容量的,只需要输入url和配置下人数的参数,就可以在一两分钟内快速发起压力。我们通常要分析的性能数据像TPS,在线人数,事务数,网络吞吐,CPU,内存,磁盘IO等性能报告里都有。报告是可视化的图表形式展现的。亦可以自己编写机器人,深度结合自身业务场景进行压测。其他简单的协议测试或是稳定性测试,也可满足。
接口测试:单接口的性能评估,找到整体的性能瓶颈,有的放矢地进行优化。
场景测试:通过设计测试用例模拟实际现网业务逻辑,来测试不同的业务场景下性能是否达标的一种测试类型。
容量测试:容量测试的目的是通过测试预先分析出反映软件系统应用特征的某项指标的极限值,系统在其极限状态下没有出现任何软件故障或还能保持主要功能正常运行。
稳定性测试:通过10小时以上的持续测试来了解业务后台的性能状况,测试后台的健壮性。用于验证服务器长期运行的状况,是十分重要的性能测试类型。
https://wetest.qq.com/product/gaps
性能测试PTS(Performance Testing Service)是面向所有技术相关背景人员的云化性能测试工具,孵化自阿里内部平台。有别于传统工具的繁复,PTS以互联网化的交互,面向分布式和云化的设计,更适合当前的主流技术架构。无论是自研还是适配开源的功能,PTS都可以轻松模拟大量用户访问业务的场景,任务随时发起,免去搭建和维护成本。更是紧密结合监控类产品提供一站式监控、定位等附加价值,高效检验和管理业务性能。
构建足够简单:PTS原生交互0编码支持复杂场景,同样支持开源JMeter脚本进行原生引擎压测或者PTS引擎压测
流量快速可控:压测任务30秒内发起,同时具备脉冲能力,中途调速即时生效更适合难以预计的压测过程
- 压测场景构建
支持有序串行和并行编排压测API,参数化上支持数据文件、系统函数、字符串、出参和彼此之间的组合,对 cookie 支持非常友好,还有丰富的指令扩展场景的仿真度。调试功能可以便捷地进行复杂场景的数据流向的校验。相应的资源包配套有极易上手的云端录制,非常便于移动端的请求抓取和到压测场景的一键导入。
- 压测流量控制
支持并发和RPS模式,分钟内快速启动压测。极低的误差,同时支持自动和纯手动模式,压测流量的调整秒级生效,支持最高千万级的流量瞬时脉冲。
- 监控和压测报告
陆续丰富中的监控指标,实时监控和报告中包括但不局限于各 API 的并发、TPS、响应时间和采样的日志,请求和响应时间还有不同的细分数据,其他监控能力(如云监控)陆续集成中。
- 对开源友好
除了强大的自研功能,对于开源JMeter的支持也很友好,支持JMeter脚本转化为PTS压测,同样支持原生JMeter引擎进行压测。
https://www.aliyun.com/price/product?spm=a2c4g.11186623.2.11.75f0665dVZs1GI#/pts/detail
、
https://help.aliyun.com/document_detail/65304.html?spm=a2c4g.11186623.6.580.fae11aacuS2TvI
压测场景概览:压测报告第一部分显示整个压测场景的相关业务指标。
串联链路概览:压测报告的概览页,显示整个场景下所有的串联链路和 API 的压测情况;如添加了云监控产品,ECS、SLB 或者 RDS,您也可以看到这些产品在压测期间的性能表现。
串联链路业务详情:压测报告的明细>业务详情页签下,显示全场景视图和串联链路中单个 API 的业务详情,包括请求(TPS)视图、业务(TPS)视图、并发数、响应时间和指令详情等。对相关指标的解读,参考测试指标。
ECS 监控详情:如添加了云监控 ECS,在压测报告的明细页,可查看整个压测时间内 ECS 的监控数据。具体解读,请参考云监控的监控项说明。
SLB 监控详情:如添加了云监控 SLB,在压测报告的明细页,可查看整个压测时间内 SLB 的监控数据。关于 SLB 监控详情解读,请参考负载均衡监控。
ARMS 监控详情:如添加了 ARMS 监控,在压测报告的明细页,可查看整个压测时间内 ARMS 基于应用接口的监控数据。关于 ARMS 监控详情解读,请参考 ARMS 应用接口调用监控。
https://www.aliyun.com/product/pts/?utm_content=se_1000101958
https://help.aliyun.com/document_detail/29262.html?spm=a2c4g.11186623.6.542.fae11aacEwmNN6