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

标签 java xml csv soap jmeter

我在线程组中使用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

File B

所以结果应该是 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/

相关文章:

java - 用户注册表单 Spring MVC

java - 我可以使用调用类中的泛型类型吗?

excel - 在 VBA 中将 Excel 工作簿转换为 CSV

python - 如何输出多行csv?

xml - 如何使用客户端的私钥在服务器上对 XML 进行外部签名(仅发送哈希,而不是完整的 xml)

sql-server - 在sql中查找字符串长度而不从零开始

java - 内置 JFR(Java 飞行记录器)事件记录在哪里?

java - 修复 Eclipse 中的问题

java - 如何在 Android 中显示本地 html 文件?

c# - XML 序列化注释