在 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 代码中实现此目的,还是有更好/更简单的方法?
提前致谢!
您可以使用 RandomStringUtils.randomAlphabetic() 函数,例如:
def msg = "<Check>" + org.apache.commons.lang3.RandomStringUtils.randomAlphabetic(3, 255) + "</Check>"
请参阅JMeter 的 Groovy 模板备忘单了解更多详细信息。
或者,您可以将有效负载放入文件中,并使用 __FileToString() 和 eval() 函数组合直接在 Sampler 主体日期中获取有效负载,例如:
${__eval(${__FileToString(payload.txt,,)})}