我有两项服务:注册和搜索,回复相同:
{
"STDCode": "022",
"Name": "MyName",
"mobileNumber": 9876543210,
"otherPhoneNumbers": [
1111111111,
2222222222,
3333333333
],
"language": "EN",
"gender": "M",
"Address": "......"
}
虽然响应相同,但JMeter中传递的断言对于两者都有所不同。
我使用jsonSlurper将结果解析为
import groovy.json.*
def slurper = new JsonSlurper()
def result = slurper.parseText(prev.getResponseDataAsString())
我成功使用的断言是
assert result.Name == "MyName"
// Successful with register fails with search
assert result.Name[0] == "MyName"
// Successful with search fails with register
只是想知道为什么我必须在某个时候使用数组结构,有时断言工作没有数组结构[0]?这是我在使用解析函数时缺少的东西,还是开发人员编写服务的方式?
答案 0 :(得分:2)
您的两个回复不相同。有一点不同。在result.farmerProfile.Name
的路径中是一个列表。例如。 (注意[{...}]
那里):
import groovy.json.*
def slurper = new JsonSlurper()
def result = slurper.parseText('''\
[{
"STDCode": "022",
"Name": "MyName",
"mobileNumber": 9876543210,
"otherPhoneNumbers": [
1111111111,
2222222222,
3333333333
],
"language": "EN",
"gender": "M",
"Address": "......"
}]''')
println result.Name // [MyName]
println result.Name[0] // MyName
println result*.Name // [MyName]
println result*.Name[0] // MyName
原因是隐式传播运算符(注意*.Name
)。因此,您很可能在一个中列出farmerProfile
,在另一个中列出对象本身。这是有道理的,因为我认为搜索能够返回多个。