在 JMeter JSR223 Samper (groovy) 中用不同长度的随机字符串值替换结构化字符串 (XML) 的不同部分的最佳方法

问题描述 投票:0回答:1

在 JMeter 中,我有一个 JSR223 Sampler,它最终发送一个请求以在消息队列上发布消息。 在发送消息之前,我使用消息有效负载定义一个变量,如下所示。

def msg=
"""<?xml version="1.0" encoding="UTF-8"?>
<Sel xmlss="http://www.qazxsw.com/qwertyuio/ytr/xsd/v1/nsmessages">
    <Header>
        <SomeID xmlss="http://www.qazxsw.com/qwertyuio/ytr/xsd/v1/tresty/com">asd</SomeID>
        <SomeOtherID xmlss="http://www.qazxsw.com/qwertyuio/ytr/xsd/v1/tresty/com">fghfg</SomeOtherID>
        <Time xmlss="http://www.qazxsw.com/qwertyuio/ytr/xsd/v1/tresty/com">sdgfdgfs</Time>
        <Trasdhjkl xmlss="http://www.qazxsw.com/qwertyuio/ytr/xsd/v1/tresty/com">sdggfsdfdsfdssd</Trasdhjkl>
        <Grtra xmlss="http://www.qazxsw.com/qwertyuio/ytr/xsd/v1/tresty/com">dfsdffds</Grtra>
    </Header>
    <Request>
        <Sel>
            <qwertyuioID xmlss="http://www.qazxsw.com/qwertyuio/ytr/xsd/v1/tresty/Sel">
                <Rgttyuiugg xmlss="http://www.qazxsw.com/qwertyuio/ytr/xsd/v1/tresty/com">12355.678</Rgttyuiugg>
                <Itthfdfdsfsd xmlss="http://www.qazxsw.com/qwertyuio/ytr/xsd/v1/tresty/com">
                    <Nafvdgrdgfsdsfsdfra>dfgsdfd</Nafvdgrdgfsdsfsdfra>
                    <Nafvdgrdgfsdsfsdfrartyhffgfds>ghfdgfdgdf</Nafvdgrdgfsdsfsdfrartyhffgfds>
                </Itthfdfdsfsd>
                <SomeType xmlss="http://www.qazxsw.com/qwertyuio/ytr/xsd/v1/tresty/com">dfgsdfsd</SomeType>
            </qwertyuioID>
            <Rhdtdfbfgdsvdfvfd xmlss="http://www.qazxsw.com/qwertyuio/ytr/xsd/v1/tresty/Sel">1234.11</Rhdtdfbfgdsvdfvfd>
            <Aregbfdgdfgdfgrh xmlss="http://www.qazxsw.com/qwertyuio/ytr/xsd/v1/tresty/Sel">1234.11</Aregbfdgdfgdfgrh>
            <EretdfTytr xmlss="http://www.qazxsw.com/qwertyuio/ytr/xsd/v1/tresty/Sel">267840528</EretdfTytr>
            <YtrewrTyresrsfd xmlss="http://www.qazxsw.com/qwertyuio/ytr/xsd/v1/tresty/Sel">KRP</YtrewrTyresrsfd>
            <DrtyyrrtTyertergf xmlss="http://www.qazxsw.com/qwertyuio/ytr/xsd/v1/tresty/Sel">2400/R/2/07</DrtyyrrtTyertergf>
            <Tewrwerewfvfddf xmlss="http://www.qazxsw.com/qwertyuio/ytr/xsd/v1/tresty/Sel">
                <Tregfdgddsggs>2222.678</Tregfdgddsggs>
            </Tewrwerewfvfddf>
            <Data xmlss="http://www.qazxsw.com/qwertyuio/ytr/xsd/v1/tresty/Sel">
                <Trans>
                    <Mij>
                        <Mars>0115.11</Mars>
                        <Pers>
                            <Rem>1234.11</Rem>
                            <Rem>67822.11</Rem>
                            <Rem>11233.678</Rem>
                        </Pers>
                        <Com>
                            <asdg>67813.11</asdg>
                        </Com>
                        <Fddfgsfds>
                            <Trasdafdsd>
                                <Trasdafdsdtra>1234.11</Trasdafdsdtra>
                                <Tarasdas>0040.11</Tarasdas>
                                <Gtrasad>
                                    <Yhtrgdfdsgsd>8796.1123</Yhtrgdfdsgsd>
                                    <Yhtrgdfdsgsd>12334.656546</Yhtrgdfdsgsd>
                                </Gtrasad>
                                <Ftyuoioyioityh prop="1234.11">fdgfdgfd</Ftyuoioyioityh>    
                                <Ptergfdgfgdsgsdgdfbf prop="1234.11">8pt0gla0ywkc7aw1g808</Ptergfdgfgdsgsdgdfbf>
                                <Transreg>
                                    <TransTher>
                                        <Cytgfhfghfdhfdhbdhrt>0040.11</Cytgfhfghfdhfdhbdhrt>
                                        <Ther prop="1234.11">2d4l6nvkenz9c70ys1dw</Ther>
                                    </TransTher>
                                </Transreg>
                            </Trasdafdsd>
                        </Fddfgsfds>
                    </Mij>
                    <Objs>
                        <Obj>
                            <ObjMid>
                                <Sel>
                                    <Tra>3333.11</Tra>
                                    <Kjasd>2222.11</Kjasd>
                                    <Nr>
                                        <ConfStat>1234.11</ConfStat>    
                                        <Nr prop="1234.11">12345678911234999</Nr>
                                    </Nr>
                                    <Reg>
                                        <Ther prop="1234.11">12345678911234569999</Ther>
                                    </Reg>
                                </Sel>
                            </ObjMid>
                        </Obj>
                    </Objs>
                </Trans>
            </Data>
            <Check>false</Check>
        </Sel>
    </Request>
</Sel>"""

将许多不同标签内的值替换为长度在 3 到 225 个字符之间的不同随机字符串值的最佳方法是什么?

我注意到,例如,这有效并给了我我想要的结果:

<Check>${__RandomString(${__Random(3,255)},abcdefghijklmnopqrstuvwxyz)}</Check>

(即使 JSR223 Sampler 在第一次遇到“}”字符之前对代码进行不同的着色)

但是我从另一个 stackoverflow 答案中读到了不推荐的答案,因为已编译脚本的缓存不可用。所以我想这会影响脚本的资源消耗。

如果我使用上面的表达式定义一个 JMeter 用户定义变量,并使用 vars.get("varName") 将 groovy 脚本中的值带入 groovy 变量中,它将只得到一个随机值,该值与所有引用的地方,这不是我想要的。

那么,最好的方法是什么?我应该在 JSR223 Sampler 中编写自定义 randomString 函数实现,还是导入一些帮助库以在 groovy 代码中实现此目的,还是有更好/更简单的方法?

提前致谢!

groovy jmeter
1个回答
0
投票

您可以使用 RandomStringUtils.randomAlphabetic() 函数,例如:

def msg = "<Check>" + org.apache.commons.lang3.RandomStringUtils.randomAlphabetic(3, 255) + "</Check>"

请参阅JMeter 的 Groovy 模板备忘单了解更多详细信息。

或者,您可以将有效负载放入文件中,并使用 __FileToString()eval() 函数组合直接在 Sampler 主体日期中获取有效负载,例如:

${__eval(${__FileToString(payload.txt,,)})}
© www.soinside.com 2019 - 2024. All rights reserved.