(二)Jmeter各部件的作用

本文详细介绍JMeter的主要组件及其用途,包括测试计划、线程组、取样器等,并讲解如何进行参数化设置、动态数据关联及分布式测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JMeter主要组件介绍

1.测试计划(Test Plan)是使用 JMeter 进行测试的起点,它是其它 JMeter 测试元件的容器。
2.线程组(Thread Group)代表一定数量的并发用户,它可以用来模拟并发用户发送请求。
3.取样器(sampler)定义实际的请求内容,被线程组包含,我们主要用HTTP请求。
4.监听器(Listener)
5.逻辑控制器(Logic Controller)
6.断言(Assertions)
7.配置元件(Config Element)
8.前置处理器(Pre Processors)和后置处理器(Post Processors)
9.定时器(Timer)

JMeter主要组件介绍-测试计划

1.测试计划(Test Plan)是使用 JMeter 进行测试的起点,它是其它 JMeter 测试元件的容器。
2.名称:你可以为你的测试计划取一个有意义的名字。
3.注释:对测试计划的注释。
4.用户定义的变量:用户可以自己定义变量,在用到此变量的时候直接用${变量名}引用即可。例:变量名=url,值=http://www.baidu.com,在需要 http://www.baidu.com时直接用${url}即可。
5.Add directory or jar to classpath:向类路径即%JMETER-HOME%\lib中添加目录及jar包。

JMeter主要组件介绍-线程组

1.名称:为线程组起名字。
3.线程属性-线程数:设置发送请求的用户数目 ,即并发数。
4.线程属性-Ramp-Up Period(in second):线程间的时间间隔,单位是秒。即所有线程在多少时间内启动。
5.线程属性-循环次数:请求的重复次数,如果选择后面的forever(默认),那么 请求将一直继续,如果不选择forever,而在输入框中输入数字,那么请求将重复指定的次数,如果输入1,那么请求将执行一次,如果是0,会出现问题。
5.调度器配置-启动时间:测试计划什么时候启动,启动延迟会覆盖它。
6.调度器配置-结束时间:测试计划什么时候结束,持续时间会覆盖它。
7.调度器配置-持续时间:测试计划持续多长时间,会覆盖结束时间。
8.调度器配置-启动延迟:测试计划延迟多长时间启动,会覆盖启动时间。
 

JMeter主要组件介绍-取样器(HTTP请求)

1.名称:HTTP请求的名字。
2.Web服务器-服务器名称或IP、端口号,脚本录制时自动添加,也可以使用“用户自定义变量”。
3.HTTP请求:用默认值即可。
4.同请求一起发送参数:请求中的参数、值可以在此设置,需要用到参数化及动态数据关联,我们在后面专门介绍。
5.同请求一起发送文件:我可以制定同请求一起发送哪个文件。
6.其他任务包括:从HTML文件中获取所有内含的资源、用作监视器、Embedded URLs must match。
JMeter主要组件介绍-监听器
1.监听器(Listener)负责收集测试结果,同时也被告知了结果显示的方式。
我们常用的包括:聚合报告、查看结果树、用表格查看结果,都支持将结果数据写入文件。
其他的添加上去看看就行。聚合报告前面我们介绍过,后面是查看结果树和用表格查看结果的截图。
JMeter主要组件介绍-监听器(用表格查看结果)

JMeter主要组件介绍-逻辑控制器

1.逻辑控制器(Logic Controller)可以自定义JMeter发送请求的行为逻辑,它与Sampler结合使用可以模拟复杂的请求序列。

 

v循环控制器可以设置请求的循环次数或永远循环(如果选中永远的话)。
v事务控制器可以将多个请求放在同一个事务中。如果选中Gegerate parent sample,则聚合报告中只显示事务控制器的数据,而不会显示其中的各个请求的数据,反之则全部显示。
 

JMeter主要组件介绍-断言

1.断言(Assertions)可以用来判断请求响应的结果是否如用户所期望的。它可以用来隔离问题域,即在确保功能正确的前提下执行压力测试。这个限制对于有效的测试是非常有用的。

JMeter主要组件介绍-配置元件

1.配置元件(Config Element)维护Sampler需要的配置信息,并根据实际的需要会修改请求的内容。我们主要在参数化中用到CSV Data Set Config

 

JMeter主要组件介绍-前置处理器和后置处理器

1.前置处理器(Pre Processors)和后置处理器(Post Processors)负责在生成请求之前和之后完成工作。前置处理器常常用来修改请求的设置,后置处理器则常常用来处理响应的数据。我们主要在动态关联中用到后置处理器的正则表达式提取器。
 
 

JMeter主要组件介绍-定时器

1.定时器(Timer)负责定义请求之间的延迟间隔。
 
 
 
 

参数化设置

1.在我们的测试计划中我们使用的都是HTTP请求,在HTTP请求中常常会提交一些参数,我们为了不想在每一次请求中都使用相同的参数值,就要想办法让每一次请求的参数的值都是不一样的,我们就需要进行参数化设置,这里我们介绍两种参数化设置的方法。

一种是利用函数助手中的_Random函数进行参数化设置;

一种是利用配置元件中的CSV Data Set Config进行参数化设置

2.JMeter中有一个函数助手的功能,里面内置了多个函数,我们可以利用其中的_Random函数来进行请求中的参数化设置。

v在JMeter中选择“选项-函数助手对话框”打开函数助手对话框。

 

v选择一个功能_Random。
v设定最小值为1。
v设定最大值为100。
v函数名称设为func1。
v点击生成将生成一个引用字符串${_Random(1,100,func1},在需要的请求参数中拷贝该字符串即可。
v其中函数名称用来在引用中作区别,即我们可以设定不同的名称在不同的地方引用同一个函数的功能。
 
 
 
v例如:我们生成了两个串${_Random(1,100,func1)}、 ${_Random(1,100,func2)},在添加图书的请求中,我们在bookName的参数值中引用${_Random(1,100,func1)},在bookConcern的参数值中应用${_Random(1,100,func2)},见截图,这样测试运行时不同的线程将产生不同的bookName和bookConcern。
 
 

参数化设置-CSV Data Set Config(1)

v在线程组上点击右键选择添加-配置元件-CSV Data Set Config,打开CSV Data Set Config。
vFilename文件名:即参数化要引用的文件名。这里是d:\number.txt
vFile encoding文件编码:可以不填。
vVariable Names(comma-delimited)变量名(用逗号分割):多个变量可以引用同一个文件,用逗号分割。这里是num1,num2
vDelimiter(use ‘\t’ for tab):参数文件中多个变量值的分隔符,\t表示用tab键分割,默认是逗号。
vRecycle on EOF?:结束后是否循环?默认是True.
vNumber.txt文件内容见截图。
v在添加图书的请求中,我们在bookName的参数值中引用${num1},在bookConcern的参数值中应用${num2},见截图,这样测试运行时不同的线程将产生不同的bookName和bookConcern。

 

动态数据关联

1.在HTTP请求的参数中经常会遇到一些参数的值是从服务器相应的动态数据,这些数据需要进行关联才能使得每一次请求都能成功得被服务器接受,在JMeter中采用正则表达式提取器来获取这些动态的数据。
2.正则表达式允许用户从服务器响应中获取数据,作为一个后置处理器,正则表达式提取器会在每一个请求执行后再执行,正则表达式提取请求的参数值,产生模板字符串,并将结果保存到给出的变量中。
 

动态数据关联(1)-正则表达式提取器

1.在HTTP请求的参数中经常会遇到一些参数的值是从服务器相应的动态数据,这些数据需要进行关联才能使得每一次请求都能成功得被服务器接受,在JMeter中采用正则表达式提取器来获取这些动态的数据。比如我们想要获得从服务器相应的TOKEN,就可以使用下面的正则表达式提取器。
 
 
 

动态数据关联(2)

v使用时就可以使用${token_g1}来表示获取到的TOKEN值。如下图:
 
 
 

使用命令行运行JMeter脚本

v JMeter -n -t my_test.jmx -l log.jtl
v-n告知JMeter采用非图形化运行JMeter脚本
v-t指定要运行的脚本文件
v-l指定保存执行结果的文件名
v执行命令前要检查当前目录是否是%JMeter_Home%\bin 目录;
v如果 JMeter 脚本不在当前目录,需要指定完整的路径;如果要把执行的结果保存在其他地方也要指定完整的路径。
 

利用XSLT分析JMeter结果文件(1)

1.将结果文件的扩展名改为xml,例:将log.jtl改为log.xml。
2.在log.xml的文件头

<?xml version="1.0" encoding="UTF-8"?>

<testResults version="1.2">

中添加

<?xml-stylesheet type=“text/xsl” href=“jmeter-results-report.xsl” ?>

使之变成

<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet type="text/xsl" href="jmeter-results-report.xsl" ?>

<testResults version="1.2">

其中href指定xsl文件的路径,如果与xml文件在同一目录,则只写文件名即可,否则要写明详细路径。

 

利用XSLT分析JMeter结果文件(2)

1.将修改后的xml文件用浏览器打开即可得到统计结果:

 

 
 

JMeter中进行分布式测试

作为一个纯 JAVA 的GUI应用,JMeter对于CPU和内存的消耗还是很惊人的,所以当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至还会引起JAVA内存溢出的错误。不过,JMeter也可以像 LoadRunner 一样通过使用多台机器运行所谓的代理来分担负载产生器自身的压力,并借此来获取更大的并发用户数,我们只需手动配置一下即可。
v1、在所有期望运行JMeter作为 负载产生器的机器上安装JMeter,并确定其中一台机器作为 控制器,其他的机器作为 代理。然后运行所有 代理 机器上的 JMeter-server.bat文件—假定我们使用两台机器172.20.80.47和172.20.80.68作为 代理;
v2、在Controller 机器的JMeter安装目录下找到 bin 目录,再找到 jmeter.properties 这个文件,使用记事本或者其他文字编辑工具打开它;
v3、在打开的文件中查找“remote_hosts=”这个字符串,你可以找到这样一行“remote_hosts=127.0.0.1”。其中的 127.0..0.1 表示运行JMeter代理的机器,这里需要修改为“remote_hosts=172.20.80.47,172.20.80.68”;
v4、保存文件,并重新启动控制器机器上的JMeter,并进入启动 ->远程启动菜单项。就会看到我们刚才添加的两个代理的地址,选中即可运行,如果想同时启动所有代理,选择远程全部启动即可。
要进行分布式测试代理机器上需要添加环境变量,即添加用户变量JMETER_HOME=d:\jmeter,系统变量中的path中添加d:\jmeter\bin(假设jmeter放在d盘根目录下)。
 
 

运行Jmeter进行测试(4)-聚合报告详解

vLabel:每个 JMeter 的 element (例如 HTTP Request )都有一个 Name 属性,这里显示的就是 Name 属性的值
v#Samples:表示你这次测试中一共发出了多少个请求,如果测试计划模拟10个用户,每个用户迭代10次,这里就会显示100
vAverage:平均响应时间 — 默认情况下是单个 Request 的平均响应时间,当使用了事务控制器时,也可以以事务为单位显示平均响应时间
vMedian:中位数,也就是 50 %用户的响应时间
v90% Line: 90 %用户的响应时间
vMin:最小响应时间
vMax:最大响应时间
vError%:错误率,本次测试中出现错误的请求的数量 / 请求的总数
vThroughput:吞吐量 —— 默认情况下表示每秒完成的请求数( Request per Second )
vKB/Sec:每秒从服务器端接收到的数据量

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

转载于:https://www.cnblogs.com/linbo3168/p/6023962.html

### JMeter 测试流程及操作指南 #### 一、JMeter 基础概述 JMeter 是一种功能强大且灵活的开源性能测试工具,主要用于评估 Web 应用程序的性能和负载能力[^1]。它可以模拟大量用户并发访问应用程序的行为,并记录响应时间和其他关键指标。 --- #### JMeter 的基本组成结构 在使用 JMeter 进行测试之前,需要理解其核心组成部分及其作用: - **测试计划 (Test Plan)**:定义整个测试的目标和范围。 - **线程组 (Thread Group)**:控制虚拟用户的数量以及它们的操作行为(如启动延迟、循环次数等)。 - **HTTP 请求默认值 (HTTP Request Defaults)**:配置全局 HTTP 参数,减少重复工作。 - **采样器 (Sampler)**:发送具体的请求到服务器并接收响应数据。 - **断言 (Assertions)**:验证返回的结果是否满足预期条件。 - **监听器 (Listeners)**:收集和展示测试结果,例如通过图表或表格形式呈现。 - **前置处理器/后置处理器 (Pre-processors & Post-processors)**:分别处理请求前后的逻辑,比如动态生成参数或将响应中的某些字段保存为变量[^2]。 --- #### 三、JMeter 接口测试的具体步骤 以下是基于引用内容总结的标准接口测试流程: 1. **创建测试计划** 打开 JMeter 后新建一个测试计划作为项目的入口点[^3]。 2. **添加线程组** 配置线程数(即模拟多少个用户)、每秒启动的新线程数目(Ramp-Up Period),以及每个线程执行迭代的总次数。 3. **设置 HTTP 默认选项** 如果多个请求共享相同的基础 URL 或其他公共属性,则可以通过 `HTTP Request Defaults` 组件集中设定这些通用信息以简化后续配置过程。 4. **构建实际请求** 使用 `HTTP Request Sampler` 插入具体 API 调用细节,包括方法类型(GET, POST 等),路径参数,头部信息(header fields) 及主体(payloads)。 5. **应用必要的预设与后处理机制** - 利用内置的功能组件像 JSON 提取器(JSON Extractor), 正则表达式提取器(Regular Expression Extractor) 来解析服务端反馈的数据片段存储成可重用的形式供下游节点调用. - 对于复杂场景下需要用到自定义脚本的情况推荐采用 JSR223 PreProcessor / PostProcessor 并选用 Groovy 编写相应业务逻辑代码. 6. **加入验证规则** 添加适当类型的 Assertion 元素确保接收到的内容符合既定标准; 如期望状态码应匹配特定数值区间等等. 7. **启用监控插件观察实时表现状况** 当希望直观了解当前压力环境下目标系统的运转态势时可以选择附加 Visualization Listener 类型的小部件绘制趋势曲线图辅助分析问题所在位置[^4]. 8. **最后审查整体布局确认无误之后便可触发 Run 按钮正式开始压测活动** 9. **解读最终报表成果文件** 结束运行阶段后记得查阅由 View Results Tree, Aggregate Report 等模块产生的汇总统计资料以便得出结论建议优化方向[^5]. --- #### 四、Python 中利用 pymeter 自动化 JMeter 测试 对于那些希望通过编程手段实现更深层次定制需求的朋友来说,“pymeter”库提供了一种便捷途径允许开发者直接从 Python 程序内部操控 JMeter 实例完成各项任务而无需依赖传统 GUI 方式交互界面. 下面给出一段简单示例演示如何借助该扩展包快速搭建基础框架: ```python from pymeter.api import TestPlanBuilder def create_test_plan(): builder = TestPlanBuilder() thread_group = builder.thread_group(num_threads=10, ramp_time=5) sampler = thread_group.http_sampler(domain="example.com", path="/api/test") # Add assertions and listeners as needed. sampler.assertion(response_field="status_code", expected_value="200") thread_group.listener("View Results in Table") return builder.build() if __name__ == "__main__": test_plan = create_test_plan() test_plan.run() ``` 上述代码展示了怎样构造包含单一线程组及对应 HTTP 请求样本的基本架构同时附带简单的成功判定依据还有便于调试查看原始通信日志等功能特性支持. --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值