性能测试基础知识(四)编写性能测试方案
前提
已具备明确的测试计划:明确系统的上线时间点、当前项目的进度、所处的阶段、可以供调配的硬件资源和性能测试人员;以测试计划为依据开展方案编写工作,梳理性能测试案例应采用什么策略测试、设计测试场景的执行顺序、难点及性能关注点。
一、测试场景的设计
1、明确场景类型:
单场景设计:单一业务流程的处理模式设计。
混合场景设计:多个业务流程同时混合处理模式的设 计。
2、明确测试前置条件:例如需要准备多少并发用户、页面需要多少存量测试数据、软硬件配置是否符合测试要求
3、定义事务:
测试方案中需要明确定义好压测事务,方便分析响应时间。
事务可以根据业务实际操作步骤进行定义,例如操作从登录-进入测试页面-操作按钮-退出登录,每一个操作定义成一个事务,压测结果中,可以通过jmeter监控结果分析每一个事务的性能指标,如果某个事务响应时间较长时,可以把事务控制器的“Generate parent sample”选项去掉,这样可以分析该事务下具体哪一个请求异常。
二、明确监控对象
根据性能测试需求,明确需监控的性能指标,比如TPS、平均响应时间、点击率、并发连接数、CPU利用率、内存利用率、IO等,明确可能出现的性能瓶颈点(比如带宽、服务器软硬件资源配置不足、数据库死锁、Web服务器服务转发等)。
具体性能指标可以查看另一篇文章: 性能测试基础知识(三)性能指标
三、明确测试策略
1、明确性能测试的类型:需要进行哪些类型的性能测试, 比如负载测试、压力测试、稳定性测试等。
2、明确性能测试场景的执行顺序,一般是先执行单场景, 后执行混合场景测试。
3、如果是进行压力测试,还需要明确加压的方式,是需要绝对并发还是相对并发,比如按照开始前5分钟,20个用户,然后每隔5分钟,增加20个用户来进行加压。
性能测试策略可以查看另一篇文章: 性能测试基础知识(一)性能测试策略
四、性能测试工具的选取
性能测试工具有很多,常见的有LoadRunner、JMeter、nGrinder等,那么如何来选取合适的性能测试工具呢?
开始灵魂拷问:
1、被压测系统使用什么网络协议?
压测工具需支持被测系统的协议
工具 | HTTP/HTML、FTP、SMTP/POP3/IMAP、TCP/UDP、LDAP、JDBC、SOAP/XML-RPC、RESTful Web Services、WebSocket、MQTT、CoAP、DNS | Datagram Protocol (DGRAM) | JMS |
---|---|---|---|
JMeter | √ | √ | √ |
LoadRunner | √ | X | X |
2、哪些工具适用于同步请求/适用于异步请求的压测?
JMeter、LoadRunner都适用
- 同步请求
客户端发送请求后,必须等待服务器的响应才能继续执行后续任务。如果服务器响应延迟,整个过程将被阻塞,影响其他操作的执行(举个例子:你妈妈喊你吃饭,你说等一下,然后你妈妈就一直在旁边等着你,等你做完了,再一起去吃饭) - 异步请求
客户端发送请求后,可以继续执行其他任务。服务器响应延迟不会影响客户端的执行,因为请求是在后台处理的(再举个例子:你妈喊你吃饭,你说等一下忙完再就过去,你妈妈转身就走了,你忙完了,直接过去吃饭)
2、压测时连接的类型的长连接还是短连接?一般连接多久能释放?
-
长连接(Long Connection)
是指客户端与服务器之间保持一个持久化的连接,一旦连接建立,就可以保持长时间的通信。在长连接中,客户端和服务器可以随时发送和接收数据,而不需要每次都进行连接和关闭,适用于需要实时通信和长时间保持连接的场景,如即时通讯软件、在线游戏等,可以提高通信效率和稳定性。 -
短连接(Short Connection)
是指在客户端和服务器之间建立一次短暂的连接,完成一次通信后立即关闭连接。
3、性能测试工具并发加压的方式是多线程加压还是多进程加压?
一般采用的都是多线程加压
- 多线程共享进程的内存空间,创建和销毁线程的成本较低,适用于I/O密集型任务,如网络请求、文件读写等。例如,可以使用多线程下载多个URL,每个线程负责一个URL的下载任务,但多个线程共享内存,可能导致资源竞争和死锁;
- 多进程每个进程有自己的内存空间,进程之间互不干扰,适合并行计算,适用于CPU密集型任务,如数据处理和计算。例如,可以使用多进程并行计算斐波那契数列,每个进程负责一部分计算任务,但创建和销毁进程的成本较高,占用更多系统资源,进程间通信(IPC)相对复杂,效率较低。
五、明确硬件配置和软件配置
1、硬件配置一般包括:
服务器的CPU配置、内存配置、硬盘存储配置、集群环境下还要包括集群节点的数量配置等(集群配置要求至少有两台服务器)。
2、软件配置一般包括:
(1)操作系统配置:操作系统的版本以及参数配置需要同线上保持一致。
(2)应用版本配置:应用版本要和线上保持一致,特别是中间件、数据库组件等的版本,因为不同版本,其性能可能不一样。
(3)参数配置:比如Web中间件服务器的负载均衡、反向代理、参数配置、数据库服务器参数配置等。
3、网络配置:一般为了排除网络瓶颈,除非有特殊要求外,通常建议在局域网下进行性能测试,需要明确压测机以及被测系统服务器的带宽情况,是千兆网还是万兆网,服务器网络配置是虚拟机共用还是独享带宽,这对我们以后分析性能瓶颈会有很大的帮助,在网络吞吐量较大的待压测系统中,网络有时候也很容易成为一个性能瓶颈。
参考书籍《软件性能测试、分析与调优实践之路》
秘籍分享完毕,继续修炼~
wuu~~又是学到东西的一天!
给自己(也给我)点个赞!!!