我们今天学习下jmeter的性能测试
jmeter的介绍:
jmeter 是开源,
一、什么是性能测试
常见的性能测试:压力测试和负载测试
压力测试:超过临界点
负载测试:加载数据靠近临界点
软件的性能是软件的一种非功能特性(不能拿性能和功能测试对比),它关注的不是软件是否能够完成特定的功能,而是在完成该功能时展示出来的及时性。
由定义可知性能关注的是软件的非功能特性,所以一般来说性能测试介入的时机是在功能测试完成之后。另外,由定义中的及时性可知性能也是一种指标,可以用时间或其它指标来衡量,通常我们会使用某些工具或手段来检测软件的某些指标是否达到了要求,这就是性能测试。
性能测试:指通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。
性能测试工具
jmeter、
loadrunn、商业版收费的,破解版,bug多,一个包4g多; 流行轻量级的工具
locust()、使用python代码来代替,
二、为什么要做性能测试
1、评估系统的能力
2、验证系统的稳定性和可靠性
3、识别系统中的弱点
4、系统调优
针对上面这几种目的,针对不同的结果,给出不同的应对方案和措施,这才是性能测试的最终目标
a、测试中得到的负荷和响应时间数据可以被用于验证所计划的模型的能力,并帮助作出决策。
b、受控的负荷可以被增加到一个极端的水平,并突破它,从而修复体系的瓶颈或薄弱的地方。
c、重复运行测试,验证调整系统的活动得到了预期的结果,从而改进性能。
d、检测软件中的问题:长时间的测试执行可导致程序发生由于内存泄露引起的失败,揭示程序中的隐含的问题或冲突。
e、在一个生产负荷下执行测试一定的时间是评估系统稳定性和可靠性是否满足要求的唯一方法。
三、性能测试的流程
1、需求的分析
2、性能场景的设计
3、性能计划的编写
4、脚本的开发
5、性能环境和数据的准备 (性能之前要通知项目中人,或自己搭建性能环境)
6、性能的执行
7、性能结果分析
8、性能总结报告
总结:(需求分析→ 性能场景设计以及计划的编写→ 脚本开发→ 测试环境和数据的准备→ 性能执行→ 结果分析,报告总结)
四、性能测试结束后需要提交哪些工作件?
1、性能测试计划
2、性能测试脚本
3、性能结果分析——根据分析结果给出调优
4、性能总结报告
五、性能测试的类型
1、基准测试:在给系统施加较低压力时,查看系统的运行状况并记录相关数做为基础参考
在公司中有具体的数值:不同的公司不同的项目不同的场景有不同的指标
2、负载测试:是指对系统不断地增加压力或增加一定压力下的持续时间,直到系统的某项或多项性能指标达到安全临界值,例如某种资源已经达到饱和状态等 。
3、压力测试:压力测试是评估系统处于或超过预期负载时系统的运行情况,关注点在于系统在峰值负载或超出最大载荷情况下的处理能力。
4、稳定性测试:在给系统加载一定业务压力的情况下,使系统运行一段时间,以此检测系统是否稳定。
5、并发测试:测试多个用户同时访问同一个应用、同一个模块或者数据记录时是否存在死锁或者其他性能问题
比如:(1)双十一,同时向服务器请求(同一个时间,调用同一个接口)
(2)学生报名抢号,就出现一直在加载
六、性能常见的测试工具以及他们的区别
1、jmeter是什么?
jmeter性能测试工具是apche组织开发的基于java语言开发的压力测试工具
2、jmeter的特点
(1)jmeter可以对http和ftp服务器进行压力测试和性能测试,同时还可以对数据库进行测试以及接口测试。
(2)完全移植和100%的纯java
(3)可以实现多线程的并发
(4)jmeter支持大量第三方插件的扩展
3、jmeter工作原理
(1)前期我们需要录制好性能测试脚本——通过badboy工具进行录制
(2)导入jmeter工具进行完善脚本
(3)对服务器进行性能测试
4、JMeter的缺点
JMeter的缺点是压力值不能精确控制,难以适应高并发的情况,而且由于是JAVA编写的,本身比较消耗资源。
5、JMeter和LoadRunner的区别
LoadRunner是一种预测系统行为和性能的负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题, LoadRunner能够对整个企业架构进行测试。通过使用LoadRunner ,企业能最大限度地缩短测i时间,优化性能和加速应用系统的发布周.商业性的工具。
JMeter是Apache组织的开放源代码项目,它是功能和性能测试的工具, 100%的用java实现。这个工具相对于上面的LoadRunner来说,是比较轻量级的工具,便于安装自免费开源。不仅可以进行功能测试也可以进行性能测试,一般可以用来做接口测试。这款工具学习起来也非常的容易,只要用这个工具做过几次测试,就可以非常熟悉的运用了。
七、jmeter目录结构
Examples:jmeter使用实例
Report-templete:日报模板
Apacha-Jmeter.jar:jmeter源码包
Jmeter.properties:jmeter配置文件
Jmeter.bat:window环境启动文件
Jmeter.sh:linux环境启动文件
Jmeter-server.bat:window环境启动负载生成器文件
分布式:有10条用例在一台电脑上跑,性能压力大
主节点,跑一条,分布给10台电脑完成,性能压力就小了
Jmeter-server:linux环境启动负载生成器文件
4.2docs目录:帮助文档
4.3lib目录:用于存放jmeter依赖的jar包,第三方插件安装后需要存放在lib/ext下
解释:lib下存放,jar包里面就是类,方法,函数 ,jar包用来拓展
4.4extras目录:提供对ant支持文件
4.5printable_docs目录:用户手册:入门可以去看
线程数:表示虚拟用户-20个虚拟用户
ramp-up period:用来设置虚拟用户多久时间加载完成-10s、那么表示20个虚
拟用户在10s内完成加载,每秒加载2个虚拟用户
循环次数:每个线程发送请求的次数为2次、线程循
线程数:表示虚拟用户-20个虚拟用户
ramp-up period:用来设置虚拟用户多久时间加载完成-10s、那么表示20个虚
拟用户在10s内完成加载,每秒加载2个虚拟用户
循环次数:每个线程发送请求的次数为2次、线程循环2次总共循环40次,就是发
送了40次请求,时间等于20s
1、安装badboy:
八、事务和断言
1、事务
定义一:某用户操作步骤的集合,当然也可以是一个步骤或者说是一个功能。
定义二:性能测试中,事务指的是从端到端,一个完整的操作过程,比如一次登录、一次筛选条件查询,一次支付。 无论流程步骤多或者少,一定要保证事物存在的意义性。
例如: 从打开浏览器到完成购物——这是一个事物
完成用户注册——这是一个事物
从登录开始到完成购票——这是一个事物
2、什么是断言/检查点?
响应会有两种情况:
第一:正确的响应
第二:错误的响应
jmeter中有个元件叫做断言( Assertion ) ,它的作用和loadrunner中的检查点类似,
用于检查测试中得到的响应数据等是否符合预期,用以保证性能测试过程中的数据交互与预期一致。
使用断言的目的:在request的返回层面增加一层判断机制;因为request成功了,并不代表结果一定正确。
所谓的检查点,就是系统根据用户的输入,按照业务要求的逻辑处理后产生的输出,不同的业务场景、不同的结果(成功或者失败)会有不一样的要求。部分输出是客户在需求中明确要求展示的,比如展示的字段可以直接观察到或者获取到,部分输出是服务于系统维护人员、客服人员。当然,部分输出也包括不能输出或者加密输出,比如客户的银行账号要求部分数字用*号替代,客户的密码不能再日志中输出等。检查点的检查包括客户或者系统质量要求的必须输出的或者不应该输出两种情况。
检查点分类:测试检查点主要包括界面展示、文件、数据库、短消息、业务日志等。
3、什么是参数化
参数化是自动化测试脚本的一种常用技巧。简单来说,参数化的一般用法就是将脚本中的某些输入使用参数来代替,在脚本运行时指定参数的取值范围和规则。.这样,脚本在运行时就可以根据需要选取不同的参数值作为输入。这种方式通常被称为数据驱动测试(Data Driven Test),参数的取值范围被称为数据池(Data Pool)
八、一些基本的操作
1.浏览器中文乱码解决办法
2.添加检查点(断言)
3.badboy中将变量改成动态变量(将流程和数据分离)
九、性能调优
IO实际上是计算机用语,也写作I/O,指输入/输出(Input/Output)。硬盘IO就是指对字节的读取速度,即硬盘的读写能力;
’
1、什么是性能调优
性能调优是一个性能测试完成后,根据性能测试过程中生成报告中的数据,对数据进行分析,给出调优方案。
2、性能调优从以下几个方面着手:
a、代码层面
b、数据库层面——索引,外键,sql语句的优化
c、硬件层面
3、为什么要进行性能调优
可以用更少的硬件资源,支撑更大量的业务发展,从而达到节省硬件投资的目的。
可以在资源有限,不能扩容的情况下,提升系统的响应能力,从而为用户带来更好的感知。
4、性能如何调优?
第一步:确定问题
代码层面:很多情况下,很多程序的性能问题都是写出来的。因此,对于发现瓶颈的模块,首先应该检查一下代码。
数据库层面:经常引起整个系统运行缓慢,一些诸如Oracle的大型数据库都是需要DBA进行正确的参数调整才能投产的。
硬件层面:硬盘速度、内存大小等都是容易引起瓶颈的原因,因此这也是分析的重点原因
第二步:分析原因
当确定了问题之后,我们要明确这个问题影响的是响应时间吞吐量还是其他的问题。是多数用户还是少数用户遇到这个问题。如果是少数用户,这几个用户的操作与其他人有什么不同。系统资源监控的结果是否正常?CPU的使用是否达到极限?是客户端还是服务器出现问题?系统硬件配置是否够用?实际负载是否超过了系统的负载能力?是否未对系统进行优化?
通过这些分析及与系统相关的问题,可以对系统瓶颈有更深入的了解,进而分析出真正的原因。
第三步:确定调整目标和解决方案
提高系统吞吐量,缩短响应时间,更好的支持并发。
第四步:测试解决方案
对通过解决方案调优后的系统进行基准测试。
第五步:分析调优结果
系统调优是否达到或者超出了预定目标?系统是整体性能得到了改善还是以牺牲某部分性能来解决其他问题?调优是否结束了?最后,如果达到了预期目标,调优工作就基本上可以结束了。
5、性能常见的指标
(1)什么是吞吐量
吞吐量,指的是单位时间内处理的客户端请求数量。通常情况下,吞吐量用请求数/秒Or页面数/秒来衡量。从业务角度看,吞吐量也可以用访问人数/天Or页面访问量/天来衡量。
(2)什么是吞吐率
吞吐率通常指单位时间内从服务器返回的字节数,也可以单位时间内客户提交的请求数。吞吐率是大型web系统衡量自身负载能力的一个重要指标,一般来说,吞吐率越大,单位时间内处理的数据就越多,系统的负载能力也强。吞吐率与很多因素有关,服务器的硬件配置,网络的宽带及拓扑结构,软件的技术架构。
(3)什么是事务
事务是脚本的一个特性,每个事务都包含开始事务和结束事务。事务用来衡量脚本中一行代码或多行代码的执行所耗费的时间。将开始事务放置在脚本中某行代码的前面,将结束事务放置在该行代码的后面,在该脚本的虚拟用户运行时,这个事务将衡量该行代码的执行花费了多长时间。
(4)什么是响应时间
对请求作出响应所需要的时间
(5)什么是每秒点击事务数
TPS表示服务器每秒处理的事务数,他是衡量系统处理能力的一个非常重要的指标,在性能测试中,通过检测不同用户的TPS,可以估算出系统处理能力的拐点。
(6)什么是每秒点击次数
每秒点击数是指每秒钟向web服务器提交的HTTP请求数,它是衡量服务器处理能力的一个常用指标。需要注意的是,这里的相应时间并非鼠标的一次单击操作,因为在一次单击操作中,客户端可能向服务器发出多个HTTP请求,切勿混淆。
十、jmeter的基本结构
1、test plan(测试计划):测试计划是用来描述本次性能测试的需求,所有相关的内容都是基于该测试计划展开的。
2、thread group(线程组):线程组可以理解为虚拟用户的组
线程组包括哪些内容:
(1)线程数:表示虚拟用户-----20个虚拟用户
(2)ramp-up period:用来设置虚拟用多久时间加载完成-----10s(表示20个虚拟用户在10s内完成加载,每秒加载2个虚拟用户)
(3)循环次数:每个线程发送请求的次数------2(线程循环2次总共循环40次,时间等于20)
3、添加一个http请求
注:http请求设置-保持默认即可
页面字段介绍:
名称:本属性用于标识一个取样器,建议根据实际场景来取
服务器名称或ip:http请求发送的目标服务器名称或者ip地址
端口号:目标服务器的端口号,默认为80,后面的超时定义可以不写
协议:向目标服务器发送http请求的协议,可以是http或者https,默认值为http
方法:发送http请求的方法,可用方法包括:get、post、head,put等
路径:目标URL路径(不包括服务器地址和端口)
自动重定向:如果选择该选项,当发送http请求后得到的响应是301和302是,jmeter自动重定向到新的页面
use keep alive(持久长链接):勾选后,jmeter和目标服务器采用keep-alive方式通信
use multipart/from-data for http post:当发送http post请求,需要勾选
同请求一起发送文件:在请求中发送URL参数,对于带参数的URL,jmeter提供一个简单的对参数的方法
从html文件获取所有有内容含资源:当该项被选中时,jmeter在发出http请求并获取得响应的html文件内容后,还对该html进行parse(解析)并获取html中包含的所有资源(图片,flash等),默认不选中,如果用户希望获取特定资源,可以在下方的embedded urls must match文本框中填入需要下载的特定资源表达式。
4、查看结果树:监控http请求结果的详细结果
5、聚合报告:生成此次性能的测试数据报告
Samples:测试一共发出的请求 ,虚拟用户循环次数
Average:平均响应时间
Median:中位数,50%的请求的响应时间
90%line:90%请求的响应时间
Min:最小响应时间
Max:最大响应时间
error%:错误的请求数/请求总数
Throughput:吞吐量---每秒完成的请求数
KB:耗流量
十一、Jmeter中元器件的作用
jmeter整个执行控制全靠我们左侧的树形图来控制的,那么怎么去添加树形图里面的元件呢,因为元件所放在位置不同,那么作用的范围也不同,那么我们必须要搞清楚树形图里面的执行顺序与作用域。
注意:sampler没有作用域,响应数据的元器件。
1.首先在测试计划下新建一个线程组
线程组中的元器件的作用:
(1)逻辑控制器:业务上有需要循环去处理一些数据
(2)配置元器件:处理一些默认请求所需要携带的数据如http的头部信息和cookie信息的处理
(3)定时器:模拟同一时间发现请求,可以用定时器来实现
(4)前置处理器:http请求之前需要完成的一些工作,如数据库测试中的连接数据库的功能
(5)后置处理器:关联需要用后置处理器,需要对响应数据做处理需要用到后置处理器
(6)断言:对结果进行校验
(7)监听器:作用范围的每一个sample元件的信息并呈现。
1. jp@gc - Bytes Throughput Over Time:不同时间吞吐量展示(图表) 聚合报告里,Throughput
是按请求个数来展示的,比如说1.9c,就是每s发送1.9个请求;而这里的展示是按字节Bytes来展示的
图表
2. jp@gc - Composite Graph: 混合图表 在它的Graphs里面可以设置多少个图表一起展示,它可
以同时展示多个图表
3. jp@gc - Hits per Second:每秒点击量
4. jp@gc - PerfMon Metrics Collector:服务器性能监测控件,包括CPU,Memory,Network,
I/O等等
5. jp@gc - Reponse Latencies Over Time:记录客户端发送请求完成后,服务器端返回请求之前这
段时间
6. jp@gc - Reponse Times Distribution: 显示测试的响应时间分布,X轴显示由时间间隔分组的响
应时间,Y轴包含每个区间的样本数
7. jp@gc - Transactions per Second: 每秒事务数,服务器每秒处理的事务数
(1)建立数据库连接池对象(服务器启动)。
(2)按照事先指定的参数创建初始数量的数据库连接(即:空闲连接数)。
(3)对于一个数据库访问请求,直接从连接池中得到一个连接。如果数据库连接池对象中没有空闲的连接,且连接数没有达到最大(即:最大活跃连接数),创建一个新的数据库连接。
(4)存取数据库。
(5)关闭数据库,释放所有数据库连接(此时的关闭数据库连接,并非真正关闭,而是将其放入空闲队列中。如实际空闲连接数大于初始空闲连接数则释放连接)。
(6)释放数据库连接池对象(服务器停止、维护期间,释放数据库连接池对象,并释放所有连接)。
3、应用程序上的性能瓶颈
一般指的是开发人员新开发出来的应用程序。例如,程序架构规划不合理,程序本身设计有问题(串行处理、请求的处理线程不够),造成系统在大量用户方位时性能低下而造成的瓶颈。
4、操作系统上的性能瓶颈
一般指的是windows、UNIX、Linux等操作系统。例如,在进行性能测试,出现物理内存不足时,虚拟内存设置也不合理,虚拟内存的交换效率就会大大降低,从而导致行为的响应时间大大增加,这时认为操作系统上出现性能瓶颈。
5、网络设备上的性能瓶颈
一般指的是防火墙、动态负载均衡器、交换机等设备。例如,在动态负载均衡器上设置了动态分发负载的机制,当发现某个应用服务器上的硬件资源已经到达极限时,动态负载均衡器将后续的交易请求发送到其他负载较轻的应用服务器上。在测试时发现,动态负载均衡器没有起到相应的作用,这时可以认为网络瓶颈。
△
Aggregate Graph
Backend Listener
Bean Shell Listener
Comparison Assertion Vsualier
ip@gc . Active Threads Over Time
jip@gC . AutoStop Listener
jpo@gc. . Bytes Throughput over Time
jip@gc Composite Graph
jip@gc . Connect Times Over Timne
jip@gC -Console Status Logger
jip@gc - DbMlon Samples Clleterr
jip@gc .Flexible File Writer
jip@gc Graphs Generator
ip@gc . Hits per Second
jn@gc-. JMXMon Samples Cletor
jip@gc . Page Data Extractor (页面数据提取器)
jip@gc- PertMlon Metrics Cllector()
jp@gc- Response Codes per Secnd
jp@gc- Response Latencies over TIme
jp@gc . Response Times Dstribution
i@gc -Response Times Over Time
jip@gc . Response Times Percentles
jp@gc - Response Times vs Threads
jp@gc.- Sythesis Report (tre)
ip@gc . Tanscton Troubput vs Theds
jip@gc- Transactins per Second
JSR223 Listener
Response Time Graph
Simple Data Writer
Summary Report
保存响应到文件