jmeter工具的基本使用

发布时间 2023-03-24 11:36:04作者: winnie_B612

1.jmeter参数化

1)参数化常用方式

  1.用户定义的变量

  2.用户参数

  3.CSV Data Set Config

  4.函数

2)用户定义的变量

添加方式:测试计划 --> 线程组--> 配置元件 --> 用户定义的变量

操作步骤:

  1.添加线程组

  2.添加用户定义的变量

  3.添加HTTP请求

  4.添加查看结果树

 

3)用户参数

添加方式:测试计划 --> 线程组--> 前置处理器 --> 用户参数

操作步骤:

  1.添加线程组

  2.添加用户参数

  3.添加HTTP请求

  4.添加查看结果树

 

 

4)CSV数据文件设置

添加方式:测试计划 --> 线程组--> 配置原件 --> CSV数据文件设置

操作步骤:

  1.定义CSV数据文件

  2.添加线程组

  3.添加CSV 数据文件设置

  4.添加HTTP请求

  5.添加查看结果树

 

 

 

5)函数

计数函数,一般做执行次数统计使用;

位置:在菜单中选择--> 选项 --> 函数助手对话框

 

 2.断言

1)概念

断言:让程序判断预期结果和实际结果是否一致。

提示:JMeter断言是在请求的返回层面增加一层判断机制;因为请求成功了,并不代表结果一定正确,因此需要检测机制提高测 试准确性。

2)常用断言

响应断言

JSON断言

持续时间断言(Duration Assertion)

3)响应断言

添加方式:测试计划 --> 线程组--> HTTP请求 --> (右键添加) 断言 --> 响应断言

操作步骤:

  1.添加线程组

  2.添加HTTP请求

  3.添加响应断言

  4.添加断言结果

  5.添加查看结果树

4)Json断言

添加方式:测试计划 --> 线程组--> HTTP请求 --> (右键添加) 断言 --> json断言

操作步骤:

  1.添加线程组

  2.添加HTTP请求

  3.添加json断言

  4.添加断言结果

  5.添加查看结果树

5)断言持续时间

场景请求:https://www.jd.com

检查:让程序检查响应时间是否大于500毫秒

添加方式:测试计划 --> 线程组--> HTTP请求 --> (右键添加) 断言 --> 断言持续时间

操作步骤:

  1.添加线程组

  2.添加HTTP请求

  3.添加断言持续时间

  4.添加断言结果

  5.添加查看结果树

 3.jmeter关联

1)关联

当请求之间有依赖关系,比如一个请求的入参是另一个请求返回的数据,这时候就需要用到关联处理。 JMeter可以通过“后置处 理器”中的一些组件来处理关联。

常用的关联方法:

  正则表达式提取器

  XPath提取器

  JSON提取器

2)正则表达式提取器

添加方式:测试计划 --> 线程组--> HTTP请求 --> (右键添加) 后置处理器 --> 正则表达式提取器

场景 请求:http://www.itcast.cn/ ,获取网页的title值

请求:https://www.baidu.com/ ,把获取到的title作为请求参数

操作步骤

  1.添加线程组

  2.添加HTTP请求-传智播客

  3.添加正则表达式提取器

  4.添加HTTP请求-百度

  5.添加查看结果树

 

引用名称:下一个请求要引用的参数名称,如填写title,则可用${title}引用它

正则表达式

():括起来的部分就是要提取的。

.:匹配任何字符串。

+:一次或多次。

?:不要太贪婪,在找到第一个匹配项后停止。

模板:用$$引用起来,如果在正则表达式中有多个正则表达式,则可以是$2$$3$等等,表示解析到的第几个值给title。如:

$1$表示解析到的第1个值

匹配数字:0代表随机取值,-1代表全部取值,1代表取第一个值

缺省值:如果参数没有取得到值,那默认给一个值让它取。

3)Xpath提取器

添加方式:测试计划 --> 线程组--> HTTP请求 --> (右键添加) 后置处理器 --> xpath提取器

场景 请求:http://www.itcast.cn/ ,获取网页的title值

请求:https://www.baidu.com/ ,把获取到的title作为请求参数

操作步骤

  1.添加线程组

  2.添加HTTP请求-传智播客

  3.添加xpath提取器

   4.添加HTTP请求-百度

  5.添加查看结果树

Use Tidy (tolerant parser):如果勾选此项,则使用Tidy将HTML响应解析为XHTML。当需要处理的页面是HTML格式时,必须选中该选项,当需要处理的页面是XML或XHTML格式(例如,RSS返回)时,取消选中该选项。

引用名称:存放提取出的值的参数

XPath Query:用于提取值的XPath表达式

匹配数字:如果XPath路径查询导致许多结果,则可以选择提取哪个作为变量

0:表示随机

-1:表示提取所有结果(默认值),它们将被命名为<变量名>_N(其中N从1到结果的个数)

X:表示提取第X个结果。如果这个x大于匹配项的数量,则不返回任何内容。将使用默认值

缺省值:参数的默认值

4)json提取器

添加方式:测试计划 --> 线程组--> HTTP请求 --> (右键添加) 后置处理器 --> json提取器

场景:

  1. 请求获取天气的接口,http://www.weather.com.cn/data/sk/101010100.html

  2. 获取返回结果中的城市名称

  3. 请求:https://www.baidu.com/s?wd=北京 ,把获取到的城市名称作为请求参数

操作步骤

  1.添加线程组

  2.添加HTTP请求-天气

  3.添加jsonh提取器

  4.添加HTTP请求-百度

  5.添加查看结果树

Names of created variables:存放提取出的值的参数

JSON Path Expressions:JSON路径表达式

5)跨线程组关联

当有依赖关系的两个请求(一个请求的入参是另一个请求返回的数据),放入到不同的线程组中时,就不能使用提取器保存的变 量来传递参数值,而是要使用Jmeter属性来传递。

场景

  1. 线程组1:请求获取天气的接口,http://www.weather.com.cn/data/sk/101010100.html

  2. 获取返回结果中的城市名称

  3. 线程组2:请求:https://www.baidu.com/s?wd=北京 ,把获取到的城市名称作为请求参数

操作步骤

  1.添加线程组1

  2.添加HTTP请求-天气

  3.添加JSON提取器

  4.添加BeanShell取样器(将JSON提取器提取的值保存为Jmeter属性)

  5.添加HTTP请求-百度(读取Jmeter属性)

  6.添加查看结果树

 4.jmeter脚本录制

操作步骤:

1. 开启windows操作系统的浏览器代理

 

开启后,windows操作系统中所有的http请求都会发送给设置的代理服务器。如果这个代理服务器没有启动,那么会提示网络连接错误。

2.在jmeter当中添加非测试元件HTTP代理服务器,并进行配置

jmeter当中添加HTTP代理服务器:测试计划(右键)->非测试元件->HTTP代理服务器

 

配置代理服务器的参数

State:

  1. 设置端口:代理服务程序端口程序

  2. 启动按钮

Test Plan Creation:

  1. 目标控制器:录制的脚本放到那个容器

  2. 分组:

    1). 不对样本分组:对所有录制的取样器不分组。

    2). 在组间添加分组:在取样器分组之间添加以名为 "---"的控制器。

    3). 每个组放入一个新的控制器:每个分组放到一个新的简单控制器下。

    4). 只存入每个组的第一个样本:只要每个分组的第一个请求会被录制。

    5). Put each group in a new transaction controller:

(每个分组创建一个事务控制器,那个分组的所有取样器都保存在控制器下。)

Requests Filtering:

包含模式:url匹配正则表达式,包含此项 如:.*localhost.*

排除模式:url匹配正则表达式,不包含此项 如:.*.css .*.jpg .*.jpeg .*.png .*.js

注意事项:

jmeter的代理服务器组件配置中,配置的端口必须和windows的浏览器代理的端口号保持一致

3.启动代理服务器,开始录制

先点击启动

 

等待一段时间后,会弹出一个证书确认窗口,这个证书用于抓取https接口请求。

后续如果需要抓取https的请求时,需要按照这个窗口的提示添加证书到操作系统当中

 

最后的效果:

 

在浏览器页面中进行操作,成功后,就能在jmeter当中看到抓取到的接口请求了。

 

 5.jmeter直连数据库

场景

1. 连接tpshop商城数据库获取商品名包含:小米手机10的商品id

1)准备工作

  1.启动tpshop数据库服务器

  2.添加MySQL驱动jar

在测试计划面板点击“浏览…“按钮,将你的JDBC驱动添加进来

配置数据库连接信息

添加方式:测试计划 --> 线程组--> (右键添加) 配置元件 --> JDBC Connection Configuration

主要参数:

Variable Name: mysql数据库连接池名称(

JDBC请求时要引用)

Database URL: jdbc:mysql://localhost:3306/tpshop2.0

jdbc:mysql:(MySQL固定格式)

//127.0.0.1:(数据库ip地址)

3306:(MySQL默认端口,如改变,请如实填写)

books:要连接的数据库名称

JDBC DRIVER class: com.mysql.jdbc.Driver(MySQL驱动包位置固定格式)

Username: root(连接数据库用户名,如实填写)

Password:(MySQL数据库密码,如实填写,如果密码为空不写)

2)操作步骤

  1.添加线程组

  2.添加 JDBC Connection Configuration

  3.添加 JDBC request

  4.添加查看结果树

主要参数:

Variable Name:数据库连接池的名字,需要与JDBC Connection Configuration的Variable Name Bound Pool名字保持一致

Query:填写的sql语句未尾不要加“;”

Parameter values:参数值

Parameter types:参数类型

Variable names:保存sql语句返回结果的变量名

Result variable name:创建一个对象变量,保存所有返回的结果

Query timeout:查询超时时间

Handle result set:定义如何处理由callable statements语句返回的结果

6.jmeter逻辑控制器

逻辑控制器可以按照设定的逻辑控制取样器的执行顺序

1)常用的逻辑控制器

  如果(If)控制器

  循环控制器

  ForEach控制器

2)如果(If)控制器

If控制器用来控制它下面的测试元素是否运行

添加方式:测试计划 --> 线程组--> (右键添加) 逻辑控制器 --> 如果(If)控制器

需求

  1. 使用‘用户定义的变量’定义一个变量name,name的值可以是‘baidu’或‘itcast’

  2. 根据name的变量值实现对应网站的访问

操作步骤

  1. 添加线程组

  2. 用户定义的变量

  3. 添加If控制器,判断name是否等于baidu

  4. 添加HTTP请求,用来访问百度

  5. 添加If控制器,判断name是否等于itcast

  6. 添加HTTP请求,用来访问传智播客

  7. 添加查看结果树

3)循环控制器

通过设置循环次数,来实现循环发送请求

添加方式:测试计划 --> 线程组--> (右键添加) 逻辑控制器 --> 循环控制器

需求:循环访问百度10次

操作步骤

  1. 添加线程组

  2. 添加循环控制器

  3. 添加HTTP请求

  4. 添加查看结果树

线程组属性控制组内所有取样器的执行次数,而循环控制器可以控制组内部分取样器的循环次数,后者控制精度更高

4)Foreach控制器

ForEach控制器一般和用户自定义变量或者正则表达式提取器一起使用,其在用户自定义变量或者从正则表达式提取器的返回结果中读取一系列相关的变量。 该控制器下的取样器都会被执行一次或多次,每次读取不同的变量值。

添加方式:测试计划 --> 线程组--> (右键添加) 逻辑控制器 --> ForEach控制器

需求

  1. 有一组关键字 [hello,python,测试],使用用户定义的变量存储

  2. 要依次取出关键字,并在百度搜索,例如:https://www.baidu.com/s?wd=hello

操作步骤

  1. 添加线程组

  2. 用户定义的变量

  3. 添加ForEach控制器

  4. 添加HTTP请求

  5. 添加查看结果树

 

 

 7.jmeter定时器

1)同步定时器

场景:模拟100个用户同时访问百度首页,统计高并发情况下运行情况

操作步骤

  1. 添加线程组,设置线程数=100

  2. 添加HTTP请求

  3. 添加同步定时器

  4. 添加查看结果树

  5. 添加监听器-聚合报告

2)常数吞吐定时器

常数吞吐量定时器可以让JMeter以指定数字的吞吐量(以每分钟的样本数为单位,而不是每秒)执行。 吞吐量计算的范围可以为 指定为当前线程、当前线程组、所有线程组。

添加方式:测试计划 --> 线程组--> HTTP请求 --> (右键添加) 定时器 --> Constant Throughput Timer

场景:一个用户以 20QPS (20 次/s) 的频率访问百度首页,持续一段时间,统计运行情况

操作步骤

  1. 添加线程组,循环次数设置成永远

  2. 添加HTTP请求

  3. 添加常数吞吐定时器

  4. 添加查看结果树

  5. 添加监听器-聚合报告

 8.jmeter分布式

1)使用场景
在使用JMeter进行性能测试时,如果并发数比较大(比如项目需要支持10000并发),单台电脑的(CPU和内存)可能无法支持,这时可以使用JMeter提供的分布式测试的功能。

2)原理

·JMeter分布式测试时,选择其中一台作为控制机(Controller),其它机器做为代理机(Agent)。

·执行时,控制机会把脚本发送到每台代理机上,代理机拿到脚本后就开始执行,代理机执行时不需要启动JMeter界面,可以 理解它是通过命令行模式执行的。

·执行完成后,代理机会把结果回传给控制机,控制机会收集所有代理机的信息并汇总。

3)代理机配置

  1. Agent机上需要安装JMeter

  2. 修改服务端口

    - 注意:非必须。如果是在同一台机器上演示需要使用不同的端口,多台机器可以不修改

    - 打开bin/jmeter.properties文件,修改`server_port`,比如:`server_port=2001`

  3. 将RMI SSL设置为禁用

    - 打开bin/jmeter.properties文件,修改为:server.rmi.ssl.disable=true

  4. 运行Agent上的jmeter-server.bat文件,启动JMeter

4)控制机配置

  1. 修改JMeter的bin目录下jmeter.properties配置文件,修改`remote_hosts`

    - 示例:`remote_hosts=192.168.182.100:1099,192.168.182.101:1099`

    - IP和Port是Agent机的IP以及自定义的端口,多台Agent之间用","隔开

  2. 将RMI SSL设置为禁用

  - 打开bin/jmeter.properties文件,修改为:server.rmi.ssl.disable=true

  3. 启动JMeter

  4. 选择菜单:运行-->远程启动/远程全部启动

备注

  1. 修改完端口要重启JMeter

  2. 控制机和代理机最好分开,由于控制机需要发送信息给代理机并且会接受代理机回传的测试数据,所以控制机自身会有消耗

  3. 参数文件:如果使用csv进行参数化,那么需要把参数文件在每台slave上拷一份且路径需要设置成一样的;

  4. 每台机器上安装的JMeter版本和插件最好都一致,否则会出一些意外的问题;

9.jmeter测试报告

1)聚合报告

位置: 测试计划->右键->监听器->聚合报告

  1. Label:每个请求的名称(勾选:在标签中包含组名称,显示线程组名-取样器名)

  2. #样本:各请求发出的数量

  3. 平均值:平均响应时间(单位:毫秒)。默认是单个Request的平均响应时间

  4. 中位数:中位数,50% <= 时间

  5. 90%百分比:90% <= 时间

  6. 95%百分比:95% <= 时间

  7. 99%百分比:99% <= 时间

  8. 最小值:最小响应时间

  9. 最大值:最大响应时间

  10. 异常%:请求的错误率 = 错误请求的数量/请求的总数

  11. 吞吐量:吞吐量。默认情况下表示每秒完成的请求数,一般认为它为TPS。

  12. 接收 KB/sec:每秒从服务器端接收到的千字节数

  13. 发送 KB/sec:每秒向服务器发送的千字节数

2)生成html测试报告

命令

jmeter -n -t [jmx file] -l [result file] -e -o [html report folder]

eg: jmeter -n -t hello.jmx -l result.jtl -e -o ./report

参数描述:

-n:非GUI模式执行JMeter

-t [jmx file]:测试计划保存的路径及.jmx文件名,路径可以是相对路径也可以是绝对路径

-l [result file]:保存生成测试结果的文件,jtl文件格式

-e:测试结束后,生成测试报告

-o [html report folder]:存放生成测试报告的路径,路径可以是相对路径也可以是绝对路径

注意:

result.jtl和report会自动生成,如果在执行命令时result.jtl和report已存在,必须用先删除,否则在运行命令时就会报错

10.jmeter配置性能(cpu等)监测

 1)下载

首先进入网址https://jmeter-plugins.org/downloads/old/  下载Jmeter插件资源

JMeterPlugins-Standard-1.4.0.zip 
JMeterPlugins-Extras-1.4.0.zip

进入网址https://jmeter-plugins.org/wiki/PerfMon/ 下载Perf Mon 插件

ServerAgent-2.2.1.zip 

其中JMeterPlugins-Standard和JMeterPlugins-Extras是客户端的,ServerAgent是服务器端的。

2)配置

将 JMeterPlugins-Standard-1.4.0.zip 解压后,把 lib\ext 目录下的 JmeterPlugins-Standard.jar 文件都放到apache-jmeter-3.1\lib\ext目录中。 
将 JMeterPlugins-Extras-1.4.0.zip 解压后,把 lib\ext 目录下的 JMeterPlugins-Extras.jar 文件放到apache-jmeter-3.1\lib\ext目录中。 
将 ServerAgent-2.2.1 解压后整个文件放到要监控的服务器中待使用。

3)添加监听器准备接口

  1、 apache-jmeter-3.1\bin\jmeter.bat 启动JMeter 
正常启动成功后查看监听器,其中jp@gc 开头的为插件加载后出现的。每一个插件监控一项指标,这里就不一一详解,重点讲解其中两个jp@gc - Transactions per Second、jp@gc - PerfMon Metrics Collector

 

 

 

   2、添加HTTP请求并填写好,添加监听器jp@gc - Transactions per Second、jp@gc - PerfMon Metrics Collector,这里用一个查询的接口来做例子。

 

 

 

 

 

 

 

 

 

 4)监控

   1、 首先启动服务器的 ServerAgent-2.2.1\startAgent,我这里是一个Windows环境的服务器。

 

 

 

   2、双击启动startAgent.bat,显示下图表示启动成功。(默认端口为4444,也可以修改为其他端口)

 

 

 

   3、一切准备就绪,点击run开始做压力测试。结束后,看图分析。