Jmeter-JSR223常用脚本

数据获取相关

接口请求后置

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中的线程组默认是并行的,所以如果全局变量依赖某个线程处理后的结果,需要在测试计划中额外设置独立运行


设置后所有线程组为顺序执行

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容