Jmeter的一个坑,为这个问题困惑了好几天,记录下解题过程。
场景:多用户调业务接口,需要取到登录后的cookie,动态传参给业务接口。
问题:用Postman调登录接口,能取到响应的cookie的多个参数。
但在Jmeter里调登录接口,返回的cookie参数就少了,只有1个,取不到需要的2个参数。
配置方式:登录线程组下配信息头管理器、cookie管理器,正则提取cookie。
解题过程:
1通过调试器打印提取的cookie,就是响应中返回的这一个参数值,说明正则提取方式正确。是Jmeter中本身响应的cookie参数就少了。
2登录接口调通,说明入参正确。考虑是与cookie相关的配置不对。
3检查/bin目录下的jmeter.properties文件。“#CookieManager.save.cookies=false”修改为“CookieManager.save.cookies=true”且去掉注释“#”。修改后保存文件。
要存cookie,这里必须改为true,这一步很关键,确实原来是false。
再次用jmeter请求,响应的cookie还是一个参数。
4在线程组下尝试加Http缓存管理器,没变化。到这里有点麻木摸不着北,和cookie相关的配置该加的都加了,实在想不到还有哪里不对。
5 Jmeter请求方式的坑
登录接口是用form-data方式请求,Jmeter中是用multipart/form-data方式。
偶然的尝试,改用application/x-www-form-urlencoded请求,居然响应里返回了cookie的3个参数,全了。这太不科学了!
因为在postman中就是按接口格式form-data请求,能拿到全的cookie参数。但jmeter用同样的方式、同样的入参,却拿到cookie参数少,要改成用application/x-www-form-urlencoded才行。这是Jmeter的一个坑啊😂
希望给大家一些思路。