【问题标题】:JMeter : How to read particular row data in csv file based on a column value and pass value of that column to a sampler?JMeter:如何根据列值读取 csv 文件中的特定行数据并将该列的值传递给采样器?
【发布时间】:2020-04-19 13:24:24
【问题描述】:

我是 Jmeter 的新手,正在做 POC 来对 Web 应用程序进行负载测试。

我要做什么:
我总共有 4 个用户登录名(外科医生)。每个登录名都与“n”个患者相关联。
我创建了 2 个 CSV 文件
1. 具有外科医生用户登录名和密码的一项
2. 另一个 CSV 文件,其中包含与该患者关联的 PatientName、PatientID 和 Surgeon,如下所示。

患者姓名、患者 ID、登录名
Pa1,PID1,user1
Pa2,PID2,user1
Pa3,PID3,user1
Pa4,PID4,user1
Pa5,PID5,user2
Pa6,PID6,user2
Pa7,PID7,user3
Pa8,PID8,user4

我的场景:

  1. 以用户身份登录。
  2. 根据关联导航到每个患者仪表板。
  3. 退出应用程序。

我的测试计划

线程组(4 个用户,加速时间为 1 秒,1 个循环) -csv1(带用户名、密码)
-登录页面并导航到主页 - 运行时控制器(维持一段时间的负载)
-- While Loop(在外科医生/用户登录的患者仪表板之间循环) ---CSV2(数据如上图) ----导航到仪表板
----导航到主
- 退出应用程序

我想要达到的目标:

我想使用单线程组并为所有 4 个用户同时运行它。在这个过程中,一旦用户登录,用户应该只从 CSV 中关联的那些患者数据。
例如: 当 Thread1 以 User1 登录运行时,他应该只能循环通过 Pa1、Pa2、Pa3、Pa4 用户 当 thread2 以 User2 登录运行时,用户应该只读取 Pa5、Pa6 数据。

像这样,每个用户登录都应该只根据上面提到的关联选择那些用户。
有什么办法,我可以使用这个单一的 CSV2 文件来完成这个任务吗?这样我就不必使用 n 个 CSV 文件创建 n 个登录数的线程,每个 CSV 文件都包含特定于用户登录的数据。

【问题讨论】:

    标签: csv jmeter performance-testing


    【解决方案1】:

    根据JMeter Test Elements Execution Order

    0。配置元素

    1. 预处理器

    2. 定时器

    3. 采样器

    4. 后处理器(除非 SampleResult 为空)

    5. 断言(除非 SampleResult 为空)

    6. 监听器(除非 SampleResult 为空)

    作为Configuration Element CSV 数据集配置会先初始化一次,然后再进行任何其他操作,因此您将无法在第二个 CSV 数据集配置中使用来自第一个 CSV 数据集配置的当前变量。

    解决方案是改用__CSVRead() function,JMeter 函数在它们出现在测试计划中的位置进行评估,因此您可以在那里使用任何硬编码值或 JMeter 变量或其他函数。

    更多信息:How to Pick Different CSV Files at JMeter Runtime

    【讨论】:

    • 我尝试使用 __CSVRead() 函数,但是这里的限制是,我们仍然不能只使用单个 csv 文件,我可以按照示例中显示的方式将所有患者数据组合在一起。目前,我通过为所有外科医生创建单独的 CSV 文件以及相应的患者数据并使用登录名保存它们,然后创建用户参数并使用 CSVRead(${username}.csv 以便相应文件将被加载,并将根据刚刚登录的用户选择值。但我仍然需要一些帮助来解决实际问题。
    【解决方案2】:
    1. CSV Data Set Config for Surgeon credentials (loginNameSurgeon & Password)
    2. Login Request (take first surgeon credentials from CSV) 
    3. While ${__jexl3("${loginNameSurgeon}" != "${loginName}")} 
        a. CSV Data Set Config for patient data w.r.t surgeons (PatientName,PatientId,loginName)
        b. If Controller - ${__jexl3("${loginName}" != "<EOF>")}  // to check if we have any more loginName left
        c. Dashboard request
        d. Debug Sampler // Just to validate if the variables are in place.
    4. Logout request   
    

    【讨论】:

    • 仍然,登录仍将运行整个第二个 csv 文件,而不会在“Pa4,PID4,user1”用户记录处停止。这意味着,即使认为是采样器,采样器也会继续选择 PID5,PID6与 User1 无关。我的要求是,当一个 trasaction 控制器和 while 控制器一起使用时,我希望 user1 遍历 CSV 从 pa1 到 pa4 然后回到 pa1 并再次开始循环。
    猜你喜欢
    • 2022-09-23
    • 2019-02-25
    • 1970-01-01
    • 2019-12-28
    • 1970-01-01
    • 1970-01-01
    • 2020-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多