JMeter 的使用

Posted 雨 燕

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JMeter 的使用相关的知识,希望对你有一定的参考价值。

一. JMeter简介

JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言

官网

JMeter 系列之—-01 使用

JMeter 系列之—-02 创建数据库测试计划

JMeter 系列之—-03 生成脚本

JMeter 系列之—-04 支持CI

二. 主要元件说明

下图是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
View Code

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 的使用的主要内容,如果未能解决你的问题,请参考以下文章

无法将特定步骤保存为测试片段

JMeter:逻辑控制器_模块控制器(Module Controller)

JMeter接口测试-Include控制器

jmeter的Include Controller控件和Test Fragment控件和Module Controller控件

Jmeter —— Test Fragment

jmeterInclude Controller控件&Test Fragment的使用