在Jmeter中创建动态XML请求正文

xwmevbvl  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(386)

我是Jmeter的新手,需要一些帮助来创建一个动态的Soap消息。我正在尝试在Jmeter中将下面的XML正文作为HTTP请求发布-

<soap:Envelope xmlns:soap="http://XXXXXsoap-envelope" xmlns:tem="http://XXXXX/“>
<soap:Header/>
<soap:Body>
<tem:ProcessMessage>
<tem:message>
            <![CDATA[
                <LoyaltyMessages xmlns:xsi="http://www.w3.org/XXXX/XMLSchema-instance" xmlns:xsd="hXXXX/XMLSchema" XID="4" YYY="4186" ZZZ="998" PPP="1" LLLL="2" DateTime="2022-09-13T13:30:12" LLL="1">
                    <TransactionRequests>
                        <TransactionRequest Type="0">
                            <Request JJJ="0" SSS="1">
                                <Items>
                                    <Item SeqID="1" ItemCode="1145677" DepCode="105" SaleType="0" QtyType="1" Qty="2" NetPrice="1400" NetAmount="2800"/>
                                    <Item SeqID="2" ItemCode="1145677" DepCode="105" SaleType="0" QtyType="1" Qty="2" NetPrice="1400" NetAmount="2800"/>

                                </Items>
                                <Total TotalAmount="28.00" TotalNumberOfItems="2"/>
                            </Request>
                        </TransactionRequest>
                    </TransactionRequests>
                </LoyaltyMessages>
            ]]> 
</tem:message>
</tem:ProcessMessage>
</soap:Body>
</soap:Envelope>

我想用一个动态主体来替换Items字段中的标记,该动态主体最多可以包含50-100个具有递增SeqID的项目,这样看起来就像-

<Items>
       <Item SeqID="1" ItemCode="${ItemCode}" DepCode="${DepCode}" SaleType="${SaleType}" QtyType="${QtyType}" Qty="${Qty}" NetPrice="${NetPrice}" NetAmount="${NetAmount}"/>
                                    <Item SeqID="2" ItemCode="${ItemCode}" DepCode="${DepCode}" SaleType="${SaleType}" QtyType="${QtyType}" Qty="${Qty}" NetPrice="${NetPrice}" NetAmount="${NetAmount}"/>
                                    <Item SeqID="3" ItemCode="${ItemCode}" DepCode="${DepCode}" SaleType="${SaleType}" QtyType="${QtyType}" Qty="${Qty}" NetPrice="${NetPrice}" NetAmount="${NetAmount}"/>

                                </Items>

我正在使用CSV数据集配置,但它为所有项目列表添加了相同的值,因为它是同一个请求。也不知道如何实现项目标记内的多个标记块。

2izufjch

2izufjch1#

您可以使用JSR223预处理器和Groovy code生成Items的动态块,如:
1.将请求正文更改为:

<soap:Envelope xmlns:soap="http://XXXXXsoap-envelope" xmlns:tem="http://XXXXX/">
    <soap:Header/>
    <soap:Body>
        <tem:ProcessMessage>
            <tem:message>
                <![CDATA[
                <LoyaltyMessages xmlns:xsi="http://www.w3.org/XXXX/XMLSchema-instance" xmlns:xsd="hXXXX/XMLSchema" XID="4" YYY="4186" ZZZ="998" PPP="1" LLLL="2" DateTime="2022-09-13T13:30:12" LLL="1">
                    <TransactionRequests>
                        <TransactionRequest Type="0">
                            <Request JJJ="0" SSS="1">
                                <Items>
                                ${items}
                                </Items>
                                <Total TotalAmount="28.00" TotalNumberOfItems="${numberOfItems}"/>
                            </Request>
                        </TransactionRequest>
                    </TransactionRequests>
                </LoyaltyMessages>
            ]]>
            </tem:message>
        </tem:ProcessMessage>
    </soap:Body>
</soap:Envelope>

1.添加JSR223预处理器作为HTTP请求采样器的子级,并将以下代码放入“脚本”区域

def numberOfItems = 10

def items = new StringBuilder()

1.upto(numberOfItems, { index ->
    items.append('<Item SeqID="')
            .append(index)
            .append('" ItemCode="')
            .append(vars.get('ItemCode'))
            .append('"')
            .append('"')
            .append(' DepCode="')
            .append(vars.get('DepCode'))
            .append('" SaleType="')
            .append(vars.get('SaleType'))
            .append('" QtyType="')
            .append(vars.get('QtyType'))
            .append(" Qty=")
            .append(vars.get('Qty'))
            .append('" NetPrice="')
            .append(vars.get('NetPrice'))
            .append('" NetAmount="')
            .append(vars.get('NetAmount'))
            .append('"/>')
            .append(System.getProperty('line.separator'))
})

vars.put('items', items.toString())
vars.put('numberOfItems', numberOfItems as String)

相关问题