數(shù)據(jù)獲取相關(guān)
接口請求后置
import groovy.json.JsonSlurper // 導(dǎo)入json解析模塊
requestName = prev.getSampleLabel() // 獲取請求的名稱
responseCode = prev.getResponseCode() // 獲取請求的響應(yīng)碼
responseHeader = prev.getResponseHeaders() // 獲取請求的headers信息
responseDataStr = prev.getResponseDataAsString() // 以string的形式返回請求結(jié)果
jsonSlurper = new JsonSlurper() // 生成一個json對象
jsondata = jsonSlurper.parseText(responseDataStr) // json對象數(shù)據(jù)化,可以通過key值獲取對應(yīng)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")) // 數(shù)據(jù)轉(zhuǎn)json字符串
jsonSlurper = new JsonSlurper()
jsondata = jsonSlurper.parseText(jsonString) // json對象數(shù)據(jù)化,可以通過key值獲取對應(yīng)value
斷言相關(guān)
responseCode = prev.getResponseCode() // 獲取請求的狀態(tài)碼
if (responseCode == "200") { // 對狀態(tài)碼進行斷言 判定是否是200
AssertionResult.setFailure(false) // 斷言成功
} else {
AssertionResult.setFailure(true) // 斷言失敗
AssertionResult.setFailureMessage("response Code is not 200") // 輸出斷言失敗對應(yīng)的信息
}
線程相關(guān)
// 獲取線程總數(shù)的方法
num1 = ctx.getThreadGroup().getNumThreads() // JSR223腳本
num2 = ${__groovy(org.apache.jmeter.threads.JMeterContextService.getNumberOfThreads())} // 函數(shù)調(diào)用
num3 = ${__groovy(ctx.getThreadGroup().getNumThreads(),)} // 組合使用
currentThread = ${__threadNum} // 獲取當前線程號
Cookie相關(guān)
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())
}
}
數(shù)據(jù)存儲相關(guān)
property全線程共享數(shù)據(jù)
import org.apache.jmeter.util.JMeterUtils
JMeterUtils.setProperty("key", "value") // 僅支持string類型數(shù)據(jù)
JMeterUtils.getProperty("key")
vars局部變量,僅在當前線程組生效,可以通過${key}調(diào)用
responseCode = prev.getResponseCode()
vars.put("login_status", responseCode) // 設(shè)置
code = vars.get("login_status") // 讀取
props全局變量,可以通過${key}調(diào)用
vars.props("token", "${token}") // 設(shè)置
token = props.get("token") // 讀取
ps:因Jmeter中的線程組默認是并行的,所以如果全局變量依賴某個線程處理后的結(jié)果,需要在測試計劃中額外設(shè)置獨立運行

設(shè)置后所有線程組為順序執(zhí)行