JMeter关联之正则表达式提取器

一、关联 关联的正则表定义
为什么要关联在客户端与服务器通信过程中,多个请求/响应间的达式数据会有相互依赖的关系。比如上一个请求返回的关联某些响应数据在后续的请求中需要用到。
下面是正则表一些典型的例子:
比如第一次访问网站获取的session id在后续的请求都会将其传给网站。服务器生成token返回给用户,达式在后续的关联请求中要带上token。根据条件查询某记录,正则表在查询结果集中选择记录进行操作(比如删除)。达式...但是关联有些通信协议是无状态的,不存在上下文相关性。正则表多个请求/响应之间的达式数据不能直接进行传递;并且每次服务器返回的数据不是一成不变的,传递的关联数据不能通过硬编码(写死)保存来解决。
比如上面三种情况都会产生动态变化的正则表数据:
session id的生命周期一般在关闭浏览器时就结束了,b2b供应网每次打开浏览器访问返回的达式session id并不相同。token也有生命周期,一般也是随机,无状态的。若查询条件参数化了或服务器返回的查询结果集改变了,后续的操作可能会失败。在这些情况下,可以考虑将服务器返回的动态变化的数据保存到某个参数中,需要时再从中取出。关联原理举个例子,看电影,看电影过程有如下步骤:
购票验票观影每个步骤可以看做一个请求/响应。观众相当于客户端,影院方相当于服务器。
过程如下图所示:

观众购买的电影票可以看成服务器返回的响应数据,要验票通过才能入场观影。
观众购票相当于一个请求,验票是下一个请求,这需要将上一个请求返回的响应数据(电影票)放在下一个请求中发送给服务器处理。
假设这部电影非常精彩,想重新再看一次,因为电影票只能使用一次,站群服务器观众必须重新购票,才能验票通过入场;使用第一次购买的电影票入场肯定会被拒之门外。
为了解决这个问题,可以考虑做如下假设:
每次将购买的电影票放入随身携带的LV钱包,并且在放入之前将使用过的票丢弃,以防止入场时掏错票;入场的时候,从钱包中取出票来验票,这样就万无一失了。
将电影票放入钱包中,相当于将服务器返回的数据保存起来了,这里钱包就是保存关联数据的参数。
关联的定义将服务器返回的数据包中满足条件的数据保存到一个参数中的过程。
怎样将服务器返回的数据保存起啦,JMeter中可以使用后置处理器来处理关联数据,常见的方法有:
正则表达式提取器。JSON提取器。需要关联数据的特征怎样确定哪些数据是需要做关联的IT技术网,可以从关联数据的特征来识别出这些数据。关联数据有如下三个特征:
服务器返回需要关联的数据一定是从服务器返回的。
客户端输入的数据不需要进行关联,比如输入的用户名与密码。此特征是必选的。
数据会再次发送给服务器处理保存上一个请求响应的数据,其目的是为了将其用于下一个请求中,否则保存起来没有意义。此特征是可选特征,也就是说不再次发送也是可以保存数据进行关联的。
数据动态变化上一个请求响应的数据若不会动态变化,完全可以写死在脚本中,不需要花力气额外保存再次取出。正是由于每次返回的数据动态变化,我们需要根据某种规则将这些动态变化的数据找出来保存,然后会取出实际返回的数据。但此特征也是可选的。不动态变化一样可以保存进行关联,但意义不大。
二、正则表达式介绍
JMeter通过内嵌的Apache Jakarta ORO软件来解析处理正则表达式。
Jakarta-ORO是用于处理文本的一组Java类,是目前功能最全性能最好的正则表达式API之一,它提供兼容Perl5类型的正则表达式。
单行模式与多行模式



四、 正则表达式提取器
配置项Apply to:
与响应断言中用法一致,不再赘述。
Field to check:
BodyResponse Body,比如HTTP响应报文的实体主体,不包含状态行与首部。
Body(unescaped)Response Body(转换了转义字符),对HTTP响应报文的实体主体中的所有HTML转义字符进行了转义处理。由于转义时没有参照上下文,在处理时可能会出错,并且开启此选项会严重影响性能,故不建议使用。
Body as a Document通过Apache Tika从各种类型的文档中提取文本。此选项开启也会严重影响性能,谨慎使用。
Response Headers一般用于HTTP请求,HTTP响应报文中的首部。
Request Headers一般用于HTTP请求,HTTP请求报文中的首部。
URL一般用于HTTP请求。HTTP请求报文中的请求URL地址(未开启重定向功能);若开启了重定向功能,则包含原始请求中的请求URL地址与重定向后的URL地址。
比如前面访问新浪的例子,开启了重定向后,则包括:http://www.sina.com/,http://www.sina.com.cn/和https://www.sina.com.cn/三个URL地址。
Response code一般用于HTTP协议,指的是HTTP响应报文中的状态码,比如200、301、404等。
Response Message一般用于HTTP协议,指的是HTTP响应报文中的原因短语,比如OK、Moved Permanently、Not Found等。
Name of created variable:
用于存储结果的JMeter变量的名称。
Regular Expression:
用于解析响应数据的正则表达式。使用正则表达式中的()来捕获响应字符串。
Template($i$ where i is capturing group number,starts at 1):
设置捕获到的字符串以怎样的格式保存到存储结果的JMeter变量中。
在此项中,可以用$1$表示引用捕获组1中的内容,$2$表示引用捕获组2中的内容,... ,$n$表示引用捕获 组n中的内容, $0$表示引用正则表达式匹配后的整个字符串。
注意除了使用$n$引用捕获组的内容外,还可以加入需要的字符,将匹配的内容按照某种格式保存。
Match No.(0 for Random):
匹配序号。从匹配的结果中怎样挑选匹配项。
若正则表达式每个捕获组有多个匹配项。
则1表示第一个匹配项,2表示第二个匹配项,... ,依次类推;0表示从多个匹配项中随机选择一个;-i(i=1,2,3,... ,N,-i即负整数)表示引用所有的匹配项。
Default Value:
如果正则表达式没有匹配到内容,则保存结果的JMeter变量将设置为默认值,这样会对调试JMeter测试带来便利。如果没有提供默认值,则很难判断正则表达式是否匹配失败,或者RE元素是否未处理或者是否使用了错误的变量。
但是,如果您有多个设置相同变量的测试元素,那么如果表达式不匹配,您可能希望保持变量不变。在这种情况下,请在调试完成后删除默认值。
Use empty default value:
如果选中该复选框则默认值为空,则JMeter会将保存结果的JMeter变量设置为空字符串。
四、应用案例
案例说明业务操作步骤:
登录ECshop后台管理系统。设置查询条件(比如按商品品牌)搜索商品。在返回的查询结果集中选择第一个商品删除。这里每一步骤对应一个HTTP请求,在第二个请求中每次返回的查询结果集不一样(因为每执行一次会删除一个商品),故向第三个请求传递的商品编号参数不能写死,需要从第二个请求对应的响应数据中提取出来。
操作步骤这里对第二个步骤一些细节进行说明:
在第二个请求返回的响应数据中观察:
...
23)\">8<\/span><\/td>\r\n \r\n
href=\"..\/goods.php?id=23\" target=\"_blank\" title=\"\u67e5\u770b\">
src=\"images\/icon_view.gif\" width=\"16\" height=\"16\" border=\"0\"
...发现返回的goods_id的左边界为goods.php?id=,右边界为\",但考虑到.与?以及\为元字符,故需要转义,则正则表达式可以设置为:
goods\.php\?id=(\d+)\\"
在删除商品请求中将提取的商品编号替换写死的数据:

相关文章
华为Mate10照相(从画质到拍摄功能,华为Mate10领先业界的照相实力)
摘要:华为Mate10作为华为旗下的旗舰手机,搭载了卓越的照相系统,以其优秀的画质表现和强大的拍摄功能成为用户心目中的理想选择。本文将以华为Mate10的照相性能为主题,详细探究其画质表...2025-11-05英伟达GTX780Ti(探索GTX780Ti的性能与创新,为你带来绝佳的游戏体验)
摘要:作为一款经典的显卡产品,英伟达GTX780Ti凭借其出色的性能和创新的技术引领着游戏行业。本文将详细介绍GTX780Ti的各项特点以及其在游戏中的表现,带您深入了解这款令人惊叹的显...2025-11-05LG27MP58(突破你的视觉界限,尽在LG27MP58的高清显示屏)
摘要:随着科技的发展,我们的视觉体验也越来越重要。在如今数字化时代,我们对于显示屏的需求越来越高,希望能够享受到更为清晰、逼真的图像。而LG27MP58则为我们提供了一个全新的视觉体验,...2025-11-05老毛桃V9教程(快速入门老毛桃V9,掌握关键功能,实现个性化定制)
摘要:老毛桃V9是一款功能强大的系统优化工具,它了各种常用的系统调整和优化功能,能够帮助用户快速提升电脑性能。本教程将以老毛桃V9为主题,为读者详细介绍其使用技巧,帮助读者轻松掌握老毛桃...2025-11-05爱国者模组电源(国产电源的新选择,高品质保障与先进技术的完美结合)
摘要:随着科技的飞速发展,电子设备在我们生活中扮演着越来越重要的角色。而作为电子设备的核心,电源对其运行稳定性和寿命有着至关重要的影响。爱国者模组电源作为一款国内研发生产的高品质电源产品...2025-11-05教你如何使用U盘在Win7电脑上进行启动(一步步教你轻松启动Win7系统)
摘要:随着技术的不断进步,使用U盘进行系统启动已经成为许多用户的首选。本文将详细介绍如何使用U盘在Win7电脑上进行启动,帮助读者在遇到系统问题时能够快速恢复系统,提高工作效率。...2025-11-05

最新评论