本系列内容直接以八股文,即问题的形式总结,面试所需内容

Apache JMeter?就是1、什么

一款开源的性能测试工具,擅长于就是ApacheJMeter模拟多用户并发访问,主要用于对服务器、网络服务或应用程序施加负载并进行性能测试

  • 多协议帮助:JMeter不仅帮助HTTP/HTTPS,还支撑FTP、SMTP、POP3、IMAP、数据库(利用JDBC)、LDAP等多种协议,具备广泛的测试适用性
  • 易于使用:JMeter拥有一个图形用户界面(GUI),可以方便地创建和运行测试计划,JMeter还支持命令行操作,允许与CI/CD管道集成
  • 扩展性强:支持通过插件扩展功能和协议,并能通过分布式测试模式,协调多台机器同时产生负载,轻松模拟大规模并发场景
  • 全面的报告和分析功能:JMeter许可生成各种类型的报告(折线图、饼图、表格等),直观展示性能指标(如响应时间、吞吐量),协助飞快定位系统瓶颈
  • 开源和社区支持:完全免费,并拥有活跃的社区,提供丰富的文档、教程、插件和解决方案,能有效降低学习和使用成本

2、JMeter 的工作原理是什么?

JMeter 的工作原理本质上是通过模拟大量虚拟用户并发行为,向被测试系统施加负载,并实时收集、聚合和展示性能数据 的过程

核心解析:
1、JMeter使用“线程组”(Thread Group)来代表虚拟用户,每个线程组包含多个虚拟用户(线程),这些线程会按照设定的时间间隔、并发量来发送实际请求

2、这些虚拟用户会根据预定义的测试计划发送HTTP请求、FTP请求、JDBC请求等多种请求类型,JMeter承受多种协议,如HTTP、HTTPS、FTP、JDBC、SOAP、REST等

3、JMeter允许收集服务器响应的数据,包括响应时间、吞吐量、并发用户数等,通过各种图表和报表的形式展示这些内容,援助分析系统表现

3、软件测试中,JMeter的作用以及优缺点是什么?

优点:

  • 开源且免费:完全免费,并且开源,帮助自定义开发
  • 易于应用:提供直观的图形化界面,便于快速创建和调试测试脚本
  • 多协议支持:支持 HTTP/HTTPS, FTP, JDBC, SOAP/REST, JMS 等多种协议,测试覆盖面广
  • 丰富的报表功能:可生成多样化的测试报告(如聚合报告、图形结果),便于进行结果分析
  • 可扩展性强:拥有丰富的插件生态,并能通过分布式测试模拟超高并发负载

缺点:

  • 高资源占用:在GUI模式下运行大规模测试时,其本身会消耗大量内存和CPU,可能影响测试准确性
  • 处理复杂逻辑能力有限:对于需要复杂编程逻辑或动态交互的测试场景,其内置元件可能不够灵活,需借助脚本
  • 学习曲线:尽管基础功能方便易用,但要充分发挥它的高级功能,需要一定的学习和实践时间
  • 分布式测试复杂:搭建和维护分布式测试环境需要一定的网络和系统配置知识

扩展知识:JMeter允许与Jenkins等持续集成/持续交付(CI/CD)工具集成,通过自动化测试,保证软件在不同阶段的质量。通过Maven或Gradle插件,还许可将JMeter脚本集成到构建流程中

JMeter的线程组?就是4、什么

JMeter测试计划中的一个基本元素,负责模拟用户请求,线程组决定了有多少个虚拟用户会并发地对目标服务器进行压力测试或负载测试。每个线程代表一个虚拟用户,可以配置线程数、启动时间和循环计数等参数,从而灵活地定义并发负载就是JMeter的线程组

常见调整项:

  • 线程数(Number ofThreads)):这个参数定义了虚拟用户的数量。例如,设置成100,表示100个虚拟用户会并发执行测试脚本
  • 设置线程数为100,Ramp-Up时间为100秒,那么每秒钟会启动一个线程就是Ramp-Up时间(Ramp-UpPeriod):这是线程组中的另一个重要参数,定义了启动所有线程所需要的时间。例如,要
  • 循环次数(LoopCount):这个参数定义了每个线程执行测试脚本的次数。如果设置为1,每个线程执行一次脚本,倘若设置为2,每个线程会执行两次

调度器配置:

  • JMeter提供了调度器作用,行更精细地控制线程组行为。例如,可以设置测试开始时间和结束时间,或者设置持续时间(Duration)和启动延迟(Startup Delay)

实际应用:

  • 通过性能测试:经过增加线程数和调节Ramp-Up时间,能够观察系统在特定负载下的响应时间和性能瓶颈
  • 压力测试:在设定的时间内逐步增加线程数,直到框架崩溃,以找出现有平台的承载极限

最佳实践:

  • 逐步增加负载:不要一次性设置大量线程,应通过设置合理的 Ramp-Up 时间,逐步增加线程数,监控服务器性能,并根据结果调整安装
  • 综合监测:在执行测试时,务必结合JMeter监听器和服务器端监控工具(如APM),进行综合分析
  • 真实模拟场景:线程组的配置应尽可能贴近生产环境的用户访问模式,从而使测试结果更具参考价值

除了主要的线程组,JMeter还提供了其他类型的线程组

并发用户组(ConcurrencyThreadGroup):更精确地控制并发用户数

阶梯式线程组(SteppingThreadGroup):以阶梯方式逐步增加负载,非常适合进行压力或尖峰测试,观察系统在负载逐步升高时的表现

5、JMeter中测试元件的执行顺序是什么?

在JMeter中,测试元件的执行顺序是按照特定的规则进行管理的,其核心顺序由元件的类型决定

核心执行顺序:

1、配备元件:这些元件在测试启动时初始化,它们在每个线程组开始时执行一次

2、前置处理器:用于在每个样本请求之前执行一些操作它们会在相关请求执行前运行

3、定时器:定时器可以让线程休眠一段时间,它们作用于最近的父级采样器或者最近的父级控制器中的所有采样器

4、取样器:这是实际发出请求的地方,它们会按照它们的顺序依次执行

5、后置处理器:这些元件在每个样本请求之后执行,用于处理请求的响应

6、断言:断言用于验证响应是否符合预期,它们在后置处理器之后运行

7、监听器:它们记录或者显示取样器的结果,用于查看测试执行的最终结果

(助记口诀:配前定时取后断监)

一个典型的工作流示例

配置元件( 从文件读取用户名和密码 ) -> 前置处理器(可能对密码进行加密 ) - >

定时器(让虚拟用户等待片刻 ) - >取样器(发送登录请求 )-> 后置处理器(从登录成功

的响应中提取access_token) ->断言否具备 "登录成功" 字样 ) ->就是( 检查响应中监听

(将本次请求的成功与否和响应时间记录下来) ->提取出的access_token被下一个请求的

置元件前置处理器设置到请求头中,开始新的循环

6、JMeter中的配置元件是什么?

JMeter中的配置元件是用于配置和供应运行时参数的元件。调整元件与测试计划中的其他组件配合采用,能够显著增强测试的灵活性和可管理性

主要配置元件:

CSV Data Set Config:从CSV文件读取数据,按行提供给线程,适用于模拟多种用户场景(如登录信息)

HTTP Request Defaults:设置HTTP请求的默认参数,避免重复调整,确保请求一致性

User Defined Variables:定义全局变量,可在测试计划任意处引用,用于安装全局参数或常量

Java Request Defaults:为Java请求提供默认配置,适用于需要通过Java代码模拟的请求操作

启用配置元件的优势:

  • 减少重复工作:可以在一个地方配置,在要求的地方复用,避免每次都进行重复配置
  • 提高灵活性:便捷调整测试参数,无需逐一修改各个请求
  • 增强可维护性:配置与请求分离,便于管理和维护

合理利用配置元件可显著提高JMeter测试效率,降低维护成本,特别是CSV Data Set Config,通过更换CSV文件即可轻松适应不同测试场景

7、JMeter中的预置处理器元件是什么?

在JMeter中,预置处理器元件(Pre-ProcessorElements)是一组可以在采样器执行之前执行的操作。预置处理器通常用来修改采样器请求的设置,或者为后续的请求设置测试环境

常用的预置处理器元件有:
HTTP URL 重写预处理器(HTTP URL Re-writing Modifier)

  • 功能:用于在HTTP请求中重写URL,例如在测试Web应用程序时,有时候必须在URL中加入会话ID,这时可以使用HTTP URL重写预处理器来自动处理该问题。
  • 应用场景:解决因无法依赖Cookie而需要使用URL重写机制来保持会话状态的Web应用测试问题

HTTP 用户参数(HTTP User Parameter)

  • 功能:在HTTP请求中动态地添加或覆盖参数,假设在一次测试中的某些请求需要不同的用户参数,可能运用该预处理器动态地替换这些参数
  • 应用场景:模拟不同用户在同一操作中使用不同数据输入的场景

定时器(Timer)

  • 作为单独的元件使用,但也可以作为预处理器就是通常
  • 功能:许可用来模拟用户行为之间的间隔时间,在发送请求之前执行,确保模拟用户操作的真实感

正则表达式用户参数(Regular Expression User Parameters)

  • 通过作为后置处理器使用,但也能够作为预处理器就是通常
  • 机制:用于从响应资料中提取信息并用作后续请求的参数,例如,可以采用正则表达式来提取一个动态变化的令牌,并在后续的请求中使用该令牌

用户定义的变量(User Defined Variables)

  • 通常是作为配备元件运用,但也允许作为预处理器
  • 功能:在测试开始时定义静态变量,变量行在整个测试计划中应用

(预置处理器的核心价值在于其在请求前的“动态处理”能力,而配置元件负责静态初始化,后置处理器负责响应后的内容提取)

什么?计时器的类型有哪些?就是8、JMeter中的计时器

用来在请求之间添加延时的组件通过模拟用户操作间隔或控制请求发送频率,避免所有请求在同一时间发送到服务器,使负载测试更贴近真实场景就是在JMete中,计时器

JMeter 中常见的计时器类型有:

固定定时器:设置固定的延迟时间,需要在每个请求之间有一个固定的间隔时间

高斯随机定时器:根据高斯分布(正态分布)添加随机延时,延时值围绕一个平均值

  • 适用场景:模拟用户的随机停顿,例如用户阅读网页内容或输入数据时

恒定吞吐量定时器:控制吞吐量,使请求以恒定的速率发出,要求维持特定请求速率的压力测试

统一随机定时器:在指定的最大值和最小值之间添加一个随机延时,用于模拟用户随机性的行为,但又有上下边界,例如购物网站中的不同行为间隔

服务时间定时器:模拟服务器的处理时间,具体时间可以根据实际测量值设定,必须考虑到服务器处理时间时,这样明确模拟客户端请求和服务器响应时间

同步定时器:阻塞线程直至达到指定数量,然后同时释放这些线程,进行并发用户测试,模拟多个用户同时点击一个按钮或执行一个运行

JSR223定时器:可以依据编写自定义代码或者运用JMeter插件实现,适用于具体业务需求或特殊测试场景无法通过内置的计时器达成时

9、JMeter的后置处理器是什么?

后置处理器是一个在处理请求后应用的组件,重要用于提取和处理服务器返回的响应数据,比如提取特定的响应部分、处理数据以供后续步骤使用等等

主要功能:

  • 提取数据:利用正则表达式、XPath、JSONPath等,从服务器返回的响应中提取所需内容
  • 变量设置:可以将提取出的材料存储到变量中,以便在后续的请求或其他元素中启用
  • 后期处理:对响应数据进行进一步加工和处理,例如解析JSON、XML等格式

常用类型:

  • 正则表达式提取器:使用正则表达式从响应中提取信息
  • JSON提取器:用JSON Path从JSON格式的响应中提取数据
  • XPath提取器:使用 XPath表达式从XML 或HTML 响应中提取材料
  • 边界提取器:使用固定的左右边界来提取响应中的部分数据
  • BeanShell PostProcessor:使用BeanShell脚本进行自定义后置操作

使用场景:

会话管理:提取登录接口返回的token/session ID,在后续请求头部中传递

数据关联:将前序响应中的数据传递到下一步操作中,实现数据传递与依赖

配置后置处理器的步骤:

选择一个HTTP请求或其他测试元素 --> 添加一个所需类型的后置处理器(例如"Regular Expression Extractor") --> 在后置处理器中配置相应的表达式、目标字段等参数,以便提取或处理响应数据

什么?就是10、JMeter 的正则表达式

基于Java正则表达式语法的模式匹配工具,核心用于从服务器响应中就是JMeter正则表达式提取动态数据实现测试数据关联的关键技术就是,

基本语法:JMeter的正则表达式遵循Java的正则表达式规则

  • . 匹配任意单个字符
  • * 匹配前面的字符零次或多次
  • +匹配前面的字符一次或多次
  • ?匹配前面的字符零次或一次
  • [ ]匹配括号内的任意一个字符
  • ^$分别用于字符串的开始和结束

使用场景

  • 提取响应数据:通过正则表达式提取器,可以从服务器响应中提取指定的内容
  • 验证响应:使用项目响应断言(ResponseAssertion)来验证响应内容是否含有特定的模式

位置描述:正则表达式主要配置在正则表达式提取器中,安装项包括:名称、正则表达式、模板、匹配编号、默认值等

示例:假设从服务器响应中需要提取一个叫sessionID的变量,出现在如下HTML代码中:

<input type="hidden" name="sessionID" value="abc123">
配置正则表达式为:<input type="hidden”name="sessionID" value="(.+?)">

在线工具:否正确就是为了便于调试和测试正则表达式,能够使用一些在线工具,比如Regex101,有助于验证正则表达式

优化建议:大规模数据提取时可能会影响性能

尽量减少使用贪婪匹配(尽量应用 .+? 而非 .*)和重复计算

11、如何在JMeter 中进行断言?

1、打开JMeter并加载测试计划
2、在测试计划中找到应该断言的请求节点
3、右键点击该请求节点,选择“添加(Add)"->“断言(Assertions)"
4、在出现的菜单中选择你需要的断言类型,例如“响应断言((Response Assertion)”、“响应时间断言(DurationAssertion)"等
5、部署断言参数,比如匹配内容、模式、响应时间等

响应断言:(最常用)
主要用来验证响应的内容是否符合预期,验证对象包括响应文本、响应代码(200,404)、响应头信息,匹配的规则为包含/匹配字符串,支持正则表达式,等于/不等于指定内容

(响应断言适用于便捷的文本内容验证)

JSON 断言:
专门验证JSON格式响应素材中的特定字段和值,可以精确地校验返回的数据结构和内容

XPath断言:
针对XML格式响应进行验证,使用XPath表达式来定位和检查文本内容

(优先选择专用断言(JSON/XPath)处理结构化数据)

JSR223 断言:
对于复杂的验证逻辑,允许应用自定义断言,通过脚本(如Groovy、BeanShell、JavaScript等)来进行复杂的校验

建议:性能敏感场景避免使用复杂正则表达式

12、JMeter 的监听器有哪些?

监听器是JMeter中用于收集、展示和保存测试结果的组件,支援用户实时监控和分析性能测试数据

常用的监听器包括:

查看结果树:用来查看每个请求的详细结果,包括请求和响应的具体内容,适用于调试测试脚本,但在高并发测试中,使用这个监听器会占用大量内存和资源,所以需要慎重

汇总报告:展示了测试的基本统计数据,比如样本数、平均响应时间、最大和最小响应时间、吞吐量以及错误率等,非常适用于生成测试的整体性能概况

聚合报告:类似于汇总报告,但特意用于将汇总内容以更加结构化的方式展示,同样献出了平均响应时间、90%线、95%线、99%线等关键指标,素材更全面,适合深度性能分析

图形结果:以图形化的方式展示测试结果,便于直观地观察趋势和性能变化,有益于观察某个系统的长时间性能测试

生成爬虫爬行记录:核心用于简短的汇总,适用于集成测试环境下迅速生成结果统计

后端监听器:允许将测试结果发送到后端数据库或者其他存储系统(例如Graphite、InfluxDB等),便于做进一步的数据分析和可视化

总结:

  • 调试阶段可使用"查看结果树"进行详细排查

  • 正式负载测试时应禁用资源消耗大的监听器

  • 推荐使用"聚合报告"或"汇总报告"进行性能分析

13、如何在JMeter 中测试 GET 请求接口?

新建测试计划 ->添加线程组 ->添加 Sampler ->配置HTTP请求 -> 添加监听器-> 执行测试

具体步骤:

1、打开JMeter,点击左上角的“文件(File)”莱单,选择“新建(New)”来创建一个新的测试计划(Test Plan)
2、右键点击测试计划,选择“添加(Add)”->“Threads(Users)”->“Thread Group”,添加线程组
3、设置线程属性,比如线程数(Number of Threads)、Ramp-Up Period (秒)和循环次数(Loop Count)
4、右键点击新建的线程组,选择“添加(Add)”->"Sampler”-"HTTP Request
5、在HTTP请求的配备窗口中,设置协议(通常为http或https),服务器名称或IP地址,端口号(如存在),路径(即GET请求的具体路径)
6、为了查看结果,可能为线程组添加一个监听器,比如右键点击线程组,选择“添加(Add)”->“Listener”->“ViewResults Tree"”
7、保存并运行测试计划,查看结果树中的响应数据

高级配置选项:

  • 用户定义变量:可以在测试计划中添加 “Config Element”->“User Defined Variables”,这样行在HTTP请求中的路径、参数等位置使用这些变量
  • 参数化与数据驱动:在接口测试中,如果需要测试多组数据,可以应用JMeter中的CsVDataSet Config配置元素,它可以从外部CSV文件中读取参数,提高测试灵活性
  • 断言:JMeter提供断言来确保接口返回的响应符合预期。若是需要验证GET请求的响应内容,可以添加一个响应断言(ResponseAssertion),可以在“HTTP请求”取样器上右键,选择“添加(Add)”-“断言(Assertions)”-“响应断言(JSON Assertion)”,来检查响应数据是否具备或等于某些预期的值

14、如何启用JMeter 进行POST 请求测试?

新建测试计划 ->添加线程组 ->添加 Sampler ->配置HTTP请求 ->设置请求参数 -> 添加监听器 -> 执行测试

具体步骤:

1、打开JMeter后,默认就有一个空的测试计划。如果没有,许可点击“文件”->“新建”来创建一个
2、右键点击“测试计划”,选择“添加”->“线程(Users))”-“线程组”。线程组代表模拟的用户数量和请求频率
要发出的POST请求就是3、右键点击“线程组”,选择“添加”->“Sampler”->“HTTP 请求”。这个HTTP请求
4、选择需要测试的类型(POST),然后在"Server Name or IP”中填写目标服务器地址,例如口“api.example.com”,在“Path”中填写具体的API路径,例“/login”
5、在“BodyData”选项卡中添加需要传递的POST请求参数,通常为键值对的格式,比如:usernare-admin&password-123456
6、右键点击“HTTP请求”,选择“添加”->“监听器”-“查看结果树”,有助于查看每个请求的完整响应,提高调试效率
7、确保所有的配置都正确后,点击工具栏上的绿色三角形按钮来运行测试,JMeter将发送请求并在监听器中显示结果,在“查看结果树”中可以看到请求的详细信息,如请求和响应数据、请求头等

高级使用同GET操作

  • 为了确保POST请求的结果是符合预期的,可以在“HTTP请求”取样器上右键,选择“添加”-“断言”-“响应断言”,来检查响应内容是否包含或等于某些预期的值
  • 假如发送的数据中有一些动态值或者从之前的请求中获取的值,可以用JMeter的内置函数,比如正则表达式提取器或者JSON提取器,来提取前一请求的响应中的值,并在后续请求的数据中启用该变量
  • 可以将JMeter测试脚本整合到CI/CD流水线中,如Jenkins等,进行持续集成和自动化测试

15、对于POST请求需要传递JSON 格式数据,如何在JMeter中实现?

在JMeter中发送需要传递JSON格式数据的POST请求,可以按照以下步骤进行:

新建测试计划 ->添加线程组 ->添加 Sampler ->配置HTTP请求 ->设置请求参数() -> 添加监听器 -> 执行测试

在配置HTTP请求后添加JSON数据的具体步骤:输送JSON数据、设置请求头

1、在同一个“HTTP请求”取样器中,往下滚动到“发送参数处”,勾选“HTTP请求主体内容”。然后,把要发送的JSON信息粘贴到文本框内

2、在“HTTP请求”取样器上右键,选择“添加”-“配置元件”->“HTTP Header管理器”。在"HTTP Header 管理器”中,添加一个新条目,名称为“Content-Type”,值为"application/json"

做完这些配置后,就能够成功在JMeter中采用POST请求发送JSON数据了

16、如何在JMeter中测试JSON数据格式的接口?

创建一个测试计划 ->添加一个线程组 ->添加HTTP请求采样器 ->配置HTTP请求采样器 ->配置HTTP Header Manager->添加响应断言 ->运行测试并查看结果

注意点:

POST请求,需要在"Body Data"中输入请求的JSON数据
json格式
{
"name": "John",
"age": 30
}

在HTTP请求中发送JSON内容时,得设定Content-Type为application/json

17、如何在JMeter 中测试 SOAP 请求?

按照以下步骤进行:

1、启动JMeter并创建一个新的测试计划
2、在测试计划中添加一个线程组,并设置线程数、循环次数等参数
3、在线程组中添加一个"SOAP/XML-RPC请求”采样器
4、设置"SOAP/XML-RPC请求”采样器的URL(即要测试的SOAP服务的地址)
5、在"SOAP/XML-RPC请求”采样器中添加SOAP请求的具体内容。可能将SOAP请求的XML数据粘贴到数据输入框中
6、配置“HTTP Header Manager",添加内容类型(Content-Type: text/xml;charset=UTF-8)
7、运行测试,查看结果

18、如何运用JMeter测试文件上传接口?

启用JMeter中的HTTP Request采样器来测试文件上传接口

具体步骤如下:
1、启动JMeter,并创建一个新的 Test Plan
2、在Test Plan下添加一个Thread Group 以模拟用户行为
3、在Thread Group下添加一个 HTTP Request 采样器
4、在HTTPRequest采样器中,设置所需的上传接口的URL和请求方法(通常是POST请求)
5、在 HTTP Request采样器的"Body Data"部分,选择 "Use multipart/form-data for POST" 复选框
6、点击“BodyData”部分的"Add"按钮,添加一个文件类型的元件,并选择要上传的文件
7、为了查看响应结果,可以添加一个监听器,例"View Results Tree"
8、点击运行按钮,开始测试文件上传接口

通过以上步骤,允许使用JMeter测试文档上传接口

注意:

  • 通过除了单次上传测试,还能够设置多个线程以及不同的调度策略,对文件上传接口进行压力测试,观察在高并发情况下接口的性能表现
  • 为了确保记录上传接口的正确性,可以添加断言组件,可以使用响应断言来验证接口返回的状态码和响应内容,确保文件上传操作成功

19、如何在JMeter 中添加 Header 信息?

在JMeter 中添加Header信息主导有两种方式,一种是通过HTTP Header Manager,另一种是直接在HTTP 请求中添加

1、运用 HTTP Header Manager
步骤:打开JMeter测试计划,在想要添加 Header 的 HTTP 请求下面右键,选择“添加”->“配置元件”->“HTTP Header Manager”,点击“添加”按钮,添加新的 Header 和相应的值

注意事项:

  • 适用于需要在多个请求中共享相同的Header情况,避免在每个请求中逐一添加Header 的麻烦
  • 许可配置多个头部信息项,比如content-Type、Authorization等
  • 可以在HTTP Header Manager中设置默认的Header,倘若请求中没有明确指定相关Header,则会使用该默认值

2、直接在HTTP 请求中添加
步骤:选择要添加 Header的 HTTP请求,在“HTTP请求”界面中,找到“头部信息”部分,点击“添加”按钮,填写关键字和值,添加需要的Header信息

注意事项:

  • 适用于仅需在特定的单个HTTP请求中添加特定Header的情况
  • 更加灵活,可以根据具体的请求需要设定不同的头部信息

扩展:

  • 可能使用JMeter的变量和函数效果动态地设置HTTP Header的值。例如,凭借User DefinedVariables 或者 CSV Data Set Config 动态读取值
  • 结合脚本:利用BeanShell PreProcessor、JSR223 PreProcessor等脚本组件,允许搭建更复杂的逻辑,比如根据条件动态添加或修改 Header

20、如何在JMeter 中添加 Cookie?

通常会使用CookieManager来管理整个测试计划中的Cookie

具体验证如下:
1、打开JMeter 测试计划
通过2、在HTTP 样本(Sample)下方添加 HTTP Cookie Manager,右键点击HTTP 样本,选择Add->Config Element->HTTP Cookie Manager3)在HTTP Cookie Manager 中添加自定义的 Cookie,在HTTP CookieManager 的界面中,能够点击Add按钮,手动添加应该的Cookie名称、值、域、路径等属性4)完成后,保存测试计划并运行

这样做后,HTTP请求列表中所有的请求将会自动携带添加的Cookie信息

Cookie与JMeter Cookie管理器

1. Cookie核心概念
Cookie是由服务器发送并存储在客户端的小型文本数据,用于会话状态保持(如登录信息)和个性化设置。浏览器在后续请求中自动携带对应Cookie,实现状态连续性

2. JMeter Cookie管理器

  • 自动管理:默认自动处理服务器Set-Cookie响应,并添加到后续请求中,精准模拟浏览器行为

  • 手动配置:支撑手动添加静态Cookie,满足特殊测试需求

  • 策略控制:提供"每次迭代清除Cookie"等选项,实现灵活的会话隔离

3. 配套管理组件
JMeter同时提供HTTP信息头管理器、缓存管理器等组件,共同构建完整的请求模拟解决方案

通过Cookie管理器,JMeter能够自动维护会话状态,显著提升测试脚本的真实性和自动化程度

21、如何在JMeter 中处理 HTTPS 证书?

JMeter提供了一个内置的证书管理机制,可能轻松地配置和管理HTTPS证书,使测试能够顺利进行并得到准确的信息

以下是关键步骤:确保JMeter能顺利处理HTTPS流量
1、生成JMeter CA 证书:启动JMeter 的 HTTP(S)测试脚本记录器,JMeter会自动生成一个用于捕获HTTPS 流量的CA 证书

2、将CA证书导入浏览器:将生成的证书(通常位于$METER_HOME/bin目录下,文件名为
ApacheJMeterTemporaryRootcA.crt)导入到用来执行测试的浏览器的受信任的根证书颁发机构存储区

3、配置JMeter HTTP请求:对于HTTPS请求,确保在测试计划的HTTP请求采样器中正确地设置了“协议”为https并准确设置目标服务器和端口

处理要点:

1)自签名证书:为了使用自签名证书,要求在JMeter中配置体系属性javax.net.ssl.truststorejavax.net.ssl.truststorePassword指向自签名证书的可信存储
2)证书链管理:使用keytool命令行工具管理多证书链,通过别名区分不同证书
3)TLsVersion&Protocols:通过https.default.protocolhttps.socket.protocols参数指定TLS版本和加密算法,安全性更高,确保使用合适的协议
通过一个常见问题,能够经过设置JMeter的系统参数或者在测试执行前检查并更新证书来避免问题的出现就是4)证书失效处理:当证书过期时,会影响测试结果,在自动化测试中

22、如何在JMeter中进行参数化?参数化类型有哪些?

模拟真实用户行为、提升测试灵活性和可重复性的一个重要途径。参数化可以通过以下几点实现:就是在JMeter中进行参数化,
CSVData Set Config:这是最常用的方式,适用于大量的数据参数化,例如用户名、密码列表,添加"CSVData Set Config”到测试计划,设置文件路径、变量名称、分隔符等,然后在JMeter中调用

User Defined Variables:适用于定义一些全局常量,例如API的baseURL,在Test Plan或某个线程组下添加“UserDefinedVariables”,然后在需的地方使用$[VAR_NAME)的格式引

Configuration Elements通过:例如设置HTTP请求的通用参数,如服务器地址、端口号等,添加例如口“HTTP Request Defaults",可以设置一些默认参数,这些值能够在子级的HTTP请求中自动引I用
函数和变量:使用JMeter内置函数,例如_Random0生成随机数,或者自定义函数:使用$[VarName}来引用已定义的变量

参数化补充要点:

参数化的优势:

  • 通过参数化,可以模拟各种不同的用户输入和行为
  • 通过一次性安装参数文档,可以重复使用相同的测试计划
  • 参数化使得脚本维护更容易,只需修改参数文件,不用更改测试脚本

验证方法:
否正确读取和替换就是首先,可以在CsVData Set Config中设置一个迭代数,看是否按预期读取参数,其次可利用DebugSampler来检查变量

维护技巧:

如果参数资料较大,可以分模块管理,例如不同的CSV材料存储不同类型的参数,利用配置管理工具(如Git)来管理参数文件的版本

23、在JMeter中怎么采用函数和变量?

通过配置元素、取样器和函数助手对话框来实现就是在JMeter中使用函数和变量,可以在测试脚本中实现动态的资料输入,增强测试的灵活性。主要的方法

变量的使用:
在JMeter中,可能应用用户定义的变量。变量的定义行通过添加“用户定义的变量”或者依据“CSVDataSetConfig”等配置元素来实现。在脚本中,使用${variableName的形式来引用变量

函数的使用:
JMeter给予了一系列内置函数,行在测试计划中应用。比如生成随机数、获取当前时间等。应用函数的方式是:_functionNare(parareters),并且可以通过函数助手对话框来查看和插入函数

24、假如下一个接口应该使用上一个接口返回的加密信息,如何在JMeter中提取?

在JMeter中,如果要求应用上一个接口返回的加密数据作为下一个接口的输入参数,可以通过“正则表达式提取器”来实现

具体步骤:

1、首先,在上一个接口的 HTTP 请求后添加一个“正则表达式提取器”(Regular Expression Extractor)

2、在“正则表达式提取器”中配置提取规则,包括:“引用名”(Reference Name)、“正则表达式”(RegularExpression)、“模板” (Template)、“匹配数字”(Match No.)和“默认值” (Default Value)

3、安装“引用名”,它是变量名,利用这个变量名我们可以在后续的请求中引用提取到的数据

4、在下一个接口的HTTP请求中,凭借使用${引用名}来调用提取到的数据

例如,上一个接口返回的数据是:("encryptedData":“abc123xyz"},我们必须提encryptedData通过的值,能够这样配置:

  • 引用名:encryptedData
  • 正则表达式:“encryptedData":\s*"([^"]+)"
  • 模板:1
  • 匹配数字:1
  • 默认值:NOT_FOUND

之后在下一个HTTP请求中使用${encryptedData]引用提取到的数据

25、如何在JMeter中跨线程组传输参数?

在JMeter中,跨线程组传输参数的一种有效方法是利用“网络变量”(Properties)JMeter的全局变量,任何线程组都可以访问和修改这些变量就是。网络变量

步骤如下:

通过1、在一个线程组中设置网络变量,能够使用JSR223 PreProcessor或者BeanShell PreProcessor 来设置网络变量:props.put("variableName","value")

2、在另一个线程组中获取网络变量,可以使用JSR223PreProcessor或者BeanShell PreProcessor从网络变量中获取值:String value = props.get("variableName")

26、JMeter测试结束后如何自动发送邮件?

要在JMeter测试完成后自动发送邮件,能够运用JMeter内置的SMTPSampler,此功能可以在测试结束时自动发送邮件

具体步骤如下:
1、在JMeter界面中,右键点击测试计划,选择“添加”-“监听器”->“查看结果树”。这一步是为了方便调试和查看测试结果
2、在同一测试计划中,右键点击测试计划,选择“添加”->"后置处理器”->"模式控制器”(Post Processor ->Mail ReaderSampler)
3、在测试计划中添加一个SMTPSampler,填写相关的邮件服务器配置,如SMTP服务器地址、用户名、密码、发件人和收件人等信息
通过4、确保能够连接到SMTP服务器,这通常需要网络访问权限和SMTP服务器的正确配置
5、最后,在目标侦听器中设置条件,让其在特定条件下发送邮件,如测试执行完毕时发送邮件


1、邮箱服务器配置和安全性:

企业邮箱及安全策略严格的邮箱服务需特殊配置,例如,Gmail的SMTP服务得开启“双因素认证”以及“低安全应用访问权限”。对于自动化测试中发邮件的时候,熟悉不同邮箱服务的配置要求是很有帮助的

2、自动化集成:
将JMeter和CI/CD工具链接起来,在Jenkins下,安装JMeter执行测试,然后使用Jenkins自带的邮件插件来发送测试结果,这样可能保证在每次代码更新之后,可以自动触发测试并及时收到反馈

3、JMeter 的脚本扩展:
如果需要更复杂的邮件逻辑,例如根据测试结果不同发送不同内容的邮件,可以考虑运用JMeter的脚本特性,如封装在JsR223Sampler中的Groovy或者Beanshell来写自定义逻辑,这样可以灵活地处理测试结果,甚至整合到整个测试框架中

27、如何在JMeter中处理要求加密的请求参数?

在JMeter中处理需要加密的请求参数,通常会使用JSR223Sampler或者JSR223PreProcessor来编写自定义的Groovy脚本,加密请求参数。在这个过程中,需要先把请求参数传递给脚本,然后利用Groovy编写相应的加密逻辑,最后将加密后的参数传递给HTTP请求

具体步骤如下:
1、添加一个HTTP Request元件,部署好目标URL和请求方法
2、在HTTP Request元件的子元素中,添加“JSR223 PreProcessor”并选择语言为“Groovy”
3、在JSR223 PreProcessor中编写Groovy脚本来处理加密逻辑
4、在HTTP Request 中应用$[variableName}引用加密后的参数

通过例如,假设我们需要对请求中的某个参数进行Base64编码,能够在JSR223PreProcessor中这样编写:

import org.apache.commons.codec.binary.Base64

// 获取原始参数
def originalParameter = vars.get("originalParameter")
// 对参数进行 Base64 编码
def encodedParameter = Base64.encodeBase64String(originalParameter.bytes)
// 将编码后的参数设置为 JMeter 变量
vars.put("encodedParameter", encodedParameter)

28、软件测试中,如何在JMeter中捕获身份验证窗口的脚本?

在JMeter中捕获身份验证窗口的脚本主要使用的是“HTTP AuthorizationManager”。这个组件可以处理需要身份验证的请求

具体步骤:

1、开始,在JMeter中打开测试计划
2、在线程组(Thread Group)下添加一个"HTTP Authorization Manager":右键点击线程组->添加->配置元件 -> HTTP Authorization Manager
3、在"HTTP AuthorizationManager”中,添加身份验证的用户名和密码:输入需访问的域(Domain)和路径(Path),然后输入用户名和密码
通过4、如果需要,请确保启用了HTTPS,否则能够通过修改HTTP Request Defaults 来供应默认的协议信息

这个“HTTP Authorization Manager”会在JMeter试图访问需要身份验证的页面时自动提供认证信息

  • 除了基本的HTTPBasic身份验证,有时可能还会遇到BearerToken认证或者OAuth认证,这种情况下,可能需要使用“HTTP HeaderManager”来附加认证头信息,或者编写自定义的Java Sampler来处理更繁琐的认证流程


如果网络请求是经过JavaScript在客户端生成的艰难身份验证(例如动态Token生成),可能应该更加复杂的脚本或者使用Selenium之类的器具进行自动化模拟

29、软件测试中,如何减少JMeter中的资源请求?

减少资源请求主要许可经过两个办法实现:

  • 禁用JMeter 的默认资源请求
  • 精简测试计划中的请求,排除掉不必要的资源

禁用JMeter 的默认资源请求:打开JMeter测试计划,找到 HTTP 请求的采样器,在右侧的"HTTP Request"配置界面中,将"Use asMonitor"选项取消勾选,这会避免JMeter自动发送一些多余的请求

精简测试计划中的请求:仔细检查测试计划,移除那些不会影响测试结果的资源请求,比如图片、样式表、JavaScript文件等静态资源,经过决定只测试特定的HTTP请求路径,而非整个页面加载过程


1、采用正则表达式过滤器:使用正则表达式提取器精准捕获目标资源,利用配置"Response Field to check"字段过滤无关内容

2、集成第三方插件:通过使用“JMeterPluginsManager”下载和安装“DummySampler”插件,能够模拟一些请求,而不用实际访问服务器资源

3、脚本化请求逻辑:依据Beanshell/Groovy等脚本语言动态生成请求,实现精细化的测试逻辑控制,消除冗余请求

4、缓存和池化策略:通过配置缓存和连接池策略,减少对服务器的重复请求,例如,在HTTP请求采样器的"Advanced每次都重新请求就是”选项卡中,利用“Use Cache-Control/Expires Header”选项,可以让JMeter缓存静态资源,而不

30、如何在JMeter 中执行尖峰测试(Spike Testing)?

尖峰测试是一种性能测试方法,专门模拟系统在极短时间内遭遇突发性、超高负载的场景,旨在检验系统对流量骤增的应对能力和恢复能力

在JMeter中执行尖峰测试,需要进行以下几个步骤:
1、起初,打开JMeter,创建一个新的测试计划,在测试计划中添加一个线程组
配置合理的用户负载突增情况。例如,可以设置一个较低的初始用户数,然后在某个时间点突然增加大量用户,模拟尖峰情形就是2、在线程组中设置用户数量、启动时间和测试持续时间等参数。为尖峰测试,关键
3、在线程组下添加需要测试的HTTP请求或者其他类型的请求,确保这些请求能够代表在实际情况中可能面对的用户行为
通过4、为了解测试结果,在测试计划中添加合适的监听器,如“查看结果树“、“聚合报告”等。这样能够记录和分析性能测试的结果
5、配置好以上步骤后,便可运行尖峰测试,观察JMeter中各监听器中的信息和图表,分析应用在突增流量下的响应时间、错误率等性能指标

扩展:

  • 尖峰测试的重要性:尖峰测试主导用于模拟突然的高负载,测试系统在极端条件下的表现。这对于识别系统瓶颈,确保系统能够在高负载和突发流量情况下正常运行
  • 线程组的阶梯配置:在JMeter中,能够采用定时器(Timer)和定时触发器(Scheduler)来实现不同时间点增加负载,如使用步进线程组插件,允许配置更多复杂的负载测试场景
  • 资源的监控:在进行尖峰测试时,不仅需要关注JMeter产生的测试结果,还应该监控服务器端资源使用情况,如CPU、内存、网络带宽等。使用工具如NewRelic、GrafanaPrometheus可以监控和记录数据

31、如何运用JMeter进行性能测试?

1、下载并安装JMeter:行从JMeter官方网站下载,并解压后直接运行jmeter.bat或者jmeter.sh启动

所有测试对象的容器就是2、创建测试计划:启动JMeter后,首先创建一个"Test Plan”(测试计划)节点,测试计划

3、添加线程组:在测试计划下添加一个“ThreadGroup”(线程组),线程组用于定义用户的行为,可以设定线程数、Ramp-Up时间(启动时间)和循环次数

4、添加采样器:在线程组下添加一个'Sampler”(采样器),通常会选择HTTP Request(HTTP请求)来模拟用户的具体操作,比如访问网页,提交表单等

5、设置采样器:设置HTTP请求的细节,比如URL、请求方法(GET/POST)、参数等

6、添加监听器:为了查看测试结果,需要在线程组或采样器下添加一个"Listener”(监听器),常用的如“ViewResultsTree"(结果树)和"Summary Report”(汇总报告)

7、执行测试:设置搞定后,点击绿色的播放按钮运行测试,然后切换到监听器查看测试结果,许可看到响应时间、吞吐量、错误率等关键性能指标

32、JMeter为性能测试给予了哪些好处?

1、开源和免费:JMeter是Apache软件基金会的一部分,完全开源且免费,这大大降低了测试成本

2、广泛的协议协助:JMeter协助多种协议,包括HTTP、HTTPS、SOAP、JDBC、LDAP等,几乎涵盖了所有常见的性能测试需求

3、易于使用:JMeter的图形用户界面(GUI)轻松直观,方便测试人员迅速上手,减少了学习曲线

4、扩展性强:JMeter提供插件机制,允许根据具体需要安装各种插件,进一步增强其功能

5、分布式测试:JMeter支持分布式测试,可通过集群环境实现大量用户的并发测试

6、灵活的测试报告:JMeter能够生成详细的测试报告和图表,帮助测试人员分析性能指标