【Bug记录】黑马点评使用jmeter进行秒杀抢购时报401以及200后HTTP请求依旧异常的解决办法
项目场景:
学习黑马点评时,老师的优惠卷秒杀编码完成后用到了jmeter来进行压测。老师默认我们具有jmeter使用基础,所以在视频中没有展示一些jmeter配置细节,导致我在实际压测中出现了一些与视频效果不一致的报错,故记录下来,共勉学习。
问题一:Response code:401
发送HTTP请求后,数据库没有变化,而JMeter直接返回状态码401
Thread Name:秒杀抢购单人 2-71
Sample Start:2024-12-12 10:42:06 CST
Load time:1
Connect Time:0
Latency:1
Size in bytes:121
Sent bytes:225
Headers size in bytes:121
Body size in bytes:0
Sample Count:1
Error Count:1
Data type ("text"|"bin"|""):
Response code:401
Response message:
HTTPSampleResult fields:
ContentType:
DataEncoding: null
如图所示:
原因分析:
HTTP 状态码 401(Unauthorized)表示“未授权”,通常是出现了以下情况:
- 未提供认证信息:客户端请求访问需要认证的资源,但没有提供任何认证信息。
- 认证失败:客户端提供了认证信息,但认证失败了。这可能是因为用户名或密码错误,或者认证令牌(Token)无效或过期。
- 认证过期:即使之前成功认证过,如果用户的会话过期了,服务器也会返回 401 状态码。
- 权限不足:用户虽然已经通过认证,但可能没有足够的权限来访问请求的资源。
- 未配置认证:服务器可能配置为需要特定的认证方式,而客户端没有使用正确的认证方式。
- 跨域问题:在跨域请求中,如果认证令牌没有正确地随请求一起发送,也可能导致 401 错误。
所以说到这里应该就知道为啥报401了,噢,我没有加请求头呀!
解决方案:
如何在JMeter里面添加请求头呢?
如图,新建一个HTTP信息头管理器,然后把authorization的信息头加进去
这个请求头可以在redis里面或者网页找到:
加上以后就不会报401啦!
问题二:response为200 且数据库正常发生了超卖,但是jmeter所有请求都显示异常
添加完请求头后,又出现了问题二,情况如图:
原因分析:
这是因为我盲目参照视频增加了json断言 但是使用的是他的默认形态:
如果将这个json断言的元素给删除,那么所有的HTTP请求都会成功:
那么老师到底为啥要设置一个json断言呢?
他是为了区分成功拿到库存和失败拿到库存这两种情况 所以我们的json断言要考虑这两种情况
解决方案:
我们的json断言应该设置success的期望值为true 记得勾选添加期望值
这样就可以做到和视频里一样的判定效果啦!