Jmeter:JSR223 常用腳本(Groovy)


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

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")


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM