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

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:

创建一个用户登录的 HTTP 请求:

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

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 性能脚本位于同一文件夹中。 这次您将使用默认共享模式:所有线程。

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

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

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

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

'Current thread’ Sharing Mode

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

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

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

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

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

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

'Current thread group’ Sharing Mode

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

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

把 sharing mode 改成:Current thread group

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

这个案例的工作流图看起来更复杂,但主要思想是这样的:

'Edit’ Sharing Mode

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

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

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

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

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

“线程组 1”配置示例:

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

第一线程组:

第二线程组:

第三线程组:

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

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

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

(0)

相关推荐

  • Python 爬虫,推荐一款简单的抓包工具(续)

    Python 爬虫,推荐一款简单的抓包工具(续)

  • 干货 | Jmeter 如何保证抢购、秒杀活动正常运行?

    干货 | Jmeter 如何保证抢购、秒杀活动正常运行?

  • 接口测试常见问题

    接口测试需要考虑的点/如何设计接口测试的用例? 接口测试用例编写除了使用功能测试中最基本的等价类,边界值,因果图,错误推测,场景设计等方法外,还要考虑一些其他方面,首先我们要先进行冒烟测试,说白了就是 ...

  • 性能测试总结

    一.概念了解 1. 性能测试的维度和类型 编号 类型 概念 标准 举例 1 基准测试 给系统施加较低压力,查看系统运行状况并记录相关数据作为基础参考 10%~20% 软件最多只给100个人使用,先用1 ...

  • TestOps性能测试学习之第八天

    跟着芒果一起好好学习,天天向上~ 上周六是我们TestOps性能进阶课程第八天--性能测试实战的学习.这一天的课程是由测试行业的大牛叶微微老师为我们带来的,必须是干货满满.老师教大家一起学习企业级的性 ...

  • 干嘛生气,多傻呀!(写的真好)

    JMeter是Java技术栈工具,在软件测试领域应用非常广泛,无论是性能测试还是接口测试,技术都很成熟和稳定.它有一个突出特点:开源,适合做二次开发,以阿里为代表的Java技术栈公司都对它青睐有加.在 ...

  • jmeter压测学习16-setUp线程组批量登录

    前言 前面一篇已经实现了在 setUp 线程组实现单个用户先登录后提取token给其它线程组使用,在压测的时候,单个用户登录很显然不能满足我们的压测需求. 我们在压测接口的时候,需批量获取多个用户登录 ...

  • 远山无皴,远树无枝,山水国画里中景,远景的树丛及山石画法详解

    远山无皴,远树无枝,山水国画里中景,远景的树丛及山石画法详解

  • 风水知识 | 阳宅风水学里的三煞山,三煞山详解

    一.三煞山 在阳宅学里的三煞山,是指年命的三煞,与一般所称之冲煞,曜杀.等不同.即每年出生之人,有三个属于地支的坐山,是不可以为坐山的.煞者,即有杀,恐破财或损人.其严重程度,需视该屋宅宅体与宅气,及 ...

  • 阳宅风水学里的三煞山,三煞山详解!

    一.三煞山 在阳宅学里的三煞山,是指年命的三煞,与一般所称之冲煞,曜杀.等不同.即每年出生之人,有三个属于地支的坐山,是不可以为坐山的.煞者,即有杀,恐破财或损人.其严重程度,需视该屋宅宅体与宅气,及 ...

  • 古典身韵里的“双晃手”与“小五花”,视频详解马上学会!

    古典身韵 编舞:田兴美  蒲亚男 舞者:田兴美  蒲亚男 旗袍,体现中国女性之美:古典舞,跳尽中华典雅之情.二者的结合,仿佛跨越时代,又铸造经典,让人无不为之动然. 如果说古典舞大多是柔情,那么这支古 ...

  • PS如何在复杂的背景里抠树木 PS通道抠复杂树枝步骤详解

    PS如何扣树枝?photoshop怎么抠树?PS通道如何抠复杂树枝?PS怎么将树叶扣取出来?PS怎么抠树的缝隙?photoshop如何把树枝去除如何把怎杂的树木抠图出来?PS中怎样抠树枝的方法用于PS ...

  • 佳能g16说明书里的【参数详解】

    导语 :说到佳能g16,相信喜欢相机的朋友应该听说过它吧.它是佳能公司2013年推出的一款中低端数码相机,在上一代数码相机的基础上采用了最新的digic6影像处理系统,使得该型号相机的处理性能大幅度提 ...

  • 中国山水画里水的表现技法详解

    留白法就是以纸的白地代替水,这是中国画独特的表现方式.它通过画山壁.水中石头等,把水衬托出来.虽不画水,却更具有水的清澈明亮,这是以虚代实,高度洗练的手法. 张大千 <秋江泛舟> 步骤1. ...

  • 玄空风水“山上龙神不下水,水里龙神不上山”详解

    上山下水与收山出煞是玄空理气中的扼要法门,"山上龙神不下水,水里龙神不上山",此语是吉凶之枢纽,祸福之关键.山主人丁,水主财,龙神的得与失至关重要.如若颠倒则损丁破财,为祸百端,所 ...

  • 语文,文言文300实词详解,不积跬步无以至千里!

    在高考中,文言文会考三道选择题,一道主观题.分值占比19分,选择题每题3分,翻译题10分.主要考查同学们的断句.文学文化常识.文章内容理解以及翻译语句. 文言文的学习,一定要在积累的基础上再多寻找解题 ...