• 13
  • 13
分享

  如果你在JMeter脚本中看到这样一些符号:(.*?)(\d+),你是否会以为程序出现了乱码?拆开来看每个符号似乎都有固定的含义,组合在一起竟成了令人费解的天书。这些神秘符号究竟蕴含了哪些强大的功能,下面让我们一起来揭开它的面纱。

  一、什么是正则表达式

  上文提到的特定符号的组合叫做正则表达式,在JMeter工具中用来表达对字符串的一种逻辑过滤。正则表达式的功能分为“提取”和“匹配”,前者用来从字符串中获取我们想要的部分,后者用来将提取到的字符串和一个给定的字符串做比对。正则表达式的好处自然不言而喻,它实现了通过极其简单的方式达到字符串的复杂控制,同时兼具了灵活性与逻辑性。

  二、如何添加正则表达式

  1、添加正则表达式提取器

  HTTP请求->添加->后置处理器->正则表达式提取器。

  正则表达式的作用范围为线程组,因此正则表达式的层级应该位于需要提取返回值的请求器下面,即作为请求的子器件,并且需要通过正则表达式进行数据关联的两个请求应放在同一个线程组内。

1-1.jpg

  2、书写正则表达式

  正则表达式提取器包含以下元素:

  名称:定义了正则表达式的名称

  注释:编写脚本时的注解

  应用范围:应用于主取样器或子取样器,一般使用默认选项

  要检查的响应字段:样本数据源

  引用名称:在其他取样器中引用变量的名称,用法为${引用名称}

  正则表达式:数据提取器,()里面是响应报文中匹配数据的规则

  模板:用$$括起来,如果包含多个正则表达式,$1$表示提取第一个正则表达式解析出来的值,$2$表示第二个正则表达式提取结果,等等。

  匹配数字:正则表达式匹配数据的所有结果可以看做一个数组,匹配数字可以看做是数组的第几个元素。-1表示全部,0表示随机,1是第一个,2是第二个,依此类推。

  缺省值:如果提取失败,引用变量的默认值,可以为空。

1-2.jpg

  三、如何使用正则表达式

  那么,正则表达式要如何使用呢,它有哪些常见的使用场景呢,下面让我们通过几个例子来学习正则表达式的用法。

  场景一:获取网站登录信息Token

  我们在使用JMeter录制web脚本时,常常需要使用Token作为用户身份鉴别的标志。Token是服务端为每个用户创建的一个令牌,当该用户第一次登录时,将服务端生成的Token带回客户端,以后客户端请求只需带上这个Token,服务端就能识别出请求方的身份,而无需再次验证用户名和密码。

  那么,Token如何获取,又如何动态赋值给下一个请求呢。这里,我们给登录会话添加一个正则表达式提取器。

  首先,从登录会话的返回报文中,找到"token: ",然后在脚本中添加正则表达式提取器,引用名称为token,正则表达式为"token":"(.*?)",模板为$1$。这个正则表达式的含义是,()中封装了待返回的字符串,.表示匹配任意字符串,*?表示匹配零次或多次后停止。完整的含义是:匹配开始字符为: ",结束字符为最后一个",匹配两个引号之间的任意字符,匹配一次或者多次,当匹配到第一个字符串即停止,将字符串保存到变量token。

1-3.jpg

  在下一个查询交易请求中,可以直接使用变量${token}关联token信息。线程组循环多次执行,${token}始终保持当前登录状态的取值,并赋值给查询交易的请求。

1-4.jpg

  场景二:性能测试循环使用数据

  在进行性能测试时,某些特殊的场景往往导致数据不能循环使用,或者有使用次数限制,而高并发压力测试需要庞大的数据量,因此准备数据费时费力。这时,将两个“反向”的交易串联起来,便可轻松解决数据循环使用的困难。比如做理财购买交易的性能测试时,随着测试轮次的增加,账户余额越来越少,如何方便快捷地实现资金回退呢。根据不同理财产品业务逻辑的差异,有卖出和撤单两种选择。假如当前产品支持实时持有,让客户买完再卖出,相当于前面的购买行为被抵消了。

  在设计测试脚本时,需要把购买和卖出请求放在同一个线程组里。首先设计正则表达式,通过"NUM_SEQ_AR ":"(\d+)"提取买入成功返回的合约号,\d表示提取纯数字,一般金融机构合约号都是数字形式存储。

1-5.jpg

  然后通过${Seq}引用合约号,作为卖出交易的输入数据,客户账户信息可以和买入交易来自同一个CSV文件,实现前后交易一致。

1-6.jpg

  通过添加JMeter调试工具,后置处理器->Debug PostProcessor,观察正则表达式运行情况。

1-7.jpg

  正则表达式提取合约号与买入返回报文一致,正则表达式书写正确。

1-8.jpg

  正则表达式看着复杂,其实只要理解了它的用法,在实际使用场景中只需具体问题具体分析,结合资料多动手实践,不管多棘手多复杂的问题都有办法化解。正则表达式蕴含了强大的功能,本文也只是做了最基本的介绍,同学们可以自行摸索更多用法,让我们的性能测试、接口测试变得更加easy!


作者:高晶晶   

来源:51Testing软件测试网原创

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 前面的博客中,我介绍了appium多线程中如何获取devices的值。今天我们讲讲如何检查端口是否被占用。因为,我们要获取多线程中的多个端口,但是,在获取多个端口之前,我们得先检查端口是否被占用。思路:通过os.popen命令,接收返回的端口值,如果返回的值的长度大于0,说明端口被占用了,否则,端口就没有被占用。如上,通过创建一个类,写一个方法,检查端口是否被占用。通过对appium多线程自动化的学习,是不是发现,我们每一步动作,都是创建一个类,写一个方法,通过调用这个类中的这个方法,供后面使用。PO模型中,分层设计,后面的类都是调用前面的类中的方法,来达到目的的。多写一写,慢慢就会熟悉pyt...
            0 0 661
            分享
          • 此文章为在拥有C语言基础的情况下,对小甲鱼的python课程进行学习的笔记,对涉及到的新概念与实用的语法知识进行了总结与归纳。1、Python中的BIFBIF:Built-in Functions,python中的内置函数,即为了方便程序员快速编写脚本程序而直接调用的一种函数。大意如同我们上数学课时定义函数f(x),g(x),h(x)等,而后解题过程中可以直接将数值代入指定的函数中,在这里python的BIF就相当于我们事先定义好的函数。我们较为常见的BIF例如:print() 打印到屏幕,即将括号里的内容显示到屏幕上;input() 接受用户输入并返回,用temp这个变量...
            0 0 1084
            分享
          • 1、什么是兼容性测试?兼容性测试侧重哪些方面?参考答案:兼容测试主要是检查软件在不同的硬件平台、软件平台上是否可以正常的运行,即是通常说的软件的可移植性。兼容的类型,如果细分的话,有平台的兼容,网络兼容,数据库兼容,以及数据格式的兼容。兼容测试的重点是,对兼容环境的分析。通常,是在运行软件的环境不是很确定的情况下,才需要做兼容。根据软件运行的需要,或者根据需求文档,一般都能够得出用户会在什么环境下使用该软件,把这些环境整理成表单,就得出做兼容测试的兼容环境了。兼容和配置测试的区别在于,做配置测试通常不是Clean OS下做测试,而兼容测试多是在Clean OS的环境下做的。2、我现在有个程序,...
            11 11 984
            分享
          • 今天主要介绍接口用例设计的几大法宝,为了统一接口用例编写的规范,提高可维护性,我们需要列出一些准则,方便大家共同遵守,主要是一些考虑范围和一些编写规范。很多自动化平台或者自动化技术更多的是解决行得通问题,但是具体接口怎么测,怎么测试充分,怎么不遗漏,其实也是有章法可循的,而且并不比手工测试简单,接下来,我们一起看看吧:接口测试用例设计主要考虑哪些呢?1、原则:功能测试、接口测试同样重要;2、API是第三方平台接入的入口,但最终落地仍然体现在功能上,故覆盖相关业务及异常场景。这类场景,通过APP或界面是无法覆盖到的,所以接口测试用例这块一定要覆盖全。3、接口健壮性用例设计范围:消息节点必填项缺失...
            6 4 7534
            分享
          •   前言  软件测试行业3年多经验,学历大专+自考本科,主要测试方向web,PC端,wap站,小程序公众号都测试过,app也测过一些,C端B端都有,除功能外,接口性能也有涉猎,但是不能算精通,脚本也能写一些,但是工作中用不到(基本工具开发的脚本已经够工作中使用),不知道是互联网行业今年如此艰难,还是我自己真的太菜了?坐标区域,北京,这是我的一位朋友目前遇到的状况!接下来我们就帮他分析分析他可能存在的问题?有那些方面可以优化的,甚至学习补强的,我们一一细说!  海投简历迟迟没有得到公司邀约面试?可能存在的问题  企业一般看3点: 学历 能力 履历  学历不行的情况下把自身技术提升起来。 技术硬了...
            0 0 1860
            分享
      • 51testing软件测试圈微信