黑马点评 jmeter 测试乐观锁解决超卖的异常率Bug

0 阅读1分钟

当我将扣减库存的逻辑修改如下时,

// 5. 扣减库存  
boolean success = seckillVoucherService.update()  
        .setSql("stock = stock - 1") // set stock = stock - 1;  
        .eq("voucher_id", voucherId).gt("stock", 0) // where id = ? and stock > 0  
        .update();

我用jmeter去测试时,发现异常率为100%,按理来说是50%,然后我去分析jmeter查看结果树的报告,发现HTTP请求错误的Response code 为 401,那我们在黑马点评里有设置返回状态码为401的一段代码如下,没错原来是我在jmeter没有设置authorization

//    前置拦截器  
    @Override  
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {  
        // 1. 判断是否需要拦截 (ThreadLocal 中是否有用户  
        if(UserHolder.getUser() == null){  
            // 没有 需要拦截 设置状态码  
            response.setStatus(401);  
            return false;        
            }  
        // 有用户  放行  
        return true;  
    }

1. 如何设置authorization

打开jmeter,右键添加

操作如下 Pasted image 20250702141048.png

解决了 异常率也为50%,再次验证两张表

Pasted image 20250702141517.png

查看 tb_seckill_voucher 表,库存stock为0, tb_voucher_order也有100条数据