Jmeter系类(33) - JSR223(3) | java常用脚本
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()) } }
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")
疑惑
- 这节讲的脚本,部分都是JSR223(2)里面的内置函数重了,到底用哪个?
- 内置函数收集归纳的是Groovy的,本篇是java的。两篇不论是内置函数,还是脚本都可以适用
- 注意JSR223控件的语言别选择错了,用Groovy内置函数方便选择Groovy。选择java应该也可以~~~,毕竟是Groovy基于jvm的,会不会报错,我没试过,大家可以试下