接口测试-工作心得记录八(使用locust库书写接口并发)
年前功能不提测,这几天看了pytest强大是强大,但是不知道怎么用和怎么替换之前用unittest写的case,我最近在想想多看看文档找找思路。换个脑子就把之前想写的接口并发locust写的东西拿出来写一个,目前还不到以后什么时候能用到就拿出来直接改改就用了。接口性能本身也是一个非常大的概念,太复杂了,各种参数的意义,怎么调整等等都需要在实践中慢慢体会,虽然目前工作还没有这个条件(我司不允许线上做接口并发的,只能在测试环境自己写的玩练练手),我现在主要也就写了起压的部分。
1.多接口并发:
这是一个标准的官方文档书写的格式,也不复杂。简单说一下我的理解,WebsiteUser类继承HtppLocust类,主要是设置并发并发间隔,通过属性min_wait和max_wait两个属性,
task_set属性用于指向继承TaskSet类的类名,host表示接口的域名。
LocustTask继承TaskSet类用于谁知并发行为,比如说并发什么接口,其中on_start()方法只运行一个用于初始化(我觉得和unittest的setUp()用法一样用于准备并发环境),最常用的就是请求登录接口获取登录态(task_set类调用了requests.session所以是session级别的,后面请求都是自带登录态的)。下面2个方法就是要并发的接口,装饰器@task用于设置接口权重,毕竟并发也是要模拟用户行为,我的想法还是要根据服务端请求的具体情况设置权重并发才有意义。
通过终端运行结果如图:
命令行 -f 表示要运行.py文件,--no-web表示不是web启动,-r表示并发用户数,-n表示并发数(这个并发数我还是不是理解怎么算的,我回头在看看文档,看看怎么计算的)。
运行结果就是这样,结果里面还有很多指标我一个个想通了在另写一篇。
2.接口循环并发
共享的数据用列表保存(思路来及debugtalk的博客,后面我会附上他的博客地址),我写了4个接口和对应接口的请求参数(其实我觉得这个也不算共享数据,只能想到这个场景),通过索引取值。这里面有两个点我想说说,第一个就是在WebsiteUser类里面定义的变量在UserBehavior类中想调用就需要self.locust.去弄。第二个index判断当索引越界了,终端运行的时候会有提示报错但是不会停止不知道为什么。运行结果如图:
2.数据唯一不循环取:
数据一样但是调用时候用完了就去除,用的队列(思路也是debugtalk博客有书写,例子也是登录接口不同的账号,其他场景我目前没有想到),队列蛮复杂,我也是写的时候了解一点点,首先先往队列(最普通的先进先出,其实先进先出还是后进先出在这个场景都是可以的)里面放数据,然后get一个队列少一个数据,这样保证数据唯一性不循环取。如图:
账号循环登录的场景,那么肯定要mobile是连续的,这个通过号码递增去取,要不然还要定义一个列表手写数据(想想都恐怖),测试环境直接orm在user表在一个号段区间直接creat了50条数据,代码如图:
写入结果如图:
最后就是并发结果如图:
上面切图表示mobile字段循环取值且没有重复,感觉写写蛮有意思的,下面附上参考的博客:
http://debugtalk.com/tags/Locust/
locust的官方文档大家也可以看看,debugtalk写的很赞的给了很多思路,最近看的很多,觉得越来越多的QA真的好厉害,也发现QA路越来越宽了,想想以后AI和大数据方向,还是觉得蛮开心,大概这些吧,我准备后面再看看pytest,想想怎么把接口数据维护这块弄一下。