一、背景
公司需要对某个服务做性能测试,这个服务的能力是中间件转发的能力,产线的需求是,这个中间件的转发能力可以达到10000QPS,然后有了下面一系列折腾~
二、中间说明(GW)
下面就把这个中间件统一称为GW,GW是一个独立的转发平台,具体能力为所有请求不论内外网都需要经过一层代理,分发到对应的真实服务,简单就这幅下面这幅德行
三、简单测试方案
1、搭建一个可能支持10000QPS的被测应用服务;
2、使用locust进行施压
细节比如用例场景之类的就不展开说了
四、搭建一个可能支持10000QPS的被测应用服务;
考虑到QPS要达到一万以上,而且也只需要几个简单的mock接口即可,那我这边就选用了牛逼吹的巨响的Japronto高性能框架,比较如下,小伙伴们可以参考
五、locust测试
这里不讲locust的使用,网上一大把,这里主要说一下,locust如何控制住QPS,因为LOCUST的设计理念就是放飞自我的,不过里面有个细节可以控制一下RPS
class WebUser(FastHttpUser):
# 声明执行的任务集是哪个类
tasks = [BeTest]
# 被压服务的域名
# host = 'http://192.168.22.167:9080'
host = 'http://192.168.0.22:8080'
# 最小等待时间和最大等待时间 请求间的间隔时间 单位ms
# min_wait = 1000
# max_wait = 5000
wait_time = constant_throughput(10)
如图,我们使用constant_throughput()是可以在一定程度上控制RPS速率的,小伙伴可以回去测试一下,其中使用方法就是,如何我们设置的vuser为100,那我们的constant_throughput设置为1,则实际的rps会被控制在100,如果我们设置为10,则rps会被控制在1000,所以这个很好用;
总结一下:
上面写了一大堆废话,关键看这里就好了,用python测试中间件性能,被测服务可以用高性能框架Japronto,真的很好用;使用locust进行压测最常见的问题就是控制不住RPS,那就可以用constant_throughput来限制,最后就是如果公司自己有机房,建议用物理机,虚拟机很容易造成资源抢占导致RPS波动很厉害