Jmeter 吉米特jp@gc参数化控制器-从变量构造对象

Jmeter 吉米特jp@gc参数化控制器-从变量构造对象,jmeter,xml-parsing,jmeter-plugins,Jmeter,Xml Parsing,Jmeter Plugins,如何使用仅从中获取的属性构造对象jp@gc-参数化控制器用户定义变量列表,可用于以后为HTTP采样器动态构建xml/json数据结构 控制器变量: HTTP请求正文的XML结构: 例1: <?xml version="1.0" encoding="UTF-8"?> <login> <username>someUser</username> <password>1234</password

如何使用仅从中获取的属性构造对象jp@gc-参数化控制器用户定义变量列表,可用于以后为HTTP采样器动态构建xml/json数据结构

控制器变量:

HTTP请求正文的XML结构:

例1:

 <?xml version="1.0" encoding="UTF-8"?>
    <login>
        <username>someUser</username>
        <password>1234</password>
    </login>

某个用户
1234

它正在保存JMeter变量,因此您可以使用
${}
语法

<userName>${username}</userName>
<password>${password}</password>
${username}
${password}
要在XML正文中动态获取变量,请使用以下示例

import java.util.stream.StreamSupport;
String xmlBody="<?xml version=\"1.0\" encoding=\"UTF-8\"?><login>";
StreamSupport.stream(Spliterators.spliteratorUnknownSize(vars.getIterator(), Spliterator.ORDERED), false).forEach(
    e -> xmlBody+="<" +e.getKey() + ">" +e.getValue() + "</" +e.getKey() + ">");
xmlBody += "</login>";
log.info(xmlBody);
import java.util.stream.StreamSupport;
字符串xmlBody=“”;
StreamSupport.stream(Spliterators.spliteratorUnknownSize(vars.getIterator(),Spliterator.ORDERED),false)(
e->xmlBody++=“e.getValue()+”;
xmlBody+=“”;
log.info(xmlBody);

它正在保存JMeter变量,因此您可以使用
${}
语法

<userName>${username}</userName>
<password>${password}</password>
${username}
${password}
要在XML正文中动态获取变量,请使用以下示例

import java.util.stream.StreamSupport;
String xmlBody="<?xml version=\"1.0\" encoding=\"UTF-8\"?><login>";
StreamSupport.stream(Spliterators.spliteratorUnknownSize(vars.getIterator(), Spliterator.ORDERED), false).forEach(
    e -> xmlBody+="<" +e.getKey() + ">" +e.getValue() + "</" +e.getKey() + ">");
xmlBody += "</login>";
log.info(xmlBody);
import java.util.stream.StreamSupport;
字符串xmlBody=“”;
StreamSupport.stream(Spliterators.spliteratorUnknownSize(vars.getIterator(),Spliterator.ORDERED),false)(
e->xmlBody++=“e.getValue()+”;
xmlBody+=“”;
log.info(xmlBody);
假设您的上述设置,您可以引用声明的变量,如:

<?xml version="1.0" encoding="UTF-8"?>
<login>
    <username>${username}</username>
    <password>${password}</password>
</login>

${username}
${password}

这将导致运行时变量替换为其各自的值,可使用i..e listener进行检查:

有关JMeter测试参数化的各种方法的更多信息,请参阅本文

假设您的上述设置,您可以引用声明的变量,如:

<?xml version="1.0" encoding="UTF-8"?>
<login>
    <username>${username}</username>
    <password>${password}</password>
</login>

${username}
${password}

这将导致运行时变量替换为其各自的值,可使用i..e listener进行检查:



有关JMeter测试参数化的各种方法的更多信息,请参阅本文

xml结构不是静态的,必须基于jp@gc-参数化控制器UDVlist@NikolayMarinov好吧,没有一种内置的方法可以动态地知道哪些变量是在controllerI中定义的,我假设它可以通过ctx.getVariables()完成,但不确定如何遍历它。@NikolayMarinov,但您还有其他JMeter变量,如
JMeterThread.last_sample_ok
START.YMD
,…我希望UDV列表jp@gcxml结构不是静态的,必须基于jp@gc-参数化控制器UDVlist@NikolayMarinov好吧,没有一种内置的方法可以动态地知道哪些变量是在controllerI中定义的,我假设它可以通过ctx.getVariables()完成,但不确定如何遍历它。@NikolayMarinov,但您还有其他JMeter变量,如
JMeterThread.last_sample_ok
START.YMD
,…我希望UDV列表jp@gc可以通过某种方式进行过滤,如果输入列表在jp@gc-参数化控制器是动态的?然后您可以向其添加前缀或后缀,以便能够区分参数化控制器中定义的变量与其他变量。完成后,您应该能够使用Java和Groovy语言动态构建XML请求体。它提供了允许操纵请求细节的实例jp@gcUDV list根本没有以映射或列表的形式公开,以后可以访问?它只是将定义的值添加到“普通”JMeter变量中:Dmitri,如果输入列表在jp@gc-参数化控制器是动态的?然后您可以向其添加前缀或后缀,以便能够区分参数化控制器中定义的变量与其他变量。完成后,您应该能够使用Java和Groovy语言动态构建XML请求体。它提供了允许操纵请求细节的实例jp@gcUDV list根本没有以映射或列表的形式公开,稍后将被访问?它只是将定义的值添加到“普通”JMeter变量中: