[英]Regex JSON response Gatling stress tool
想要在http响应中捕获一个名为scanNumber的变量,如下所示:
{"resultCode":"SUCCESS","errorCode":null,"errorMessage":null,"profile":{"fullName":"TestFirstName TestMiddleName TestLastName","memberships":[{"name":"UA Gold Partner","number":"123-456-123-123","scanNumber":"123-456-123-123"}]}}
如何定期进行这项工作? 我使用的工具是Gatling压力工具(使用Scala DSL)
我试过这样做:
.check(jsonPath("""${scanNumber}""").saveAs("scanNr")))
但我得到错误:
---- Errors --------------------------------------------------------------------
> Check extractor resolution crashed: No attribute named 'scanNu 5 (100,0%)
mber' is defined
你是第一次接近。
你真正想要的是:
.check(jsonPath("""$..scanNumber""").saveAs("scanNr")))
或者可能:
.check(jsonPath("""$.profile.memberships[0].scanNumber""").saveAs("scanNr")))
请注意,这使用jsonPath,而不是正则表达式。 JsonPath应该比regex更可靠。
查看JsonPath规范以获得更高级的用法。
使用这个正则表达式来匹配json中的任何地方:
/"scanNumber":"[^"]+"/
如果你想匹配只是发生在结构你说使用:
/\{[^{[]+\{[^{[]+\[\{[^{[]*("scanNumber":"[^"]+")/
由于json字段可能会更改其顺序,因此您应该使正则表达式更容忍这些更改:
val j = """{"resultCode":"SUCCESS","errorCode":null,"errorMessage":null,"profile":{"fullName":"TestFirstName TestMiddleName TestLastName","memberships":[{"name":"UA Gold Partner","number":"123-456-123-123","scanNumber":"123-456-123-123"}]}}"""
val scanNumberRegx = """\{.*"memberships":\[\{.*"scanNumber":"([^"]*)".*""".r
val scanNumberRegx(scanNumber) = j
scanNumber //String = 123-456-123-123
即使json字段的顺序不同(但当然保留结构),这也可以工作
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.