根据条件仅将所需的数据行从 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 文件
- 将 setUp Thread Group 添加到您的测试计划
- 将 Test Action 采样器添加到设置线程组(这样你就不会在 .jtl 文件中有额外的结果)
- 添加 JSR223 PreProcessor 作为测试动作采样器的子项
将以下代码放入"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')
}
}
将您的 CSV 数据集配置配置为使用 C:\Users\Dev\Desktop\JI\JVMDetails\Country.txt
,因为此文件将仅包含以您定义为 Country
属性[ 的内容开头的那些行=19=]
更多信息:
我有一个 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 文件
- 将 setUp Thread Group 添加到您的测试计划
- 将 Test Action 采样器添加到设置线程组(这样你就不会在 .jtl 文件中有额外的结果)
- 添加 JSR223 PreProcessor 作为测试动作采样器的子项
将以下代码放入"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') } }
将您的 CSV 数据集配置配置为使用
C:\Users\Dev\Desktop\JI\JVMDetails\Country.txt
,因为此文件将仅包含以您定义为Country
属性[ 的内容开头的那些行=19=]
更多信息: