Json 相關
解析 Response
import groovy.json.JsonSlurper
def responseStr = prev.getResponseDataAsString()
def jsonSlurper = new JsonSlurper()
// String 轉 Object,通過 mData["key"] 獲取值
def mData = jsonSlurper.parseText(responseStr)
打印 Json
import groovy.json.JsonOutput
def book = new Book(id: 1, name: 'Thinking in Java')
def jsonOutput = new JsonOutput()
def result = jsonOutput.toJson(book)
//普通輸出
println(result)
//格式化輸出
println(jsonOutput.prettyPrint(result))
AssertResult相關
常用斷言封裝
void assertEqual(String expect, String expectDesc, String actual, String actualDesc) {
if (expect != actual) {
def errorMessage = "\'" + expectDesc + "\'" + " is not equal " + "\'" + actualDesc + "\'" + " ,expect: " + expect + " , but got: " + actual
AssertionResult.setResultForFailure(errorMessage)
}
}
void assertEqual(int expect, String expectDesc, int actual, String actualDesc) {
if (expect != actual) {
def errorMessage = "\'" + expectDesc + "\'" + " is not equal " + "\'" + actualDesc + "\'" + " ,expect: " + expect + " , but got: " + actual
AssertionResult.setResultForFailure(errorMessage)
}
}
Thread相關
獲取線程總數
// JSR223 腳本
ctx.getThreadGroup().getNumThreads()
// ${__groovy(,)}函數調用
${__groovy(org.apache.jmeter.threads.JMeterContextService.getNumberOfThreads())}
// 通過以下方法獲取,會有一個 warn 級別的報錯
${__groovy(ctx.getThreadGroup().getNumThreads(),)}
獲取當前線程號
// Jmeter函數,適合調試
${__threadNum}
獲取當前腳本路徑
原因:在使用sample 的 upload file 功能時,傳入 相對路徑./uploadFile.pdf
會產生未知錯誤,需要傳入絕對路徑。所以提前獲取當面腳本路徑
import org.apache.jmeter.services.FileServer;
FileServer.getFileServer().getBaseDir();
# 直接調用
${__groovy(import org.apache.jmeter.services.FileServer; FileServer.getFileServer().getBaseDir();,)}
Cookie 相關
獲取指定Cookie
import org.apache.jmeter.protocol.http.control.Cookie
import org.apache.jmeter.protocol.http.control.CookieManager
def cookieManager = sampler.getCookieManager()
def size = cookieManager.getCookies().size()
for (i in 0..<size) {
def cookie = cookieManager.get(i)
/*SESSION為指定的cookie的name*/
if ("SESSION" == 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())
}
}
Header 相關
Property 相關
操作Property
Property是全線程共享,概念類似Java Class中的全局變量
在 JSR223 腳本中設置Property,不可直接調用 Jmeter 函數:${__setProperty(,,)}
需要設置、獲取Property,可以調用以下方法:
import org.apache.jmeter.util.JMeterUtils
// 通過該方法只能設置 String 類型的value
JMeterUtils.setProperty("key", "value")
JMeterUtils.getProperty("key")