使用 Jmeter 从 csv 文件创建包含多个项目的 xml 列表(在一个 -SOAP/XML 消息中)



我在线程组中使用 jmeter -SOAP/XML-RPC(从 csv 文件中读取多行) 我正在使用 2 个不同的 CSV 文件(例如:A、B)。

SOAP 包含 XML 内部有列表(<person list>),我需要这个列表包含多个实例,但它只创建一个实例(<person list>中的<person>个)。

我希望它创建多个实例,

即对于文件 A 中的每一行,它应该从文件 B 中读取包含相同<group_id>

的几行(两个文件都包含"group_id"-显然具有不同的名称:group_id_a、group_id_b),(文件 B 中具有相同group_id_b的行按顺序排列)。

SOAP 中的 xml 示例:

<group_name>${group_name_a}</group_name>
<group_id>${group_id_a}</group_id>
<person_list>
<person>
<name>${name_b}</name>
<age>${age_b}</age>
<city>${city_b}</city>
</person>
</person_list>

即,我需要结果是这样的:

<group_name>"math"</group_name>
<group_id>1234</group_id>
<person_list>
<person>
<name>phil</name>
<age>23</age>
<city>buenos aires{city_b}</city>
</person>
<person>
<name>liam</name>
<age>21</age>
<city>madrid{city_b}</city>
</person>
<person>
<name>brenda</name>
<age>25</age>
<city>bariloche</city>
</person>
<person>
<name>martin</name>
<age>27</age>
<city>miami</city>
</person>
</person_list>

因为现在的结果是这样的:

<group_name>"math"</group_name>
<group_id>1234</group_id>
<person_list>
<person>
<name>phil</name>
<age>23</age>
<city>buenos aires{city_b}</city>
</person>
</person_list>

我做了一些csv示例(带有一些无意义的变量) 文件 A

文件 B

所以结果应该是 3 个 SOAP/XML 请求

我建议使用JSR223预处理器和Groovy语言动态生成请求正文。JSR223预处理器提供对sampler对象的读/写访问,该对象很可能是HTTPSamplerProxy,因此一旦生成正确的XML有效负载,您应该能够将其传递给HTTP请求采样器,如下所示:

import org.apache.commons.io.FileUtils;
List<String> csvfile1 = FileUtils.readLines(new File("/path/to/file1"), StandardCharsets.UTF_8); 
List<String> csvfile2 = FileUtils.readLines(new File("/path/to/file2"), StandardCharsets.UTF_8);
//for each line in file 1
// for each groupid from file 2
// append <person> entry
sampler.addNonEncodedArgument("","your XML data","");
sampler.setPostBodyRaw(true);

请参阅 Beanshell vs JSR223 vs Java JMeter 脚本:您一直在等待的性能下降! 文章,了解 JMeter 中 Groovy 脚本的概述。如果对Groovy不是很满意 - 用CSV文件中的几行更新您的问题,以便我们可以建议相关代码。

最新更新