【实测】如何用python3来做压力测试引擎?

简介: 【实测】如何用python3来做压力测试引擎?

实测系列都是作者亲自实验测试调试出来的精品代码,收藏价值很高哦~


一提起压测,就免不了涉及底层并发线程。而一旦有人问底层的引擎用什么语言来写的时候,就会有回答说用java的,有用c的,还有用go的,甚至还有用js的.... 虽然众说纷纭,但是也有一个共识,那就是没人用python来做,原因也只有一个,python的并发能力并不好。

   

上面这个答案,无论是会python的,还是不会python的,无论是写过python并发的大佬还是没写过的小白,都会认同。以至于一直主修python的同学都会有意的避开压测平台的开发,还没尝试,便已认输。

   

但是有没有可能,这种现象是一种盲从和跟风呢?没真正自己写过压测引擎的同学也为了凸显自己很懂,就会附和着说python并发不行,不适合做压测呢?

   

作者之前也不确定,毕竟没有亲手做过。但是有一点可以肯定,就是如果用python的话,可以做到非常非常灵,可以灵活的精确的控制每一个压测阶段的并发,可以实现各种和线上真实用户行为的压力,说通俗点,就是做全链路压测会很简单。

   

那么现在的唯一问题就是,python的底层并发效果,到底能支持多少呢?能不能覆盖中小公司的软件的压测任务呢?可能公司的接口大多并发一百就完了,好点的并发五百,需求也只是三百而已,而python再差,也远远高于这个数据,就是可以轻松覆盖一般的压测需求呢?实在不行,还可以多压力机配合使用来保证呢?

   

为了给广大同学做实验,来真正看一看python到底能不能做压测引擎,本期就来开发一个吧。

   

首先新建一个项目和py文件:yingqing.py

640.png


我们即将在这个文件里写上咱们的第一个简单引擎【常量压测】


常量压测:即每秒发送的请求是恒等的
round变量: 轮数,每秒发一轮,Jmeter默认也是1秒均匀发出所有线程数
num变量:每轮的并发数script方法:模拟被执行的请求,只输出被执行的瞬间时间
one_round方法:每轮的引擎play方法:主引擎,入口函数。


脚本如下:

640.png


我们一共压3轮,每秒发出一轮,每轮压10个并发。来看看输出结果。


640.png

   

从上图中,可以发现,三轮的表现都很完美。92秒的时候10次,93秒的时候10次,94秒的时候10次。和预期是一样的。

让我们把数据拉大... round依然是3,num变成100。


输出结果:

640.png

中间省略...

640.png


中间省略...

640.png


 中间省略...

640.png


从上面结果可以看出,100并发的时候,依然是成功的.... 没有任何延迟,三轮都很完美。


我们继续把数据拉大,round=5轮,num=500并发


结果如下:第一轮的起:第58秒

640.png


第二轮起:第59秒

640.png


第三轮起:第60秒

640.png


第四轮起:第61秒

640.png


第五轮起:第62秒

640.png


结束最后:第62秒

640.png


从结果看出,5轮500并发,依然结果完美。均在一瞬间推出请求。几乎没有延迟。

后面的测试我就不给一一贴图了。直接说结论:


大概单轮超过28000(2.8万)并发的时候,才超过了一秒的时间。这个数据恐怕早就远远覆盖超过了99.99%的压测需求了吧?而这,还仅仅是一个进程下的多线程。如果启用电脑的全部核心的全部进程。那这个并发量会非常可怕的大。而且还可以多台压力服务器一起来配合执行某个压测需求。那样甚至可以覆盖到一些秒杀活动的压测需求哦~

所以实际上,用python来做底层压测引擎不是不可以,主修python的同学可以放心的进入压测领域了哦~


尾语:就像小马过河的故事,不要人云亦云,凡事有条件就亲自尝试一下,结果可能好,也可能坏。但是尝试的过程你会学到很多,成长很多。


广告:这个压测引擎 只是一个常量压测。

其实还可以进阶改造成持续增压,瞬时增压,阶梯增压,无限增压,高低转换等模式。

还可以升级成多阶段,多轮,多语言脚本多函数多接口请求的 超灵活引擎。说到底,一个人足以开发出来了。也可以完全覆盖各种中小型企业的压测需求了。


当然这些功能,在作者的私人培训班中早已实现并教学,其中用到的很多三方组件为限定原创,仅学员和粉丝可用。如果感兴趣的,可以加v : qingwanjianhua 来咨询培训哦~


进粉丝群加v: qingwanjianhua

相关文章
|
2月前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
314 1
|
3月前
|
运维 Linux 开发者
Linux系统中使用Python的ping3库进行网络连通性测试
以上步骤展示了如何利用 Python 的 `ping3` 库来检测网络连通性,并且提供了基本错误处理方法以确保程序能够优雅地处理各种意外情形。通过简洁明快、易读易懂、实操性强等特点使得该方法非常适合开发者或系统管理员快速集成至自动化工具链之内进行日常运维任务之需求满足。
231 18
|
2月前
|
数据采集 监控 Shell
无需Python:Shell脚本如何成为你的自动化爬虫引擎?
Shell脚本利用curl/wget发起请求,结合文本处理工具构建轻量级爬虫,支持并行加速、定时任务、增量抓取及分布式部署。通过随机UA、异常重试等优化提升稳定性,适用于日志监控、价格追踪等场景。相比Python,具备启动快、资源占用低的优势,适合嵌入式或老旧服务器环境,复杂任务可结合Python实现混合编程。
|
安全 关系型数据库 测试技术
学习Python Web开发的安全测试需要具备哪些知识?
学习Python Web开发的安全测试需要具备哪些知识?
280 61
|
安全 测试技术 网络安全
如何在Python Web开发中进行安全测试?
如何在Python Web开发中进行安全测试?
|
3月前
|
安全 测试技术 API
Python 单元测试详解
单元测试是Python开发中不可或缺的环节,能确保代码按预期运行、发现Bug、提升代码质量并支持安全重构。本文从基础概念讲起,逐步介绍Python单元测试的实践方法,涵盖unittest框架、pytest框架、断言使用、Mock技巧及测试覆盖率分析,助你全面掌握单元测试技能。
221 0
|
4月前
|
IDE 测试技术 API
python调试与测试
python调试与测试
|
4月前
|
人工智能 Java 测试技术
Java or Python?测试开发工程师如何选择合适的编程语言?
测试工程师如何选择编程语言?Java 还是 Python?多位资深专家分享建议:Python 入门简单、开发效率高,适合新手及自动化测试;Java 生态成熟,适合大型项目和平台开发。建议结合公司技术栈、个人基础及发展方向选择。长远来看,两者兼通更佳,同时关注 Go 等新兴语言。快速学习与实践才是关键。
|
5月前
|
测试技术 Python
Python测试报告生成:整合错误截图,重复用例执行策略,调整测试顺序及多断言机制。
如何组织这一切呢?你可以写一本名为“Python测试之道”的动作指南手册,或者创建一个包含测试策略、测试顺序、多断言机制的脚本库。只要你的测试剧本编写得足够独到,你的框架就会像一位执行任务的超级英雄,将任何潜伏于代码深处的错误无情地揪出来展现在光天化日之下。这些整理好的测试结果,不仅有利于团队协作,更像冒险故事中的精彩篇章,带给读者无尽的探索乐趣和深刻的思考。
148 10
|
5月前
|
测试技术 Python
Python接口自动化测试中Mock服务的实施。
总结一下,Mock服务在接口自动化测试中的应用,可以让我们拥有更高的灵活度。而Python的 `unittest.mock`库为我们提供强大的支持。只要我们正确使用Mock服务,那么在任何情况下,无论是接口是否可用,都可以进行准确有效的测试。这样,就大大提高了自动化测试的稳定性和可靠性。
254 0

推荐镜像

更多
下一篇
oss云网关配置