一.前言
压力测试是每一个Web应用程序上线之前都需要做的一个测试,他可以帮助我们发现系统中的瓶颈问题,减少发布到生产环境后出问题的几率;预估系统的承载能力,使我们能根据其做出一些应对措施。所以压力测试是一个非常重要的步骤,下面我带大家来使用一款压力测试工具JMeter。
二.关于JMeter
Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。
Apache jmeter 可以用于对静态的和动态的资源(文件,Servlet,Perl脚本,java 对象,数据库和查询,FTP服务器等等)的性能进行测试。它可以用于对服务器、网络或对象模拟繁重的负载来测试它们的强度或分析不同压力类型下的整体性能。你可以使用它做性能的图形分析或在大并发负载测试你的服务器/脚本/对象。
官网:http://jmeter.apache.org/download_jmeter.cgi
三、开始第一个测试
将下载好的文件解压,在bin目录下点jmeter.bat启动
程序会先弹出个CMD命令窗口,不要着急,等一会儿 就会弹出应用窗口
添加线程组
在“测试计划”上右键 add【添加】-->【Threads(Users)】-->Thread Group【线程组】。(如何不习惯英文的,可以找中文版的)
设置线程数和循环次数。我这里设置线程数为20,循环一次。
这里简单介绍下
Ramp-Up Period(in second)
【1】决定多长时间启动所有线程。如果使用10个线程,ramp-up period是100秒,那么JMeter用100秒使所有10个线程启动并运行。每个线程会在上一个线程启动后10秒(100/10)启动。Ramp-up需要要充足长以避免在启动测试时有一个太大的工作负载,并且要充足小以至于最后一个线程在第一个完成前启动。 一般设置ramp-up=线程数启动,并上下调整到所需的。
【2】用于告知JMeter 要在多长时间内建立全部的线程。默认值是0。如果未指定ramp-up period ,也就是说ramp-up period 为零, JMeter 将立即建立所有线程。假设ramp-up period 设置成T 秒, 全部线程数设置成N个, JMeter 将每隔T/N秒建立一个线程。
【3】Ramp-Up Period(in-seconds)代表隔多长时间执行,0代表同时并发
Delay Thread creation until needed
延迟创建线程,直到该线程开始采样,即之后的任何线程组延迟和加速时间为线程本身。这样可以支持更多的线程,但不会有太多是同时处于活动状态。
Scheduler
Duration(seconds):决定了本次压测的持续时间是多长,也就是说,jmeter通过这个填入框的值,计算出来压测的结束时间
Startup delay(seconds): 决定了本次压测延迟多长时间开始,也就是说,jmeter通过这个填入框的值,计算出来压测的开始时间;这个设置,多数情况是在一个test plan下,有多个thread group的时候,分时间间隔来执行,这样可以更好的观察,到底是哪个接口/哪些接口导致系统出现不稳定/持续报错/OOM等问题
容易犯错的地方:在使用scheduler的时候,记得选中Forever
配置Http请求
填入响应的接口信息
到这里其实已经可以保存并运行了,但是我们有时候也需要看返回的结果信息,那么需要添加一个监听器
添加结果树视图
添加HTTP请求头
添加结果返回
根据响应的数据来判断请求是否正常。我在这里只判断的响应代码是否为200。还可以配置错误信息
添加Summary Report
会显示各种信息
保存
完成后,就可以点击运行,运行前,需要保存
当然你可以直接使用界面运行,一般来说是没用问题的,但是注意,既然是应用另外附带了一些可视化以及周期信息显示,那么必然消耗性能,所以需要你自己把握。下面再介绍如何使用CMD运行
使用CMD运行并生成报告
命令
jmeter -n -t example\First.jmx -l result\result.txt -e -o result\webreport
这里将命令简写了,个人使用的时候喜欢用绝对路劲。
example\First.jmx
为测试计划文件路径result\result.txt
为测试结果文件路径result\webreport
为web报告保存路径
web报告如下:
txt文件信息: