Jmeter关于循环/while控制器无法清除或更新cookie的解决方案

1.问题原因

jmeter自带cookie管理器, 勾选每次自动清除cookie, 无法清除线程内循环控制器等cookie. 它只会对线程间起效果,所以你在线程级别设置了多线程或者循环,这个cookie管理器都会帮你自动清除.
有时候我们在批量操作api的时候,需要隔断时间去更新cookie,这时候就会出现cookie无法更新的问题.下面亲测有效的两种方案,大家可以试试.

2.方案一: 不使用循环/while控制器,该用线程循环或多线程

  • 这两个都可以让cookie自动清除.
    在这里插入图片描述

3.方案二: 使用JSR223预处理程序

方案一会破坏我们原有的项目结构,变动会比较大,而方案二相对来说便捷,但需要有一定的代码基础,能查看和编辑.

  • 项目结构
    在这里插入图片描述
  • cookie管理器设置
    在这里插入图片描述
  • 逻辑说明: 这里为了让cookie不断更新,我们使用了计数器,让它不断变大,如果不做任何处理,执行的结果如下:
    在这里插入图片描述
    在这里插入图片描述
  • 可以看到上面的结果,cookie中的值并没有随着count的变化而改变.现在使用我们的JSR223处理器,运行结果如下:
    在这里插入图片描述
    在这里插入图片描述
  • 可以看到,这里的cookie已经开始跟着count变化了.
  • 先上具体的代码
import org.apache.jmeter.protocol.http.control.CookieManager;
import org.apache.jmeter.protocol.http.control.Cookie;

// 第一次不修改
String count = vars.get("count")
if(!"1".equals(count)){
	CookieManager cManager = sampler.getCookieManager();
	//获取cookie
	Cookie cookie = cManager.get(0);
	log.info("这是我目前存储的cookie:" + cookie.toString());
	//删除cookie
	cManager.remove(0);
	//设置最新的cookie
	cookie.setValue(count.toString())
	//更新cookie
	cManager.add(cookie);
}

使用步骤:
1.在你需要清除的请求添加前置处理器或者后置处理器(个人觉得添加前置处理器吧)中的JSR223预处理程序
2.然后脚本语言选择 groovy(Groovy 3.0.11 / Groovy Scripting Engine2.0)
3.在将脚本粘贴进去
如下图:
在这里插入图片描述因为我们用的计数器测试,所以忽略第一次执行.如果要运用此脚本,需要你稍作修改.比如获取cookie, 已经是否忽略第一次运行等等.

4.总结

我更推荐方案二,因为它能最大程度不破坏我们的项目结构.

JSR223常用变量:

变量功能
ctx访问当前线程的上下文
vars读写当前变量
props读写当前属性
sampler访问当前取样器
prev访问当前取样器结果
log写日志文件

参考链接:
CookieManger方法
Cookie方法
Jmeter之后置处理器JSR223 PostProcessor

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值