什么是压测,为什么要进行压力测试?JMETER工具的使用
今天给大家分享一下,修真院官网JAVA任务6中问题,什么是压测,为什么要进行压力测试?Jmeter工具的使用?
一、背景介绍
负载测试(LoadTest)、压力测试(StressTest)、容量测试(CapabilityTest)与性能测试(PerformanceTest)是相互关系?
简单讲性能测试包括负载测试、压力测试和容量测试三种主要测试类型和其他测试类型。
性能测试就是用来测试软件在系统中的运行性能的。可以对单独模块测试,但只有整个系统集成后测试的性能才是真正的性能;
负载测试是为了检验系统在给定负载下是否能达到预期性能指标;
容量测试针对数据库而言,是在数据库中有较大数量的数据记录情况下对系统进行的测试;
压力测试是通过不断向被测系统施加“压力”,测试系统在压力情况下的性能表现,考察当前软硬件环境下系统所能承受的最大负荷并帮助找出系统瓶颈所在,也就是我们可以模拟巨大的工作负荷以查看应用程序在峰值使用情况下如何执行操作。
Web服务处于分布式计算的核心位置,它们之间的交互通常很难测试。分布式开发、大型的开发者团队以及对代码日益组件化的期望都有可能使Web服务的开发变得越来越容易隐藏错误。这些类型的错误极难检测出来。压力测试是检测这类代码错误的一种有效方法,但是只有在压力系统设计得比较有效的情况下才能发挥作用。
压力测试考察当前软硬件环境下系统所能承受的最大负荷并帮助找出系统瓶颈所在。压测都是为了系统在线上的处理能力和稳定性维持在一个标准范围内,做到心中有数。
使用压力测试,您有希望找到很多种用其他测试方法更难发现的错误。有两种错误类型是:内存泄漏,并发与同步。
有效的压力测试系统将应用以下这些关键条件:重复,并发,量级,随机变化。
2.知识剖析
1.性能测试的目的
性能测试的目的是验证软件系统能否达到用户提出的性能指标,同时发现软件系统中存在的性能瓶颈, 以优化软件,最后起到优化系统的目的.包括以下结构方面:
1.评估系统的能力;
2.识别系统中的弱点;
3.系统调优;
4.测试软件中的问题;
5.验证稳定性(Resilience)和可靠性(Reliability);
2.性能测试的常见指标
对于B/S架构,一般关注Web服务器性能指标:
avg rps:平均每秒钟的响应次数=总次数/秒数
avg time to last byte per terstion(mstes):平均每秒业务脚本的迭代次数
successful rounds:成功的请求
failed rounds:失败的请求
successful hits:成功的点击次数
failed hits:失败的点击次数
hits per second:每秒点击次数
successful hits per second:每秒成功的点击次数
failed hits per second:每秒失败的点击次数
attempted connections:尝试连接数
throughput:吞吐率
3.JMeter常用测试单元
1.线程组,所有测试计划的起点,所有的逻辑控制器和采样器都必须放在线程组之下.常用参数:
设置线程数量(Numbers of Threads)
设置线程启动周期(Ramp-Up Period)
设置执行测试脚本的循环次数(Loop Count)
2.控制器
采样器,被JMeter用来向服务器发送请求,并等待响应;
逻辑控制器,控制JMeter的测试逻辑,特别是何时发送请求.
3.监听器,提供了对JMeter在测试期间收集到的信息的访问方法.
4.定时器,默认情况下,线程在发送请求之间没有间隔,添加一种定时器,以便设定请求之间间隔多长时间.
5.断言,检查从服务器获取的响应内容.
6.Sample与采样器紧密相连,不发送请求,可以添加或者修改请求.
7.前置处理器,在采样器发出请求之前做一些特殊操作.
8.后置处理器,在采样器发出请求之后做一些特殊操作,常用来从响应中提取数据.
4.JMeter执行顺序规则
配置元件----前置处理器----定时器----采样器---- 后置处理器(除非服务器响应为空)-----断言(除非服务器响应为空)----监听器(除非服务器响应为空)
5.JMeter测试结果
label:定义HTTP请求名称
samples:表示这次测试中一共发出了多少个请求
average:平均响应时长,默认情况下是单个request的平均响应时长
median:中位数,50%用户的响应时长(50%阈值)
90%line:90%用户的响应时长(90%阈值)
min:访问页面的最小响应时长
max:访问页面的最大响应时长
error%:错误请求数量/请求总数
throughput:默认情况下表示每秒完成的请求数
KB/sec:每秒从服务器接收到的数据量
3.常见问题
1、吞吐量与带宽的区别?
2、用户并发数量?
3、点击率与TPS的区别?
4.解决方案
1、吞吐量和带宽是很容易搞混的一个词,两者的单位都是Mbps.先让我们来看两者对应的英语, 吞吐 量:throughput ; 带宽: Max net bitrate 。当我们讨论通信链路的带宽时,一般是指链路上每秒所能传送的比特数。 我们可以说以太网的带宽是10Mbps。但是,我们需要区分链路上的可用带宽(带 宽)与实际链路中每秒所能传送的比特数(吞吐量)。 我们倾向于用“吞吐量”一次来表示一个系统的测试性能。这样,因为实现受各种低效率因素的影响, 所以由 一段带宽为10Mbps的链路连接的一对节点可能只达到2Mbps的吞吐量。 这样就意味着,一个主机上的应用能够以2Mbps的速度向另外的一个主机发送 数据。
2、并发一般分为2种情况。一种是严格意义上的并发,即所有的用户在同一时刻做同一件 事情或者操作,这种操作一般指做同一类型的业务。比如在信用卡审批业务中,一定数目的用户在同一时刻对已经完成的审批业务进行提交;还有一种特例,即所有 用户进行完全一样的操作,例如在信用卡审批业务中,所有的用户可以一起申请业务,或者修改同一条记录。另外一种并发是广义范围的并发。这种并发与前一种并发的区别是,尽管多个用户对系统发出了请求或者进行了操作,但是这些请求或者操作可以是相同的,也可以是不同的。对整个系统而言,仍然是有很多用户同时对系统进行操作,因此也属于并发的范畴。
3、每秒钟用户向WEB服务器提 交的HTTP请求数.这个指标是WEB应用特有的一个指标:WEB应用是"请求-响应"模式,用户发出一次申请,服务器就要处理一次,所以点击是WEB应 用能够处理的交易的最小单位.如果把每次点击定义为一个交易,点击率和TPS就是一个概念.容易看出,点击率越大,对服务器的压力越大.点击率只是一个性 能参考指标,重要的是分析点击时产生的影响。需要注意的是,这里的点击并非指鼠标的一次单击操作,因为在一次单击操作中,客户端可能向服务器发出多个 HTTP请求.