从先前的响应中选取值,并在jmeter的后续请求中以相应的块数发送数据

  • 本文关键字:请求 数据 jmeter 响应 选取 并在 jmeter
  • 更新时间 :
  • 英文 :


我想从先前请求的json响应中提取值,并将值传递给变量,并在随后的请求体中使用它们。这里的问题是,在一个后续请求中只需要传递一组20个值。因此,后续请求的计数根据响应的大小不断增加/减少。例如,如果响应中接收到100个值/集,则后续请求的计数将是100/20 = 5个请求,每个请求中有20个值集。如果没有留下20条记录(如果响应中接收到的集合计数不是20的精确倍数),那么最后一个请求采样器的主体将包含少于20个值。记录将遵循相同的顺序,即前20条记录在第一个采样器中,21-40条记录在第二个采样器中,以此类推。因此,后续采样器/请求的计数将根据响应大小增加或减少。

请求1响应

[{"Specialization";Computer Science";DegreeProviderId";;DegreeProvider:2eb78dd0-1422-785252d8f804";Type";Update";;Update";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;878-00-1250";FullName: "),"CollegeName"TTT"LastName":"China"InProgress":真正的},{"Specialization"农业Science","DegreeProviderId":"DegreeProvider: 2 eb78dd0 - 1422 - 7852 - u65f804","Type":"Update","GId":"方:e5329b74-a88b-df7865rfdt-de9e","TeacherId":"TeacherProvider: 7 e7f5628 - 663 f - 42 - e1 - a6e6 - 13 - cb0bd34e3d","UpdatedDate":20121-05-31 t13:07:21 ";FirstName";Auf";NewData"; ["SSN: 548-00-9890";FullName; ", "CollegeName";AAA";LastName";;Usa";;InProgress": true},

我必须在随后的请求中传递DegreeProviderId的值,如下

取样器/请求界面

[{"Id":"DegreeProvider:2eb78dd0-1422-785252d8f804","Type";" Update", "IsValued"; false, "Comment";";]{"Id":"DegreeProvider:2eb78dd0-1422-7852u65f804","Type": "Update", "IsValued"; false, "Comment";………20}]

取样器/请求body2

[{"Id":"DegreeProvider:2eb78dd0-1422-785252d8f804","Type";" Update", "IsValued"; false, "Comment";";]{"Id":"DegreeProvider:2eb78dd0-1422-7852u65f804","Type": "Update", "IsValued"; false, "Comment";………20}]

取样器/请求body3

[{"Id":"DegreeProvider:2eb78dd0-1422-785252d8f804","Type";" Update", "IsValued"; false, "Comment";";]{"Id":"DegreeProvider:2eb78dd0-1422-7852u65f804","Type": "Update", "IsValued"; false, "Comment";………20}]...

. .. .

采样器/请求体N....…

响应记录总数不是一个常数,它是不断变化的。后续请求计数取决于先前响应中接收到的记录计数。因此,我需要编写代码来捕获DegreeProviderId、Type、IsValued和Comment值的值,并在随后的请求中使用它们,如上所述。请帮我处理这个场景。非常感谢您的帮助。

我认为最好的选择是JSR223 PostProcessor和以下代码:

def response = new groovy.json.JsonSlurper().parse(prev.getResponseData())

def partition(array, size) {
def partitions = []
int partitionCount = array.size() / size
partitionCount.times { partitionNumber ->
def start = partitionNumber * size
def end = start + size - 1
partitions << array[start..end]
}
if (array.size() % size) partitions << array[partitionCount * size..-1]
return partitions
}
def chunks = partition(response, 20)
1.upto(chunks.size(), {
def payload = []
chunks.get(it - 1).each { entry ->
payload.add([DegreeProviderId: entry.DegreeProviderId, Type: entry.Type, isValued: false, Comment: ''])
}
vars.put('request_' + it, new groovy.json.JsonBuilder(payload).toPrettyString())
})

它将生成JMeter变量,如${request_1},${request_2}等,最多包含20个条目,这些变量可以在ForEach控制器中使用

更多信息:

  • Apache Groovy -解析和生成JSON
  • Apache Groovy -为什么以及如何使用它

最新更新