前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用Groovy在JMeter中使用正则提取赋值

用Groovy在JMeter中使用正则提取赋值

作者头像
FunTester
发布2020-04-03 15:40:53
1.2K0
发布2020-04-03 15:40:53
举报
文章被收录于专栏:FunTester

之前写过一些文章讲了Groovy如何在JMeter中协助测试:

  • 用Groovy处理JMeter断言和日志
  • 用Groovy处理JMeter变量
  • 用Groovy在JMeter中执行命令行
  • 用Groovy处理JMeter中的请求参数
  • Java和Groovy正则使用
  • JMeter吞吐量误差分析

这次来看看Groovy正则表达式在JMeter中的应用。

正则表达式是特殊的文本字符串,用作查找与之匹配的其他字符串的模板。它们是从字符串中检索数据(子字符串)的非常强大的机制。在Apache JMeter™中,可以从内置组件正则表达式提取器中使用正则表达式,也可以用Groovy编写它们。

将正则表达式与Groovy一起使用可提供更大的灵活性并节省时间。例如,如果您需要提取几个不同的参数,则可以只编写一个脚本,而不是为每个请求添加一个正则表达式提取器。

在本文中,我将向您展示当使用JMeter对API响应进行性能测试时,如何在Groovy中使用正则表达式。

  • 首先新建一个简单的线程组和一个简单的请求:
  • 添加JSR223 后置处理程序

这里先看一下接口的响应,如下:

代码语言:javascript
复制
{
    "success": 1,
    "gt": "3c73c021ac3bfea7b5df8d461b5573c5",
    "challenge": "60e86734e0dfb7db48c5661ff9c5c935",
    "new_captcha": true
}

这里我的需求是获取challenge这个字段的值,当然这个需要用解析json的方式更好,具体参考文章:用Groovy处理JMeter断言和日志。本期我采用正则提取的方式进行提取,并赋值到某个线程私有变量中,赋值变量部分可以参考文章:用Groovy处理JMeter变量

脚本如下:

代码语言:javascript
复制
def response = prev.getResponseDataAsString()
log.info("响应内容:"+ response)
def re = response =~ /challenge":.+?"/
log.info("提取结果:"+ re[0])
def a = re[0] - "challenge\":\"" - "\""

vars.put("MY1",a)

log.warn("修改后的MY1参数是:${vars.get("MY1")}")

控制台输出:

代码语言:javascript
复制
2020-03-08 17:45:20,035 INFO o.a.j.e.StandardJMeterEngine: Running the test!
2020-03-08 17:45:20,038 INFO o.a.j.s.SampleEvent: List of sample_variables: []
2020-03-08 17:45:20,040 INFO o.a.j.g.u.JMeterMenuBar: setRunning(true, *local*)
2020-03-08 17:45:20,233 INFO o.a.j.e.StandardJMeterEngine: Starting ThreadGroup: 1 : 线程组
2020-03-08 17:45:20,233 INFO o.a.j.e.StandardJMeterEngine: Starting 1 threads for group 线程组.
2020-03-08 17:45:20,233 INFO o.a.j.e.StandardJMeterEngine: Thread will continue on error
2020-03-08 17:45:20,233 INFO o.a.j.t.ThreadGroup: Starting thread group... number=1 threads=1 ramp-up=1 perThread=1000.0 delayedStart=false
2020-03-08 17:45:20,233 INFO o.a.j.t.ThreadGroup: Started thread group number 1
2020-03-08 17:45:20,233 INFO o.a.j.e.StandardJMeterEngine: All thread groups have been started
2020-03-08 17:45:20,234 INFO o.a.j.t.JMeterThread: Thread started: 线程组 1-1
2020-03-08 17:45:20,495 INFO o.a.j.a.J.JSR223 正则提取: 响应内容:{"success":1,"gt":"3c73c021ac3bfea7b5df8d461b5573c5","challenge":"b001a7188421320f77fb4631dbd72116","new_captcha":true}
2020-03-08 17:45:20,495 INFO o.a.j.a.J.JSR223 正则提取: 提取结果:challenge":"b001a7188421320f77fb4631dbd72116"
2020-03-08 17:45:20,496 WARN o.a.j.a.J.JSR223 正则提取: 修改后的MY1参数是:b001a7188421320f77fb4631dbd72116
2020-03-08 17:45:20,496 INFO o.a.j.t.JMeterThread: Thread is done: 线程组 1-1
2020-03-08 17:45:20,496 INFO o.a.j.t.JMeterThread: Thread finished: 线程组 1-1
2020-03-08 17:45:20,496 INFO o.a.j.e.StandardJMeterEngine: Notifying test listeners of end of test
2020-03-08 17:45:20,497 INFO o.a.j.g.u.JMeterMenuBar: setRunning(false, *local*)

然后当前线程下一次请求时,变量MY1的值已经变成了我们修改过的内容。


  • 郑重声明:文章首发于公众号“FunTester”,禁止第三方(腾讯云除外)转载、发表。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FunTester 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档