根据条件仅将所需的数据行从 CSV 文件传递​​到 Jmeter

Passing only the required rows of data from CSV file to Jmeter based on a criteria

我有一个 csv 文件,其输入格式如下(第一行没有 headers):

India,QA,1200,
India,QA1,1201,
India,QA2,1202,
USA,Dev1,5580,
USA,Dev2,5580,
AUS,Dev3,3300,
AUS,Dev4,3301,

我已经配置了 CSV Data Set Config 组件并给出了相应的路径和变量名详细信息。下面的快照:

从命令行参数,我将调用 Jmeter jmeter.bat -t C:\Users\Dev\Desktop\JI\testscript.jmx -JCountry=India它还有一个名为 JCountry=India 的参数。

现在,我必须使用这个值 (India),然后搜索 csv 文件的第一列,如果它匹配,我只需要将与从 cmd 给定的国家/地区名称匹配的那些特定行发送到脚本。

我想过使用 If Controller 但我如何检查 csv 文件的第一行,当匹配时,将这些详细信息发送到脚本。

您需要遍历 CSV,请参阅 example or other examples。 作为第二个示例,在 while 条件中使用来自 CSV 的变量:${Country} .

在循环内你需要添加 If Controller 条件来比较国家变量与国家 属性:

 ${__jexl3("${__P{Country}" == "${Country}")}

Checking this and using __jexl3 or __groovy function in Condition is advised for performances

最简单的选择是动态生成仅包含 India 行的 CSV 文件

  1. setUp Thread Group 添加到您的测试计划
  2. Test Action 采样器添加到设置线程组(这样你就不会在 .jtl 文件中有额外的结果)
  3. 添加 JSR223 PreProcessor 作为测试动作采样​​器的子项
  4. 将以下代码放入"Script"区域:

    String country = props.get('Country')
    
    def originalCsvFile = new File('C:/Users/Dev/Desktop/JI/JVMDetails/Details.txt')
    def countryCsvFile = new File('C:/Users/Dev/Desktop/JI/JVMDetails/Country.txt')
    
    countryCsvFile.delete()
    
    originalCsvFile.eachLine {line ->
        if (line.startsWith(country)) {
            countryCsvFile << line
            countryCsvFile << System.getProperty('line.separator')
        }
    }
    
  5. 将您的 CSV 数据集配置配置为使用 C:\Users\Dev\Desktop\JI\JVMDetails\Country.txt,因为此文件将仅包含以您定义为 Country 属性[ 的内容开头的那些行=19=]

更多信息: