在使用过Postman之后,我发现他并不能很好的满足并发测试,因此我使用Jmeter来进行并发接口的测试,主要测试并发操作下,是否正确处理商品库存逻辑
2023/11/29
使用Jmeter来进行接口并发测试
在官方下载Jmeter然后配置好Jmeter之后,我们打开Jmeter界面
那么如何测试接口?
首先,我们的项目中是带有session验证的,所以我们不可能绕过登录页面来进行其他接口的访问
所以要完成将商品添加购物车逻辑的测试,应该同时发送两个请求,一个是登录请求,一个是添加购物车请求,具体页面如下:
让我们来进行每个页面的介绍
1.添加线程组
要进行接口测试,我们首先添加一个线程组,配置线程数,本次我想要模拟两个用户登录,因此选择2;配置Ramp-Up时间,这个指的是两个线程之间的时间间隔,因为我要模拟并发,所以间隔为0,同时进行,循环次数 1次
2.添加HTTP请求默认值
本页面,是为了方便我们进行接口测试,不用每次都写前缀,如图我的默认地址为http://localhost:8080/
3.csv数据文件配置
因为我要使用不同的用户登录,所有我需要录入账号密码,选择你的csv文件,然后配置变量名,我这里是username,password
csv文件内容直接写两列即可
4.HTTP Cookie管理器
这个无需任何配置,只需要添加即可,作用是自动管理你登录后获得的session,如果不加这个,那么你的login请求和接口请求是没有任何联系的,加了之后,接口请求就会带上你login获得的session
5.login请求
使用用户登录我们的网页,我使用的post带参数的方法,如果是json就需要去消息体数据里面写了,因为之前我们使用的用户配置文件来加载账户密码,所以参数的value是${username},${password},这样jmeter会自动加载我们配置文件里的账号密码
6.固定定时器
因为在项目开发过程中,我设置了秒杀需要等待10s中才可以添加购物车,所以这里添加一个固定定时器,等待10s
7.添加购物车请求
这里到了我们真正的接口测试了,我想要将库存为1的商品利用两个进程同时加到他们各自的购物车里面,这里传递一个id和num的参数,两个进程来抢占这个库存余量
8.查看结果树
我们点击运行按钮后,在这里查看运行的结果,无需任何配置
结果分析:我们可以看到,两个进程同时运行的情况下,都抢占到了最后一个库存,成功加入到了购物车,因为我们的controller中没有添加事务注解,而在没有开启事务的情况下,mysql的默认隔离级别为可重复读,也就是说,进程刚开始读取到的数据直到进程结束都不会改变,所以两个进程都读到了库存为1的商品数据