我在线程组中使用jmeter -SOAP/XML-RPC(它从csv文件读取多行) 我正在使用 2 个不同的 csv 文件(例如:A、B)。
soap 包含 xml,里面有列表 (<person list>)
,并且我需要此列表包含多个实例,但它只创建一个实例(<person>
中的 <person list>
)。
我希望它创建多个实例,
即对于文件 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 示例(带有一些无意义的变量) File A
所以结果应该是 3 个soap/xml 请求
最佳答案
我建议使用 JSR223 PreProcessor 动态生成请求正文和 Groovy语言。 JSR223 PreProcessor 提供对 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 Scripting: The Performance-Off You've Been Waiting For!有关 JMeter 中 Groovy 脚本编写概述的文章。如果对 Groovy 不太熟悉 - 使用 CSV 文件中的几行更新您的问题,以便我们建议相关代码。
关于java - 使用 Jmeter 从 csv 文件创建包含多个项目(在一个 SOAP/XML 消息中)的 xml 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41103204/