MeterSphere 中使用 Groovy 的常用脚本大全
以下是在 MeterSphere 中使用 Groovy 脚本的常用代码片段总结,涵盖变量操作、请求处理、断言、数据提取等常见场景。
一、变量操作
1. 获取和设置变量
// 获取变量
def username = vars.get("username")
def password = vars.get("password")
// 设置变量
vars.put("new_var", "value")
vars.put("full_name", "${username} Smith")
// 获取JMeter属性(全局变量)
def globalVar = props.get("global_property")
2. 变量类型转换
// 字符串转数字
def intVar = "123".toInteger()
def doubleVar = "3.14".toDouble()
// 数字转字符串
vars.put("string_num", 123.toString())
// 布尔值处理
def boolValue = "true".toBoolean()
二、请求处理
1. 获取请求响应
// 获取响应数据
def response = prev.getResponseDataAsString()
// 获取响应码
def statusCode = prev.getResponseCode()
// 获取响应头
def headers = prev.getResponseHeaders()
// 获取请求时间
def elapsedTime = prev.getTime()
2. 处理JSON响应
import groovy.json.JsonSlurper
def response = prev.getResponseDataAsString()
def json = new JsonSlurper().parseText(response)
// 提取嵌套值
def userId = json.data.user.id
vars.put("extracted_user_id", userId.toString())
// 处理JSON数组
json.items.eachWithIndex { item, index ->
vars.put("item_${index}", item.name)
}
3. 处理XML响应
import groovy.xml.XmlSlurper
def response = prev.getResponseDataAsString()
def xml = new XmlSlurper().parseText(response)
// 提取节点值
def title = xml.book.title.text()
vars.put("book_title", title)
三、断言检查
1. 基本断言
// 检查响应码
if (prev.getResponseCode() != "200") {
AssertionResult.setFailure(true)
AssertionResult.setFailureMessage("响应码非200")
}
// 检查响应内容
if (!prev.getResponseDataAsString().contains("success")) {
throw new Exception("响应中未找到success关键字")
}
2. JSON断言
def json = new JsonSlurper().parseText(prev.getResponseDataAsString())
// 检查字段值
if (json.status != "OK") {
AssertionResult.setFailureMessage("状态不是OK")
}
// 检查数组大小
if (json.items.size() < 5) {
AssertionResult.setFailureMessage("项目数量不足5个")
}
四、数据处理
1. 字符串操作
// 字符串分割
def parts = "a,b,c".split(",")
vars.put("first_part", parts[0])
// 字符串替换
def newStr = "hello world".replace("world", "groovy")
// 正则匹配
def matcher = (prev.getResponseDataAsString() =~ /id="(\d+)"/)
if (matcher.find()) {
vars.put("matched_id", matcher.group(1))
}
2. 日期处理
import java.text.SimpleDateFormat
// 获取当前时间
def now = new Date()
vars.put("current_time", now.format("yyyy-MM-dd HH:mm:ss"))
// 时间计算
use(groovy.time.TimeCategory) {
def tomorrow = now + 1.day
vars.put("tomorrow", tomorrow.format("yyyy-MM-dd"))
}
五、流程控制
1. 条件判断
def status = vars.get("status")
switch(status) {
case "success":
log.info("操作成功")
break
case "failure":
log.error("操作失败")
break
default:
log.warn("未知状态: ${status}")
}
2. 循环操作
// 遍历列表
def items = ["apple", "banana", "orange"]
items.each { item ->
log.info("处理水果: ${item}")
}
// 带索引的遍历
items.eachWithIndex { item, index ->
vars.put("fruit_${index}", item)
}
// 数字范围循环
(1..5).each { num ->
log.info("当前数字: ${num}")
}
六、文件操作
1. 读取文件
def file = new File("data.txt")
def lines = file.readLines()
vars.put("first_line", lines[0])
// CSV文件处理
def csvData = []
file.splitEachLine(",") { fields ->
csvData << fields
}
2. 写入文件
new File("output.log").withWriter { writer ->
writer.writeLine("测试开始时间: ${new Date()}")
writer.writeLine("响应数据: ${prev.getResponseDataAsString()}")
}
七、性能测试专用
1. 随机数据生成
import org.apache.commons.lang3.RandomStringUtils
// 生成随机字符串
def randomStr = RandomStringUtils.randomAlphanumeric(10)
vars.put("random_name", randomStr)
// 生成随机数
def randomNum = new Random().nextInt(100)
vars.put("random_age", randomNum.toString())
2. 吞吐量计算
def throughput = ctx.getThreadNum() / (prev.getTime() / 1000)
vars.put("current_throughput", throughput.toString())
八、异常处理
try {
def riskyOperation = 1 / 0
} catch (ArithmeticException e) {
log.error("除零错误: ${e.getMessage()}")
vars.put("error_occurred", "true")
} finally {
log.info("操作完成")
}
九、调试技巧
1. 日志输出
log.info("信息级别日志")
log.debug("调试信息")
log.warn("警告信息")
log.error("错误信息")
// 打印变量
log.info("用户名: ${vars.get('username')}")
2. 查看所有变量
vars.entrySet().each { entry ->
log.info("变量 ${entry.key} = ${entry.value}")
}
十、JMeter上下文访问
// 获取线程信息
def threadNum = ctx.getThreadNum()
def threadName = ctx.getThread().getName()
// 获取测试计划信息
def testName = ctx.getCurrentSampler().getName()
// 设置样本结果
prev.setSuccessful(false)
prev.setResponseMessage("自定义失败信息")
以上脚本可以直接在 MeterSphere 的 JSR223 元件中使用,选择语言为 Groovy 即可。建议:
- 对于性能关键代码,使用
@CompileStatic注解 - 勾选 “Cache compiled script” 选项提升性能
- 复杂逻辑建议先在 Groovy Console 中测试
2496

被折叠的 条评论
为什么被折叠?



