写点什么

JMeter 变量与引用:提升性能测试的灵活性

  • 2024-12-06
    北京
  • 本文字数:2217 字

    阅读完需:约 7 分钟

全面解析软件测试开发:人工智能测试、自动化测试、性能测试、测试左移、测试右移到DevOps如何驱动持续交付 

在使用 JMeter 进行性能测试时,测试脚本的灵活性和可扩展性非常重要。JMeter 提供了变量与引用功能,帮助测试人员实现动态数据处理、参数化配置和数据驱动测试。这些功能能够显著提升测试脚本的复用性和适应性。本文将深入介绍 JMeter 中变量的定义、作用范围及其引用方法,并通过实例说明其应用场景。

1. 什么是 JMeter 变量?

JMeter 变量是存储在内存中的动态数据项,可以在测试脚本中被引用和使用。变量的主要用途包括:

  • 动态参数化:通过变量生成动态请求数据,例如用户名、密码、会话 ID 等。

  • 数据驱动测试:结合 CSV 数据文件或其他数据源,使用变量替换测试数据。

  • 测试灵活性:通过变量实现脚本可配置化,避免硬编码。

2. 变量的定义方式

在 JMeter 中,变量可以通过以下方式定义:

2.1 通过 Test Plan 定义全局变量

JMeter 的 Test Plan 提供了 User Defined Variables(用户自定义变量),用于定义全局变量。

操作步骤:

  1. 在 Test Plan 上右键,选择 Add > Config Element > User Defined Variables

  2. 添加变量名和对应的值。

示例:

  • 变量名:base_url

  • 值:https://api.example.com

在脚本中可以通过 ${base_url} 引用该变量。

2.2 通过 CSV 数据文件定义变量

使用 CSV Data Set Config 配置文件,可以从外部文件导入变量,支持数据驱动测试。

操作步骤:

  1. 在线程组中右键,选择 Add > Config Element > CSV Data Set Config

  2. 配置以下参数:

  • File Name:CSV 文件路径

  • Variable Names:CSV 文件中的列名(与 CSV 文件列的顺序匹配)。

  • Delimiter:列分隔符,默认是逗号 ,

示例:假设 data.csv 文件内容如下:

username,passworduser1,pass1user2,pass2
复制代码

设置 Variable Names 为 username,password 后,可以在脚本中通过 ${username} 和 ${password} 引用相应的值。

2.3 通过函数定义变量

JMeter 提供了一系列内置函数,允许动态生成变量值,例如随机数、时间戳等。

示例:

  • 生成随机数:${__Random(1,100,varName)}


    其中 varName 是生成的随机数变量的名称。

  • 获取当前时间:${__time(yyyy-MM-dd HH:mm:ss)}

通过函数创建的变量可以直接在测试脚本中引用。

2.4 通过脚本动态赋值

在 JMeter 的 BeanShell PreProcessor 或 JSR223 PreProcessor 中,可以通过代码动态设置变量。

示例:

vars.put("dynamicVar", "Hello, JMeter!");
复制代码

上述代码将变量 dynamicVar 设置为 Hello, JMeter!,可通过 ${dynamicVar} 引用。

3. 引用 JMeter 变量

在 JMeter 中,变量通过 ${变量名} 的形式引用。以下是常见的引用场景:

3.1 HTTP 请求参数

在 HTTP 请求的 URL 或参数中使用变量,可以实现动态参数化。

示例:

  • URL:${base_url}/users

  • 参数:username=${username}&password=${password}

3.2 请求头

通过 HTTP Header Manager 引用变量

示例:

  • Header 名称:Authorization

  • 值:Bearer ${token}

3.3 脚本和表达式

在 BeanShell、JSR223 脚本或正则表达式提取器中,可以通过代码或表达式引用变量。

示例:

String value = vars.get("username");
复制代码

4. 常用变量提取与处理

4.1 正则表达式提取器

正则表达式提取器(Regular Expression Extractor)用于从响应中提取数据并存储为变量。

示例:

  • 假设响应内容:{"token":"abc123"}

  • 提取器配置:Field to Check:Response BodyRegular Expression"token":"(.+?)"Template$1$Variable Nametoken

通过此配置,可以将提取到的 abc123 存储为变量 ${token}

4.2 JSON 提取器

JSON 提取器(JSON Extractor)用于从 JSON 响应中提取数据。

示例:

  • 假设响应内容:{"data":{"id":101,"name":"John"}}

  • 提取器配置:JSON Path Expression$.data.idVariable NameuserId

通过此配置,可以将提取到的 101 存储为变量 ${userId}

5. 变量的作用范围

JMeter 变量的作用范围取决于定义方式:

  • 全局变量:通过 User Defined Variables 或 Test Plan 定义的变量在整个测试计划中均可用。

  • 局部变量:通过 PreProcessor 或 PostProcessor 动态创建的变量仅在当前线程和当前请求中可用。

  • 数据文件变量:通过 CSV Data Set Config 导入的变量通常只在当前线程中有效。

6. 实战案例:模拟用户登录

以下是一个使用 JMeter 变量实现动态用户登录的完整案例。

测试步骤:

  1. 导入用户数据

  • 使用 CSV Data Set Config 导入用户数据,文件内容如下:

username,passworduser1,pass1user2,pass2
复制代码
  1. 发送登录请求

  • 使用 HTTP Request 元素,设置 URL 为:http://example.com/login

  • 参数:username=${username}password=${password}

  • 提取会话 Token

  • 使用 JSON Extractor 提取响应中的会话 Token:JSON Path:$.tokenVariable Name:sessionToken

  • 后续请求

  • 在后续请求中,通过 Header Manager 使用 ${sessionToken} 作为认证信息。

7. 常见问题与解决方法

  • 变量未被正确替换: 确保变量名拼写正确,变量的作用范围在当前线程中有效。

  • CSV 数据重复读取: 检查 CSV Data Set Config 的 Recycle on EOF 和 Stop thread on EOF 配置。

  • JSON 提取失败: 验证 JSON Path 表达式是否正确,确保响应内容格式符合预期。

总结

JMeter 变量与引用功能极大地增强了测试脚本的灵活性和可复用性。从简单的全局变量到复杂的数据驱动测试,变量在性能测试中扮演了关键角色。通过合理使用变量,测试人员可以轻松实现动态参数化、高效数据管理以及灵活的测试场景模拟,从而提升测试效率和结果的准确性。


用户头像

社区:ceshiren.com 微信:ceshiren2023 2022-08-29 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料、实事更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬

评论

发布
暂无评论
JMeter 变量与引用:提升性能测试的灵活性_测试_测吧(北京)科技有限公司_InfoQ写作社区