前面我们写过使用python处理修改响应内容传参和批量生成参数,但是实际压测过程中发现,使用python性能很差,后面我们又尝试换用groovy,发现groovy性能更好,处理更快
下面是我们之前使用python写的处理将参数添加如下内容
import json
s=vars.get("list") #获取jmeter的参数
s=json.loads(s) #JSON 字符串解码为 Python 对象
for i in range(len(s)):
s[i]["__id___"]=str(i)
s[i]["_row_"]=str(i)
s=json.dumps(s,ensure_ascii=False) #将 Python 对象编码成 JSON 字符串
vars.put("list_new",s)
现在我们换成groovy来实现
import groovy.json.JsonSlurper
import groovy.json.JsonOutput
def json=vars.get("payList")
JsonSlurper jsonS = new JsonSlurper()
def s = jsonS.parseText(json)
for (int i in 0..<s.size()){
s[i].each{key, value ->
if (value instanceof Integer){
s[i].put(key,String.valueOf(value))
/* s[i].key=String.valueOf(value) */
}
}
s[i]."__id___"=String.valueOf(i)
s[i]."_row_"=String.valueOf(i)
}
def json1 = JsonOutput.toJson(s)
vars.put("payList_new",json1)
还有就是我们之前用到的批量生成参数,换成groovy来实现
import groovy.json.JsonSlurper
def json=vars.get("fieldData")
JsonSlurper jsonS = new JsonSlurper()
def s = jsonS.parseText(json)
def makeCS(s){
s.each { key, value ->
if (value instanceof List){
log.info("pass")
}else if(value instanceof java.util.LinkedHashMap){
makeCS(value)
}else if(value instanceof String){
vars.put(key,value)
}else{
vars.put(key,String.valueOf(value))
}
}
}
makeCS(s)
虽然代码看起来要更复杂一些,但是我们比较压测结果就知道性能差异:
-
python执行报告:
image.png
-
groovy执行报告:
image.png
网友评论