目录:导读
- 前言
- 一、Python编程入门到精通
- 二、接口自动化项目实战
- 三、Web自动化项目实战
- 四、App自动化项目实战
- 五、一线大厂简历
- 六、测试开发DevOps体系
- 七、常用自动化测试工具
- 八、JMeter性能测试
- 九、总结(尾部小惊喜)
前言
例如:一个登录功能它能实现登录操作,但是登录过程需要 10s 才能进入到主页面,这就说明软件的性能不好。
说到性能测试,第一印象可能是高大上,因为它涉及到评估系统的性能、稳定性和可靠性。确实,性能测试水很深,如果玩得比较溜就能发展成性能测试专家、架构师级别。
对于初中级测试同学的要求大概就是会接口压测,能根据生成的报告分析 TPS、并发量、吞吐量、资源利用率等关键指标,可以协助开发人员进行性能调优。
什么是性能测试?
性能测试是指通过自动化的测试工具(例如:Jmeter、LoadRunner、Locust 等)模拟多种正常值、峰值以及异常负载条件来对系统的各项性能指标(例如:响应时间、吞吐量、并发量、资源利用率、错误率等)进行测试。
功能测试关注的是 1 个人的操作(也就是关注该功能是否能够实现),性能测试关注的是多个人的操作(性能测试的前提是功能没有问题)。
性能测试指标
知道了什么是性能和什么是性能测试之后,我们需要了解一些性能相关的指标,只有通过性能指标的确立和分析,我们才能判断软件的性能是否符合要求。
①响应时间 RT(Response Time)
从用户发送一个请求到用户接收到服务器返回的响应数据的这段时间就是响应时间。
通常使用平均响应时间、最大响应时间、百分位响应时间等来衡量。
响应时间 = 呈现时间 + 网络传输时间 + 服务器端响应时间 + 应用延时时间
②吞吐量(Throughput)
单位时间内系统处理的客户端请求数量。
通常使用请求数/秒(QPS)或请求数/分钟(RPM)作为吞吐量的单位,还可以使用页面数/秒表示,从业务的角度来说也可以使用访问人数/天 或 页面访问量/天 作为单位。
throughput=(number of requests)/(total time)
③并发数(Concurrency)
同时并发使用系统的用户数量,通常使用最大并发用户数、在线用户数、系统用户数等来衡量。
并发用户数:某一物理时刻同时向系统提交请求的用户数,提交的请求可能是同一个场景或功能,也可以是不同场景或功能。
在线用户数:某段时间内访问系统的用户数,这些用户并不一定同时向系统提交请求。例如:日活 —— 表示每日活跃用户数
系统用户数:系统注册的总用户数据。
三者之间的关系:系统用户数 >= 在线用户数 >= 并发用户数
④资源利用率
对不同系统资源的使用程度,通常以占用最大值的百分比来衡量。
⑤CPU使用率
CPU 就像人的大脑,主要负责相关事物的判断以及实际处理的机制。
CPU 使用率是指 CPU 在运行系统时的占用率,通常使用平均 CPU 使用率、峰值 CPU 使用率来衡量(一般不超过 80%-90%)。
⑥内存使用率
内存就是大脑中的记忆块区,将眼睛、皮肤等收集到的信息记录起来的地方,以供 CPU 进行判断,但是是临时的,访问速度快,如果关机或断电,内存中的数据就会消失。
内存使用率是指系统运行时内存的占用率,通常使用平均内存使用率、峰值内存使用率等来衡量。
⑦磁盘I/O
大脑中的记忆区块,将重要的数据保存起来,永久保存,关机或断电也不会丢失,速度慢,以便将来再次使用这些数据(通过查看读写)。通常使用磁盘读写速度、磁盘 I/O 请求数等来衡量。
⑧网络
带宽,通常使用发送 / 接收的速率来衡量。
性能测试工具
JMeter:功能强大且广泛使用的开源性能测试工具。支持多种协议和技术,包括 HTTP、HTTPS、Web Services、JDBC、FTP 等,可以模拟大量并发用户和生成复杂的测试场景。
LoadRunner:一款商业性能测试工具,适用于复杂的企业级应用程序。提供了广泛的协议和技术支持,具备强大的负载生成和监控能力,能够模拟大规模用户负载和复杂的业务流程。
Locust:开源的负载测试工具,使用 Python 编写。具有简单的语法和易于编写的脚本,可以模拟大量并发用户并执行复杂的测试场景。它还提供了实时监控和可视化报告功能。
不同的工具各具特色,在不同的测试需求和项目环境下选择适合的工具即可,这里推荐 JMeter 和 Locust。
性能测试流程
①分析性能需求,确定测试目标
性能指标可由产品经理或项目经理制定,或通过日志监控分析确定性能测试场景以及指标。
例如:事务通过率为 100%,TOP99% 在 5000ms 以内,最大并发用户数为 1000 人,CPU 和内存的使用率在 70% 以下。
②制定性能测试计划
制定性能测试策略,包括测试范围、测试环境、测试数据和负载配置等。
确定测试的时间(通常在功能稳定后,如第一轮测试后进行)和资源限制,制定测试计划的时间表和里程碑。
③编写测试方案
选择适合的性能测试工具,如 JMeter、LoadRunner 等。选择适当的监控工具,用于监测系统资源使用情况和性能指标。
④搭建 / 确认测试环境,准备测试数据
搭建符合测试需求的环境,包括硬件、软件、网络和数据库等。
配置测试服务器、负载发生器和监控工具,确保准备就绪。
⑤编写性能测试脚本
根据测试场景和负载类型,编写测试脚本,定义用户操作和事务流程。
设置性能测试工具的参数,如并发用户数、请求频率等。
⑥性能测试脚本调优(脚本增强)
设置检查点、参数化、关联、集合点、事务、调整思考时间,删除冗余脚本。
⑦分析和优化
对测试结果进行分析,识别性能瓶颈和问题所在,根据分析结果,提出优化建议和解决方案。
收集相关数据和日志信息提单给开发同学。
⑧回归测试
进行性能调优和优化测试,验证改进措施的有效性。同时业务测试也要回归,避免优化性能后影响功能的正常使用。
⑨编写测试报告
撰写性能测试报告,总结测试结果和分析,包括性能指标和问题列表。
提供优化建议和改进措施,供开发团队参考和实施。
将报告交付给相关团队和利益相关者,进行讨论和反馈。
⑩进行持续性能监控
在系统上线后,进行定期的性能监测和测试,确保系统的稳定性和可靠性。
根据实际使用情况和变化的需求,及时调整和优化系统的性能。
性能测试学习路线
①理解基本概念和原理
学习性能测试的基本概念,例如性能指标、负载、吞吐量、响应时间等。
了解性能测试的重要性,以及如何评估系统的性能和稳定性。
②掌握性能测试工具
选择一款常用的性能测试工具,推荐 JMeter,学习性能测试工具的基本原理和使用方法,例如:JMeter 常用的组件和元件、JMeter 实现参数化的三种方法、JMeter 响应结果断言和 cookie 管理器、同步计时器实现并发场景、接口关联性之正则表达式和 JSON 表达式提取器、JMeter 服务器资源监控和聚合报告分析等。
③工具增强
由于图形化压测需要消费资源,所以可以使用命令行脱离图形进行压测。当单机 JMeter 提供压力不够时,可以学学分布式压测。
JMeter 还可以学习基于 Beanshell 等第三方插件方式做二次开发,还可以将编写和调试好的脚本丢到 Linux 非 GUI 环境中执行,解决 Jmeter 在 Windows 环境下套接字太多,负载过大的痛点。
④分层监控学习
简单的使用命令(例如 Linux 命令 df、du、free、netstat 等)监控服务器资源,包括 CPU、内存、磁盘、网络等,会指标分析。
如果感觉不够直观,还可以学习如何搭建 Prometheus+Exporter+Grafana 进行图形化界面展示指标,也可以监控硬件和数据库。除此之外,还可以学习下 SkyWalking 做分布式链路监控,并结合钉钉做报警机制。
⑤性能瓶颈分析
学会分析常见的性能问题,例如:CPU 飙升如何定位到代码级别、接口响应时间过长怎么分析、慢查询 SQL 问题等。
简单来说,性能测试不达标就要判断是代码问题还是服务器资源问题,例如:通过监控系统的物理资源,发现 CPU 占用 100%,或者内存占满,带宽打满等就大概率是服务器资源问题,就提单子给运维同学。
如果 CPU、内存、带宽等都达标,测试发现还有性能问题,那就是开发问题,就要指派给开发去处理。
还可以通过工具如 Arthas 定位代码链路问题,总之到这个段位水就比较深了,常常需要跟开发同学配合一起发现解决问题。
⑥性能测试平台开发
到这一阶段基本属于性能测试中的大佬了,一方面需要懂性能测试的原理,另一方面需要会前后端开发技术栈,例如:前端 Vue,后端 SpringBoot、MyBatis 等。
专门做全链路压测平台的一般都是互联网大公司,有的是基于 Jmeter 套个壳子做二次开发,有的甚至完全脱离 Jmeter 开发自己的平台,就看公司需求跟成本投入了。
下面是我整理的2023年最全的软件测试工程师学习知识架构体系图 |
一、Python编程入门到精通
二、接口自动化项目实战
三、Web自动化项目实战
四、App自动化项目实战
五、一线大厂简历
六、测试开发DevOps体系
七、常用自动化测试工具
八、JMeter性能测试
九、总结(尾部小惊喜)
成功从来不是偶然的,它需要我们付出更多的努力和汗水。在追逐梦想的路上,只要我们坚定信念、勇往直前,就一定能够收获成功的喜悦。让我们一起奋斗,创造自己的辉煌人生!
每个人都有自己的梦想和追求,只要我们肯付出努力,坚持不懈地追求,就一定能够实现它们。让我们勇敢面对挑战,努力拼搏,创造属于自己的辉煌!
每一次努力,都是为了让未来的自己更加优秀。不要停下脚步,继续前行,让自己的梦想变成现实。只有坚持不懈,才能迎来辉煌的明天!