专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 JMeter参数化完整指南

JMeter参数化完整指南

更新时间:2021-11-04 09:21:46 来源:动力节点 浏览853次

参数化是创建变量的行为,这些变量将在负载测试脚本上授予我们许多不同的配置选项。例如:

在 Web 服务上使用不同凭据登录的变量

使用不同环境的变量(dev、master 等)

在电子商务网站中搜索产品列表的变量

难怪p arametrization是在一个主要方面性能测试的创建。现在我们将讨论使用JMeter进行参数化的不同方法。

1.使用外部文件的 JMeter 参数化

在JMeter 中,参数化性能脚本的常用方法之一是使用 CSV 文件。让我们使用我们之前解释的示例之一来看看这是如何工作的:使用不同的凭据登录。假设我们有一个适用于一个特定用户的登录请求:

我们可以轻松地参数化该请求并在不同用户之间运行它。我们可以看到我们需要两个变量来参数化这个脚本:用于存储电子邮件和密码。为此,我们需要提供一个 CSV 文件,其中包含在登录过程中使用的用户凭据列表。(或者,您可以使用BlazeData)。让我们创建一个 csv 文件,其中包含具有电子邮件和密码的不同用户:

现在创建了我们的 CSV 文件,让我们按照以下步骤将“CSV 数据集配置”元素添加到我们的脚本中:

右键单击线程组 -> 添加 -> 配置元素 -> CSV 数据集配置

“CSV 数据集配置”参数的简短说明:

Name -将在 JMeter 树中使用的元素名称。

文件名 -输入文件的名称。根据活动测试计划的路径解析相对文件名。还支持绝对文件名。

文件编码-输入文件的编码,如果它不是平台默认值。

变量名称 -将用作解析值容器的分隔变量名称列表。如果为空,文件的第一行将被解释为变量名列表。

忽略第一行 -如果您想忽略 CSV 文件的第一行(如果变量名存储在那里),则为 true。

Delimiter -将用于从输入文件中拆分解析值的分隔符。

允许引用数据吗?-如果您想忽略双引号并允许此类元素包含分隔符,则为 true。

在EOF上回收?-如果文件测试计划应该不止一次迭代文件,则为真。它将指示 JMeter 将光标移动到文件的开头。

在 EOF 上停止线程?-如果对 CSV 文件进行循环迭代,则为 false,如果您想在读取整个文件后停止线程,则为 true。

所有线程-文件在所有虚拟用户之间共享(默认)。

当前线程组-该文件将为每个线程组打开一次。

当前线程-每个文件将分别为每个线程打开。

编辑 -共享相同标识符的所有线程也共享相同的文件。

在我们的例子中,添加“文件名”(user-credentials.csv) 和“变量名”(userEmail,userPassword) 配置值就足够了,其余的保留默认设置。

我们必须采取的最后一步是使用我们的新变量对登录请求进行参数化。这可以通过用 CSV 数据集配置的“变量名称”配置字段中的适当变量替换初始值来完成,如下所示:

如果我们现在运行我们的测试脚本,JMeter 将用“user-credentials.csv”文件中的值替换这些变量。每个 JMeter 虚拟用户将从 csv 文件行之一接收凭据。

第一个和第二个用户的登录请求如下所示:

2.使用数据库的 JMeter 参数化

另一种参数化性能脚本的方法是使用数据库数据。JDBC 是一个应用程序编程接口,它定义了客户端如何访问数据库,我们将使用它来参数化我们的JMeter脚本。

首先,将相关的 JDBC 驱动程序下载到您的数据库中。例如,可以在此处找到mysql驱动程序。然后,您需要使用以下表单将 .jar 文件添加到测试计划中:

之后,使用“JDBC 连接配置”元素配置数据库连接。按照以下步骤添加:

右键线程组->添加->配置元素->JDBC连接配置

“JDBC 连接配置”参数:

Name -将显示在线程组树中的连接配置的名称。

变量名称 -将用作 db 连接的唯一标识符的名称(可以使用多个连接,每个连接都将绑定到不同的名称)。

Max Number of Connections -连接池中允许的最大连接数。在 0 的情况下,每个线程将获得自己的池,其中包含一个连接。

Max Wait (ms) -如果在数据库连接期间超过指定的超时,池会抛出错误。

逐出运行之间的时间 (ms) -从数据库池中逐出未使用连接的线程运行之间暂停的毫秒数。

自动提交 -是为相关数据库连接开启自动提交。

空闲时测试 -在检测到有效请求之前检查空闲连接。

Soft Min Evictable Idle Time(ms) -指定连接在可以被驱逐之前可能在数据库池中处于空闲状态的时间段

验证查询 -将用于验证数据库是否仍在响应的健康检查查询。

数据库 URL - 数据库的JDBC 连接字符串。

JDBC 驱动程序类 - 驱动程序类的适当名称(特定于每个数据库)。例如,MySql 数据库的“com.mysql.jdbc.Driver”。

用户名-数据库用户名。

密码 -数据库密码(将在测试计划中未加密存储)。

在我们的例子中,我们只需要设置必填字段:

绑定到池的变量名

数据库网址

JDBC 驱动程序类

用户名

密码

屏幕中的其余字段可以保留为默认值:

假设我们在数据库中存储了测试用户凭据:

现在配置数据库连接后,我们可以添加 JDBC 请求本身并使用其查询从数据库中获取所有凭据:

右键单击线程组 -> 添加 -> 示例 -> JDBC 请求

通过使用“Select Statement”查询和“Variable Names”,我们可以解析对自定义变量的响应。

我们现在将拥有可以在后续请求中进一步使用的 JMeter 变量。将使用增量后缀(userEmail_1、userEmail_2、userEmail_3.....)创建指定的变量。

要在“登录请求”中使用这些变量,我们需要添加一个计数器,用于从 JDBC 查询响应中访问正确的值。要在 JMeter 中添加“计数器”元素,请按照以下步骤操作:

右键单击线程组 -> 添加 -> 配置元素 -> 计数器

之后,我们可以使用“__V”函数更新“登录请求”。这将返回评估变量名称表达式的结果,并可用于评估嵌套的变量引用。它显示在这里:

指定的配置足以使用数据库值在不同用户之间运行脚本:

3.使用“参数化控制器”插件的 JMeter 参数化

如果您需要使用不同参数执行相同动作的重复序列,您还可以使用“参数化控制器”插件。该控制器允许我们配置一组变量,以便在添加到该控制器的每个步骤中使用。首先,您需要安装“参数化控制器”插件,因为它不包含在 JMeter 核心中。

让我们将“登录请求”移到单独的控制器中并禁用它(右键单击它并选择“禁用”)。这是在测试计划中包含模块容器的最可取的方法,同时也是为了保持它们的可引用性,以便它们可以被使用。

安装结束后,您可以添加两个“参数化控制器”控制器,这些控制器具有存储在变量中的不同用户凭据:

右键单击线程组 -> 添加 -> 逻辑控制器 -> 参数化控制器

参数化控制器包含“用户定义变量”部分,您可以在其中指定参数。将第一个用户的凭据放在第一个参数化控制器中,将第二个用户凭据放在第二个参数化控制器中。

现在我们需要在每个“参数化控制器”中添加对“可重用控制器”的引用。

我们可以通过添加一个“模块控制器”来做到这一点,该控制器将运行选定模块中的所有步骤。

在这种情况下,它将使用不同的参数调用“登录请求”。要创建“模块控制器”,请执行以下步骤:

右键单击“参数化控制器”->“添加”->“逻辑控制器”->“模块控制器”

运行脚本时,您将看到“登录请求”分别触发了每个参数化控制器。如果您需要跨输入参数的不同组合运行脚本,它会非常有用。

以上就是关于“JMeter参数化完整指南”的介绍,大家如果想了解更多相关知识,可以关注一下动力节点的JMeter教程,里面的内容更加详细,适合小白学习,希望对大家能够有所帮助。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>