问答 jmeter 中调试取样器是否禁用影响正则表达式提取器。

请叫我叼毛 · 2022年07月26日 · 最后由 tangoliver 回复于 2022年08月04日 · 9557 次阅读

问题描述:

jmeter 线程组下有 4 个元件分别为:1.数据库取样器。2.正则表达式提取器。3.调试取样器。4.http 请求。以上四个元件在查看结果树中仅正则表达式提取器不会出现,其余几个取样器均会在结果数中显示。当四个取样器全部启用时 结果数全绿。但是当 3.调试取样器禁用后就会导致 4.http 请求飚红。查看 4.http 请求的 body 发现其中我引用的正则表达式提取器中的参数传入了缺省值。

发生概率:必现。

1.只要我启用调试取样器,整个线程必然全通。

2.只要我禁用调试取样器 http 请求的参数中引用了正则参数的值必然为缺省值。

寻求解答:

1.个人理解(对 jmeter 的认知):调试取样器主要用来查看各个参数的取值情况,为了去定位 bug,不会干扰线程的运行。

2.逻辑崩塌:现在调试取样器是否禁用已经干扰到了线程的运行。

3.期待结果:告知我是我对 jmeter 中调试取样器认知错误还是其他原因,如果是认知错误那么正确的调试取样器的认知是什么。

共收到 11 条回复 时间 点赞

你是不是都没搞清要正确运行数据库取样器需要做什么,jmeter 需要 2 个元件才能正确访问数据库并执行命令: JDBC Connection Configuration 和 JDBC Request 只有先配了 JDBC Connection Configuration 才能正确执行 JDBC Request,你只说了数据库取样器,没说数据库配置连接; 第一步都不对,后面不管你用不用调试还是正则,结果都是不对.

理论上调试取样器是不会影响正则表达式提取结果的, 我还特地去试了一下,并没有出现你说的这个问题, 建议从其他地方排查一下看

数据库配置元件已经在线程外配置好了 当前数据库请求元件正确返回了结果

你只做了两个对比 禁用 or 不禁用,其实还有一个删除 3.调试取样器。如果还是复现你的问题,那就是你自己脚本有问题 。理论上调试取样器不会对结果有影响

试了问题照旧。
描述:
jmeter 版本: 5.5
故障元件:调试取样器(Debug Sampler)
症状表述:有且仅有将调试取样器放在 http 请求上方且处于启用的时候才可正常取参,否则取出来的参数值都是缺省值。无论禁用、删除还是放在 http 请求下方都会使 http 请求中应用了 JSON 提取器的参数值为 JSON 提取器配置元件内的缺省值。

因为 Debug Sampler 也是和 HTTP 请求一样在取样器分类下,那么取样器肯定有他的入参出参,是不是我对这个调试取样器不参与线程实际的运行理解有误。按理来说大家都是取样器应该都有自己的作用。有了调试取样器的话他就会吧我 JSON 提取器里取出来的参数值放在内存栈或堆里了。但是如果没这个玩意你取的参数并没有存在内存里???

通过逐一验证我注意到我犯的一个错误。那就是当添加了数据库请求元件并能正常查出结果后,在同线程内下方 HTTP 请求中引用数据库的结果时,只需要从数据库的请求中拿出来Variable names中的一个参数名并用_int链接即可,比如Variable names处我写的是id;name;phone;sex那我无论我数据库语句查询的结果是什么他都会按照这里的参数逐一(列字段)匹配即列的重命名。这四个参数分别匹配数据库表的第 1,2,3,4 列。那么要用某一个列的某一个值的时候只需要从Variable names里面取列名_行号就行 ,比如 id_985;name_211;phone_996;sex_965 即在 HTTP 请求中引用数据库的值的时候并不需要 JSON 提取器直接用${id_211}来取值就行了。但是这样的弊端就是我只固定的取一个值。所以我加入了正则表达式提取器并在正则表达式提取器的元件中将引用名称设置为:ID;正则表达式为:id=(.+?),;模板为:$1$;匹配数字设置为:0(0 代表随机)。这样就能从整个数据表中随机取一个 id。那么这时我就有了新的问题请教,请问正则表达式提取器是否必须配合调试取样器Debug Sampler)来工作?不能只取不存即正则表达式是用来取的,而调试解调器是用来存的。只有加了调试解调器才能把你正则表达式提取器里取的这个 ID 存到内存里,后面的 HTTP 请求中${ID}才会先到内存里取这个值,取不到的时候则会返回缺省值。

jmeter 中调试取样器是否禁用影响正则表达式提取器?
答:否。二者相互独立。
请问正则表达式提取器是否必须配合调试取样器(Debug Sampler)来工作?
答:否。二者相互独立。

理论上,调试取样器只是会获取所有中间变量并打印出来,不会对数据做任何操作,无论有无都不应该影响逻辑。

但楼主的实践中,调试取样器的开启与禁用,确实产生了影响逻辑的效果。这个并非普遍现象,可能和楼主的脚本写法或者待提取的数据,有比较强的关联关系。没有这个脚本和被测系统环境的其他人,连问题重现都做不到,更别说协助定位问题了,只能各种瞎猜。

建议楼主把 jmx 脚本发上来,或者直接去看看 jmeter 的取样调试器源码,找一些源码解析的文章,看具体里面会不会有一些操作相关的逻辑,造成这个影响?

PS:想要获得随机数字作为 id 值,用一个 random 函数就行了,不需要用正则表达式吧?

按我的记忆,sampler 与正则表达式提取器(不限,所有后置处理器都这样)同级, 则所有同级 sampler 执行后都会执行一遍正则表达式提取器, 所以:
1、一般后置处理器都放在 sampler 的子节点上
2、同级时,“调试取样器是否禁用已经干扰到了线程的运行”,是正常的,因为调试取样器启用时会从调试取样器的结果(调试取样器响应为 JMeterVariables:列表)中正则提取,会影响紧邻的下一个 sampler 中使用正则表达式提取的变量

调试取样器,不会影响你的测试,会影响就是你的脚本设置有问题

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册