共计 3175 个字符,预计需要花费 8 分钟才能阅读完成。
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 文件的应用。
更多 Jerry 的原创文章,尽在:” 汪子熙 ”: