jMeter 里 CSV Data Set Config Sharing Mode 的含义详解

系统工
• 阅读 1808

CSV Data Set Config in Sharing Mode - Made Easy

为了使性能测试更加真实,最好不要在每个线程组中使用相同的用户。因此,您需要一种方法来配置 Apache JMeter™ 以使用具有唯一用户数据的不同用户,并提出有关如何有效存储将在测试运行期间使用的用户数据的想法。

为此,JMeter 有一个非常有用的配置元素,称为 CSV 数据集配置。 “CSV 数据集配置”允许使用 CSV 文件作为外部数据源,您可以在其中保留唯一的用户数据,如姓名、电子邮件和密码。借助这个配置元素,JMeter 能够逐行读取 CSV 文件,然后使用拆分参数为不同的线程分配不同的值。

乍一看,所有“CSV 数据集配置”参数似乎都是不言自明的。但其中之一可能并不像您想象的那么简单。此参数为“共享模式”。这篇博文将解释您需要了解的有关此选项的所有信息。

Understanding the JMeter CSV Data Config Element

创建一个包含五个线程的 user group:
jMeter 里 CSV Data Set Config Sharing Mode 的含义详解

创建一个用户登录的 HTTP 请求:
jMeter 里 CSV Data Set Config Sharing Mode 的含义详解

您将看到“线程组”中的所有 5 个用户都使用相同的电子邮件和密码执行了登录。 发生这种情况是因为这些值是在请求采样器中硬编码的,并且它们与该线程组中的所有 5 个用户相关:

jMeter 里 CSV Data Set Config Sharing Mode 的含义详解

Multiple Users With Multiple Requests

但是如果你想在不同的用户下登录怎么办?要模拟真实的 Web 应用程序负载,您可能希望使用具有不同凭据的不同用户。为此,JMeter 具有“CSV 数据集配置”元素,旨在帮助解决此类情况。

此元素的主要思想是它逐行读取 CSV 文件并将其值提供给当前线程组的线程。有许多有用的文章和实践会议通过不同的示例解释了这个 JMeter 元素。

但首先,让我们创建一个简单的 CSV 文件,其中包含一个用户列表(每个用户在单独的一行),电子邮件和密码在每行之间用逗号分隔:

csv 文件的内容:

JMeterSharingModeUser1@example.com,123qwe
JMeterSharingModeUser2@example.com,234wer
JMeterSharingModeUser3@example.com,345ert
JMeterSharingModeUser4@example.com,456rty
JMeterSharingModeUser5@example.com,567tyu
JMeterSharingModeUser6@example.com,678yui
JMeterSharingModeUser7@example.com,789uio
JMeterSharingModeUser8@example.com,890ipo
JMeterSharingModeUser9@example.com,901opq
JMeterSharingModeUser10@example.com,012pqw

‘All threads’ Sharing Mode

让我们将“CSV 数据集配置”元素添加到我们的性能脚本中(右键单击“测试计划” -> 添加 -> 配置元素 -> CSV 数据集配置)。 在此元素中,您需要指定包含用户详细信息和变量名称的文件名,这些文件名将用作从文件中获取的这些值的容器。

请记住,有两个选项:您需要指定 CSV 文件的完整路径,或者您可以只使用文件名。 但在这种情况下,该文件应与 JMX 性能脚本位于同一文件夹中。 这次您将使用默认共享模式:所有线程。

jMeter 里 CSV Data Set Config Sharing Mode 的含义详解

重新运行我们的脚本后,您可以看到所有用户根据顺序和行号分别获取了电子邮件和密码:

  • 第一个用户使用了第一行的电子邮件和密码
  • 第二个使用了第二行的电子邮件和密码

jMeter 里 CSV Data Set Config Sharing Mode 的含义详解

jMeter 里 CSV Data Set Config Sharing Mode 的含义详解

“所有线程”共享模式意味着文件将在所有线程之间共享,并且每个请求将按顺序读取 CSV 文件中的一行。 这种方式是“CSV 数据集配置”的默认方式。 它看起来像这样:

jMeter 里 CSV Data Set Config Sharing Mode 的含义详解

‘Current thread’ Sharing Mode

当我们希望每个线程分别打开和读取 CSV 文件时,应使用“当前线程”共享模式。 在这种情况下,每个用户都会从头到尾读取 CSV 文件。 让我们将共享模式更改为“当前线程”值并验证性能脚本这次的行为。

jMeter 里 CSV Data Set Config Sharing Mode 的含义详解

jMeter 里 CSV Data Set Config Sharing Mode 的含义详解

jMeter 里 CSV Data Set Config Sharing Mode 的含义详解

如您所见,这次所有线程都尝试在同一用户下运行登录请求。 原因很简单。 由于每个线程从头到尾分别读取文件,我们线程组的所有 5 个线程都使用第一行的值执行登录请求。

目前,您在线程组中只配置了 1 个循环。 如果你想确保在下一个循环中每个线程都会读取第二行,让我们用“循环计数”中的“2”值更新我们的线程组。

jMeter 里 CSV Data Set Config Sharing Mode 的含义详解

由于您有 5 个线程和 2 个循环,因此总共应该有 10 个请求。 前 5 个请求应该在第一个用户(CSV 文件的第一行)下执行登录操作,而接下来的 5 个请求应该在第二个用户(CSV 文件的第二行)下执行登录操作。

让我们运行脚本并确认。 但在此之前,在当前线程组中添加一个“Constant Timer”可能会很有用。 由于您想显示两个循环使用来自 csv 文件的不同行,因此您需要避免第一个线程执行第一个循环并启动第二个循环而第二个线程刚刚开始第一个循环执行的情况。 在这种情况下,“查看结果树”侦听器中的请求将是混合的。 让我们为此添加一个 2 秒的超时时间(右键单击“测试组”-> 添加 -> 计时器 -> 恒定计时器)。

jMeter 里 CSV Data Set Config Sharing Mode 的含义详解

如您所见,前 5 个请求使用 CSV 文件的第一行,而后 5 个请求使用第二行。 它看起来像这样:

jMeter 里 CSV Data Set Config Sharing Mode 的含义详解

‘Current thread group’ Sharing Mode

在'Current thread group'共享模式下,每个文件由每个线程组单独打开(不要与每个线程单独读取文件的“当前线程”混淆。这基本上意味着每个线程组中的每个线程 从头到尾读取 CSV 文件,互不影响。

要实际展示这种共享模式,您需要再创建一个线程组。 您可以复制粘贴现有的并适当地重命名线程组和登录采样器。

jMeter 里 CSV Data Set Config Sharing Mode 的含义详解

把 sharing mode 改成:Current thread group

jMeter 里 CSV Data Set Config Sharing Mode 的含义详解

运行脚本后,可以发现每个线程组分别使用了CSV文件:

jMeter 里 CSV Data Set Config Sharing Mode 的含义详解

jMeter 里 CSV Data Set Config Sharing Mode 的含义详解

这个案例的工作流图看起来更复杂,但主要思想是这样的:
jMeter 里 CSV Data Set Config Sharing Mode 的含义详解

‘Edit’ Sharing Mode

这种共享模式通常会给很多 JMeter 用户带来很多困惑。 当您选择“共享模式”配置元素下的“编辑”选项时,此字段将转换为输入。 然后,您可以在此字段中提供您自己的字符串,而不是使用预定义的字符串。

这种共享模式的主要思想是您可以在多个线程组中使用同一个 CSV 文件,但只有指定的线程组才会在彼此之间共享该文件。 好像有点复杂吧? 让我们举一个例子来说明这一点。

首先,您需要添加一个额外的线程组(您可以按照我们在上一段中所做的相同方式复制粘贴),这次让我们将“CSV 数据集配置”元素复制粘贴到每个线程组下:

jMeter 里 CSV Data Set Config Sharing Mode 的含义详解

现在您需要以这种方式配置每个“CSV 数据集配置”:

线程组 1:“共享模式”=“SharedWithThreadGroup1and3”
线程组 2:“共享模式”=“所有线程”
线程组 3:“共享模式”=“SharedWithThreadGroup1and3”

“线程组 1”配置示例:

jMeter 里 CSV Data Set Config Sharing Mode 的含义详解

在这种情况下,第一个和第三个线程组的值应该相互匹配。 这样的配置告诉 JMeter 在两者之间共享一个 CSV 文件,而第二个线程组将使用它自己的 CSV 副本。 让我们再次运行脚本并再次验证正在进行的请求:

第一线程组:
jMeter 里 CSV Data Set Config Sharing Mode 的含义详解

第二线程组:
jMeter 里 CSV Data Set Config Sharing Mode 的含义详解

第三线程组:
jMeter 里 CSV Data Set Config Sharing Mode 的含义详解

如您所见,前两个线程组从头开始读取 CSV 文件并使用第一行,而第三个线程组则没有。 由于第三个线程组与第一个线程组具有相同的“共享模式”值,因此它继续从第一个线程组结束的行(提供的示例中的第一行)读取文件。

通过提供这种共享模式“CSV 数据集配置”元素,您可以非常灵活地以任何您想要的方式控制 CSV 文件共享。 这种当前模式可以这样形象化:
jMeter 里 CSV Data Set Config Sharing Mode 的含义详解

如您所见,“CSV 数据集配置”非常可配置并提供了极大的灵活性,因此您始终可以根据需要控制 CSV 文件的使用。

更多Jerry的原创文章,尽在:"汪子熙":
jMeter 里 CSV Data Set Config Sharing Mode 的含义详解

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Wesley13 Wesley13
3年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
美凌格栋栋酱 美凌格栋栋酱
4个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(