数据获取相关
接口请求后置
import groovy.json.JsonSlurper // 导入json解析模块
requestName = prev.getSampleLabel() // 获取请求的名称
responseCode = prev.getResponseCode() // 获取请求的响应码
responseHeader = prev.getResponseHeaders() // 获取请求的headers信息
responseDataStr = prev.getResponseDataAsString() // 以string的形式返回请求结果
jsonSlurper = new JsonSlurper() // 生成一个json对象
jsondata = jsonSlurper.parseText(responseDataStr) // json对象数据化,可以通过key值获取对应value
log.info("------------------------------")
log.info("requestName: " + requestName)
log.info("responseCode: " + responseCode)
log.info("responseHeader: " + responseHeader)
log.info("responseDataStr: " + responseDataStr)
log.info("jsondata_relay_id: "+ jsondata["relay_id"])
log.info("------------------------------")
解析SQL查询
import groovy.json.JsonSlurper
import groovy.json.JsonOutput
jsonString = JsonOutput.toJson(vars.getObject("data")) // 数据转json字符串
jsonSlurper = new JsonSlurper()
jsondata = jsonSlurper.parseText(jsonString) // json对象数据化,可以通过key值获取对应value
断言相关
responseCode = prev.getResponseCode() // 获取请求的状态码
if (responseCode == "200") { // 对状态码进行断言 判定是否是200
AssertionResult.setFailure(false) // 断言成功
} else {
AssertionResult.setFailure(true) // 断言失败
AssertionResult.setFailureMessage("response Code is not 200") // 输出断言失败对应的信息
}
线程相关
// 获取线程总数的方法
num1 = ctx.getThreadGroup().getNumThreads() // JSR223脚本
num2 = ${__groovy(org.apache.jmeter.threads.JMeterContextService.getNumberOfThreads())} // 函数调用
num3 = ${__groovy(ctx.getThreadGroup().getNumThreads(),)} // 组合使用
currentThread = ${__threadNum} // 获取当前线程号
Cookie相关
import org.apache.jmeter.protocol.http.control.Cookie
import org.apache.jmeter.protocol.http.control.CookieManager
cookieManager = sampler.getCookieManager()
size = cookieManager.getCookies().size()
for (i in 0..<size) {
def cookie = cookieManager.get(i)
if ("COOKIENAME" == cookie.getName()) {
vars.put("sessionName", cookie.getName())
vars.put("sessionValue", cookie.getValue())
vars.put("sessionDomain", cookie.getDomain())
vars.put("sessionPath", cookie.getPath())
} else {
log.error("-------Cookies : " + cookie.getName() + "----------- " + cookie.getValue())
}
}
数据存储相关
property全线程共享数据
import org.apache.jmeter.util.JMeterUtils
JMeterUtils.setProperty("key", "value") // 仅支持string类型数据
JMeterUtils.getProperty("key")
vars局部变量,仅在当前线程组生效,可以通过${key}
调用
responseCode = prev.getResponseCode()
vars.put("login_status", responseCode) // 设置
code = vars.get("login_status") // 读取
props全局变量,可以通过${key}
调用
vars.props("token", "${token}") // 设置
token = props.get("token") // 读取
ps:因Jmeter中的线程组默认是并行的,所以如果全局变量依赖某个线程处理后的结果,需要在测试计划中额外设置独立运行
设置后所有线程组为顺序执行