我对性能测试的思考和总结
声明:
本次举例的应用系统及架构纯属虚构,仅描述整个过程的思路与解决方案。
前言:
2020,农历庚子年,年初,疫情蔓延。
我在和同行交流时,说的最多的两件工作:健康码、在线教育,这篇博客内容就以健康码开始。
正文:
团队需要开发一款以健康安全为主题的信息填报并生成个人健康码的应用系统,
(题外话:作为软件测试人员,你会怎么测试这个功能?)
一个应用系统的测试,要测试的内容包括了功能特性的测试和非功能特性的测试,非功能特性的测试包括:性能测试、负载测试、压力测试,安全测试等;
从压力测试的角度出发,我提取其中的一个测试需求:在一系列大量并发用户等情况下,查看应用系统在峰值使用情况下是否存在功能隐患及容错能力。(博客园:祝新新zxy)
假设这是一个系统的架构图,对用户来说,需要在线填报个人信息;对服务来说,需要收集用户信息并经过运算生成对应的健康码并反馈给用户。
我们的测试对象是服务器,不需要考虑页面加载等情况,从中可得出想要的性能指标,
· 大量并发用户填报信息时,填报表单页面刷新与提交的响应时间与错误率;
· 大量信息在服务器处理时,生成对应健康码的响应时间与错误率;
有了性能指标以后,又产生了新的问题,如何开始?
我简单梳理了测试计划和方案,
首先要想到的是,怎么模拟上千上万用户同时填报个人信息,
然后实时观察服务器负载情况和响应时间,
最后得出性能结果并产出性能报告。
第一步模拟数据并发,
最原生的方法,叫上全公司的人,喊123同时点,也是个“不错”的办法。
或者找个软件性能测试工具,
让这个工具代替在某一时间段,有多少人员同时做了什么事情。
目前市面上人气最高的,一个是开源免费的Apache JMeter,另一个是商业产品HP Loadrunner,
我选择了开源免费的Apache JMeter。
JMeter的安装与启动很简单,有太多相关教程此篇博客不赘述,
而与常用应用软件不相同的地方就是,常用软件下载后只要双击可执行文件即可打开,但JMeter需要通过Java虚拟机启动脚本。
选定了测试工具,下一步需要知道如何运用软件模拟大数据并发。
需要先简单介绍一下JMeter的基础使用原理,
JMeter会默认创建一个测试计划,在这个测试计划内可以创建需要使用的测试任务,比如填报并提交个人信息、服务器生成健康码,
所以要创建多个线程组,这个线程组相当于多个用户同时执行相同的任务,在这里支持设定多少个用户提交了多少次数据,
最后在每个线程组下可以创建请求及返回结果。
因此整个结构也可以分解为;测试计划-线程组-请求-监听及结果。
根据以上对JMeter的介绍,回到测试指标,梳理出本次需要编写的测试脚本:
·设定一分钟的执行时间,模拟一万条数据每秒同时提交信息
·设定一分钟的执行时间,对提交的信息实时更新
在JMeter中创建两个线程组,线程数=10000,线程启动的时间=60s,(就是在60秒内启动10000个线程组,每秒大约并发167个request请求)
一个线程组调用提交信息http接口,另一个线程组调用生成健康码的http接口,
最后需要对性能测试的结果产出,
JMeter支持自行安装插件,提供结果图表:
·应用、数据库服务器CPU、内存结果实时动态图
·事务响应时间(最大值、最小值、平均值)动态图
·事物正确率及错误原因分析
·…
建议整个性能的结果统计,可以包含当前软件测试版本符合预期用户并发量、最大支持用户数量的数据、超出负载导致服务器卡死、大规模报错的数据。
测试成果:
根据本次性能测试得出实际数据(模拟数据),
并发量超过10000时,服务器的最大响应时间超过了2秒;
并发量超过13000时,服务器的最大响应时间超过了5秒,CPU占用率超过70%;
并发量超过15000时,服务器的错误率超过5%,页面系统错误...
这些数据一方面,为软件提供了性能数据支持,软件的并发量、错误处理情况是否符合最初设计的理想结果;另一方面可以辅助开发进行性能调优;
结语:
这篇博客是我本次对性能测试的工作思考与总结,如果有理解有误的地方,欢迎指出。
---------------------------------------------------
2017年入行的软件测试工程师,专注于软件测试
记录学习过程中的所思所想,内容原创
如有疑问,可邮件联系,1074684960@qq.com