ModuleNotFoundError: No module named ‘locust.events’,httprunner执行locust压测报错解决办法~
-
问题背景
上一篇文章讲解到初步使用httprunner执行接口测试,心血来潮想使用下httprunner+locust直接将yml文件脚本执行locust压测命令实现压测,激动的心颤抖的手,直接在控制台输入指令locusts -f yml脚本.yml
等待片刻…
指令成功的将yml文件自动转换成locustfile.py
文件
在离成功只差一步时,执行指令提示:ModuleNotFoundError: No module named ‘locust.events’
同时,打开locustfile.py
文件时,看到其中一个引用模块指令报错了from locust.events import request_failure
按照以往的经验,去第三方库里搜索该引用模块,发现并没有可供下载的模块
在网上翻遍了资料查看,都是执行locusts -f指令一步到位的…囧😳
but,等等!!这种情况极有可能是httprunner版本和locust版本不适配的原因。。。
查看了一个博主的使用httprunner+locust框架的截图,使用的locust是0.9.0版本的
我查了下自己安装的版本是1.5.3版本的。
-
所以原因也极可能是这个,后期也验证了确实是这个版本的问题,因为locust的0.x版本和1.x版本的区别还是很大的。而使用
locusts -f yml脚本.yml
只有在0.x版本的locust上,生成的locustfile.py
文件,调用依赖包才不会报错。 -
如下所示,将locust1.5.3版本卸载,使用
pip uninstall locust
再安装0.x版本
注意:如使用pip install locust
指令将默认安装1.x版本的,请使用pip install locustio
,但是出现如下提示:
所以正确安装locust0.x版本的指令为:pip install locustio==0.14.6
-
再看
locustfile.py
文件中,调用依赖包不再报错🆒
-
再次在控制台输入指令
locusts -f yml脚本.yml
我去。。。再次报错😶。。真是一波三折
但是,,经过我搜索资料,报这个错的原因为,locust0.x版本,依赖的一个名为gevent包版本不匹配😳
我们再看看刚刚安装成功locustio时有一个提示:
即这个gevent-20.4.0版本不对,网上办法是需要将其升级成20.9.0版本,话不多说,开干
使用指令:pip3.exe install --upgrade gevent==20.9.0
(不用管红色提示)
ps:如果在使用pip下载包时超时,可设定个安装源:pip3.exe install --upgrade gevent==20.9.0 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
(之前我的博客文已提到过这个问题) -
再次在控制台输入指令
locusts -f yml脚本.yml
哈哈,这次再无报错了,执行成功🆒 -
打开locust网页网址:http://localhost:8089/
准备好了,输入数值,即可开始压测了
压测两个接口即为我的httprunner的yml文件内编写的两个接口,证明httprunner+locust框架调用locusts -f指令成功执行了压测,达到了目的。 -
至此,httprunner+locust框架成功工作了,总结下,问题都为安装的包的版本不适配的原因,这种问题虽然不太明显,但是很容易就忽略了而无法找到问题的原因。所以还是需要仔细分析哈哈,实在费了些时间,网上的资料也并没有完整说明清楚版本问题的,希望我的这个经历能帮到大家哈哈