JMeter 的使用
Posted 雨 燕
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JMeter 的使用相关的知识,希望对你有一定的参考价值。
一. JMeter简介
JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言
JMeter 系列之—-01 使用
二. 主要元件说明
下图是jmeter在做压测时脚本的结构
(1)测试计划(Test Plan)
是使用JMeter进行测试的起点,它是其它JMeter测试元件的容器。
(2)线程组(Thread Group)
代表一定数量的并发用户,它可以用来模拟并发用户发送请求。
(3)取样器(sampler)
定义实际的请求内容,被线程组包含,我们主要用HTTP请求。
(4)监听器(Listener)
负责收集测试结果,同时也被告知了结果显示的方式。我们常用的包括:聚合报告、察看结果树、用表格查看结果,都支持将结果数据写入文件。其他的添加上去看看就行。
(5)逻辑控制器(Logic Controller)
可以自定义JMeter发送请求的行为逻辑,它与Sampler结合使用可以模拟复杂的请求序列。
其分为循环控制器和事务控制器。
(6)断言(Assertions)
可以用来判断请求响应的结果是否如用户所期望的。它可以用来隔离问题域,即在确保功能正确的前提下执行压力测试。这个限制对于有效的测试是非常有用的。
(7)配置元件(Config Element)
维护Sampler需要的配置信息,并根据实际的需要会修改请求的内容。我们主要在参数化中用到CSV Data Set Config。
(8)前置处理器(Pre Processors)和后置处理器(Post Processors)
负责在生成请求之前和之后完成工作。前置处理器常常用来修改请求的设置,后置处理器则常常用来处理响应的数据。我们主要在动态关联中用到后置处理器的正则表达式提取器。
(9)定时器(Timer)
负责定义请求之间的延迟间隔。
详细说明如下:
2.1 线程组(线程)
首先新增一个测试计划,测试计划下要增加一个【线程组】,线程组中包括如下设置项
1. 线程数
2. Ramp-up Period(in seconds)
【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代表同时并发
3. 循环次数:单个线程循环次数
4. Delay Thread creation until needed
延迟创建线程,直到该线程开始采样,即之后的任何线程组延迟和加速时间为线程本身。这样可以支持更多的线程,但不会有太多是同时处于活动状态。
5. 调度器
选中调度器后,需要输入启动和结束时间。当测试启动时,如果必须JMeter会等待启动时间到达。在每个周期 结束,JMeter检验结束时间是否到达,如果是,运行停止,如果不是测试被允许继续,直到迭代限制到达。
另外你可以使用启动延迟和持续时间文本域。注意启动延迟会覆盖启动时间,持续时间会覆盖结束时间。
6. 在取样器错误后要执行的动作
当线程执行取样器失败的时候,要执行的策略,选项如下:
【继续】:忽略错误,是继续执行
【Start Next Thread Loop】: 忽略错误,线程当前循环终止,执行下一个循环。
【停止线程】:当前线程停止执行,不影响其他线程正常执行。
【停止测试】:整个测试会在所有当前正在执行的线程执行完毕后停止
【立即停止测试】:整个测试会立即停止执行,当前正在执行的取样器如果可能会被中断。
2.2. 配置元件----CSV Data Set Config
csv文件中数据作为参数,驱动测试
Variable names(comma-delimited): 参数名称
Delimiteruse (\'it\' for tab):分隔符
Recycle on EOF?
Stop thread on EOF?
当Recycle on EOF 选择flase时,Stop thread on EOF选择true,线程4个,参数3个,那么只会请求3次, 就会停止,保证每条数据只跑一次
2.3. 配置元件--Bean Shell Sampler
BeanShell可执行标准Java语句和表达式,另外包括一些脚本命令和语法。
Bean Shell常用内置变量
JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量及其使用方法如下:
-
log:用来记录日志文件,写入到jmeber.log文件,使用方法:log.info(“This is log info!”);
-
ctx(JmeterContext)通过它来访问context,使用方法可参考:org.apache.jmeter.threads.JMeterContext。
-
vars - (JMeterVariables):操作jmeter变量,提供读取/写入访问变量的方法。这个变量实际引用了JMeter线程中的局部变量容器(本质上是Map),它是测试用例与BeanShell交互的桥梁,常用方法:
a) vars.get(String key):从jmeter中获得变量值
b) vars.put(String key,String value):数据存到jmeter变量中
c) vars.putObject("OBJ1",new Object());
更多方法可参考:org.apache.jmeter.threads.JMeterVariables
-
props - (JMeterProperties - class Java.util.Properties):操作jmeter属性,该变量引用了JMeter的配置信息,可以获取Jmeter的属性,它的使用方法与vars类似,但是只能put进去String类型的值,而不能是一个对象。对应于java.util.Properties。
a) props.get("START.HMS"); 注:START.HMS为属性名,在文件jmeter.properties中定义
b) props.put("PROP1","1234");
-
prev - (SampleResult):获取前面的sample采样的结果,常用方法:
a) getResponseDataAsString():获取响应信息
b) getResponseCode() :获取响应code
更多方法可参考:org.apache.jmeter.samplers.SampleResult
-
sampler - (Sampler):gives access to the current sampler 访问当前采样
2.4. 监听器
1 参看结果数,聚合报告
2 Aggregate Graph------------查看QPS(吞吐量:每秒钟可以处理的请求数)
三. 监控服务器系统资源
1. 安装jmeter-plugin-manager
2. 使用jmeter-plugin-manager,安装PerfMon(选项->plugin Manager,在Avaliable Plugins中搜索Per,然后勾选ApplyChanges and Restart jmeter)
3. 在被压测服务器安装ServerAgent-2.2.1 ,并启动,注意防火墙必须开放端口4444
systemctl start firewalld firewall-cmd --zone=public --add-port=4444/tcp --permanent firewall-cmd --reload firewall-cmd --zone=public --list-ports
linux服务器上需将startAgent.sh设定为可执行文件:chmod 777 startAgent.sh
4. jmeter测试计划中添加jp@gc - PerfMon Metrics Collector,配置监听项
PerfMon Metrics Collector and Server Agent原理和使用可以查看官方文档
具体可以查看官方的文档:
https://jmeter-plugins.org/wiki/PerfMon/
https://jmeter-plugins.org/wiki/PerfMonAgent/
4. 使用jmeter-plugin-manager,安装Basic Graphs,可以查看jp@gc - Response Times Over Time,jp@gc - Transactions per Second,jp@gc - Active Threads Over Time
四. 导出测试报告
以上是关于JMeter 的使用的主要内容,如果未能解决你的问题,请参考以下文章
JMeter:逻辑控制器_模块控制器(Module Controller)
jmeter的Include Controller控件和Test Fragment控件和Module Controller控件