1.设置抢购活动,比如活动对应的代金券、开始时间、结束时间、秒杀券的数量等
2.定时开始抢购活动,禁止超卖
3.用户抢购限制,一个用户只能购买一单

创建OAuthControllerTests生成token,文件存在根目录下

public class OAuthControllerTest extends OAuth2ServerApplicationTests {

    @Test
    public void writeToken() throws Exception {
        String authorization = Base64Utils.encodeToString("appId:123456".getBytes());
        StringBuffer tokens = new StringBuffer();
        for (int i = 0; i < 2000; i++) {
            MvcResult mvcResult = super.mockMvc.perform(MockMvcRequestBuilders.post("/oauth/token")
                    .header("Authorization", "Basic " + authorization)
                    .contentType(MediaType.APPLICATION_FORM_URLENCODED)
                    .param("username", "test" + i)
                    .param("password", "123456")
                    .param("grant_type", "password")
                    .param("scope", "api")
            )
                    .andExpect(status().isOk())
                    // .andDo(print())
                    .andReturn();
            String contentAsString = mvcResult.getResponse().getContentAsString();
            ResultInfo resultInfo = (ResultInfo) JSONUtil.toBean(contentAsString, ResultInfo.class);
            JSONObject result = (JSONObject) resultInfo.getData();
            String token = result.getStr("accessToken");
            tokens.append(token).append("\r\n");
        }

        Files.write(Paths.get("tokens.txt"), tokens.toString().getBytes());
    }

}

分为两种情况进行压力测试

1、多人测试抢购代金券

image.png

image.png

image.png

模拟5000个并发,2000个账号进行抢购

结果:数据库中t_seckill_vouchers表的amount会为负数,t_vouchers_orders的订单会超过100,卖多了
image.png

2、某个用户发起多个抢购请求

image.png

模拟10000个并发,1个账号进行抢购
JMeter察看结果树中有来自全局常量类的响应数据,显示出错


Natcret
1 声望0 粉丝