性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。压力测试是通过确定一个系统的瓶颈或者不能接受的性能点,来获得系统能提供的最大服务级别的测试。——来自百度百科
总结:性能测试是一个非常广泛的概念,包括很多方面的测试,可以将性能测试称之为非功能性测试
目的是验证软件系统是否能够达到用户提出的性能指标,同时发现软件系统中存在的性能瓶颈,优化软件,最后起到优化系统的目的。
包括以下几个方面
1.评估系统的能力,测试中得到的负荷和响应时间数据可以被用于验证所计划的模型的能力,并帮助作出决策。
2.识别体系中的弱点:受控的负荷可以被增加到一个极端的水平,并突破它,从而修复体系的瓶颈或薄弱的地方。
3.系统调优:重复运行测试,验证调整系统的活动得到了预期的结果,从而改进性能。检测软件中的问题:长时间的测试执行可导致程序发生由于内存泄露引起的失败,揭示程序中的隐含的问题或冲突。
4.验证稳定性(resilience)可靠性(reliability):在一个生产负荷下执行测试一定的时间是评估系统稳定性和可靠性是否满足要求的唯一方法。
总结:通俗来说就是发现软件的性能瓶颈
性能测试类型包括负载测试、压力测试、并发测试、容量测试、可靠性测试、异常测试。
负载测试:通过逐步加压的方法,达到既定的性能阈值的目标;阈值的设定应该是小于等于某个值,如CPU使用率小于等于80%。
压力测试:通过逐步加压的方法,使系统的某些资源达到饱甚至失效的状态,通俗来说就是在什么条件下能将系统压到崩溃。
并发测试:在同一时间内,多个虚拟用户同时访问同一模块、同一功能,通常的测试方法是设置集合点。
容量测试:通常是指数据库层面,目标是获取数控的最佳容量的能力,又称之为容量预估;具体的测试方法为在一定的并发用户,不同的基础数据量下观察数据库的处理能力,即获取数据库的各项性能指标。
可靠性测试:又称之为稳定性测试或疲劳测试。指系统在高压的情况下,长时间的运行系统是否稳定;比如当CPU使用率在80%以上,持续一周7*24小时,查看系统是否稳定。
异常测试:又称之为失败测试。指系统架构方面的测试,比如在负载均衡的情况下,测试down机或节点挂掉的情况下系统的反映情况。比如nginx下挂了三个tomcat,挂掉其中一个tomcat后,即nginx下只有两个tomcat,此时系统正常的反映是挂掉的tomcat不会影响我系统的正常运行,也就是说nginx会检测到挂掉的tomcat而不会将用户请求转发到down掉的这台tomcat上
开发语言:推荐Java编程语言,因为该语言在互联网领域使用非常广泛,很多公司的软件都是使用Java语言开发的,所以当你对Java语言深入了解后和开发进行交流沟通无障碍以及做性能测试的时候比其他人做的更深入
操作系统:现在大多数公司都使用Linux做为服务器,版本包括centos和ubuntu,绝大多数都是用centos系统;目前来说还是有少部分公司在使用windows server IIS来做服务器,基于市场的需求所以必须首先要会使用linux操作系统,然后要会使用linux的监控命令(通过监控命令获取服务器的数据信息和状态,那么在做性能测试瓶颈时就知道服务器处于什么状态时异常的)
数据库:现在使用比较多的是SQL关系型数据库SQLServer、Mysql、对于金融行业如银行使用Oracle、DB2的比较多;NoSQL非关系型数据库用的则是Redis和MongoDB,做读写分离或者数据缓存以及ES数据库;那么作为性能测试肯定要会增删改查的操作,并且对数据库进行监控,同样根据数据库返回的状态信息,定位瓶颈后就可以进行调优了。
测试工具:第一种嘛就是自己通过Go、Java等语言进行开发一个性能测试工具( 前提你是大牛 ‾ \overline{\text{前提你是大牛}} 前提你是大牛 );第二种则是市场应用比较多的工具则如Jmeter和LoadRunner,这里推荐使用Jmeter,原因是开源免费简单轻巧并且是纯Java语言开发的,而LoadRunner是收费且因功能强大所以比较笨重;因为是工具都不存在难度,用的多的熟练度就深了。
网络知识:网络对性能测试的影响非常大,如客户端向服务器发送请求数据,这个请求数据或者叫报文数据它是有一个大小的,当对后端接口调用传输的数据很大,而网络带宽不咋地这样就会导致该接口性能非常低,比如说网络带宽为10M,一次调用接口传输的数据大小为1M(举例),秒内并发最多能承受10个请求,所以在做性能测试时一定要对网络知识有一定的了解,不然连请求都没有发送到服务器怎么进行并发测试;其次对网络协议分层还是要进行了解,如OSI的七层模型以及TCP/IP四层模型。
业务知识:对于业务知识这一块是很重要的,当你进入一个公司或者企业,首选要对公司开发的产品进行熟悉,如该产品属于什么行业的,软件是干啥的,了解整个软件的业务流程,这样才能知道软件哪一块或者时候哪一个接口适用于做性能测试,那肯定是用户进行访问的接口了,最简单的例子就是注册和登录这两个接口,你肯定要清楚哪个接口是用户经常使用的,很明显就是登录接口,所以说了解公司产品业务是相当重要的。
熟悉项目,了解项目的业务流程以及重点功能
设定服务器到达的性能指标,如Response time、Throughput、Resource utilization、Hits per second、Concurrent users等,也就是说什么样的指标标准能够满足现阶段的业务需求
使用一些性能测试工具,如jmter、loadrunner等;也可以自己开发一个性能测试工具
设计性能测试场景必须符合用户在软件上的使用流程,用户经常使用的功能模块所对应的接口就需要做多并发的测试
一个软件的构成除了应用程序还需要将其部署到的服务器上以及数据存储的数据库,这些组成的东西都需要将它们进行监控,只有这样才能看到各个部分实际的运行状态以便我们进行更好的数据分析从而发现性能瓶颈才能进行调优
当以上的步骤流程都完成了开始进行测试跑脚本
性能分析基于监控部署,只有当监控部署进行到无死角的监控,得到的监控数据越全面,那么性能分析得到结果才最准确
只有将监控部署以及性能分析做到位最全面做准确后,才能进行性能调优,可以发现以上关键几步都是相互关联的;如果没有监控部署而是通过工具自带的测试报告数据也就是工具去收集了服务器或应用程序的一些状态数据,而这些数据是不全面的,并不能完全胜任监控部署的角色,所以需要单独去进行监控部署;当性能调优后遇到一些问题后,再去进行测试执行;实际上测试执行—性能分析—性能调优这关键的三步是一个迭代的过程
当性能测试指标达到性能指标制定的标准后,也就是达标后,这时候生成就可以生成测试报告给上级领导看,程序满足制定的性能指标,可以进行上线了
1、事务
从客户端发起的一个或多个请求(这些请求组成一个完整的操作),到客户端接收到从服务器返回的响应;如客户在web端点击登录按钮调用api接口方法,在api中去检验请求传递的登录数据是否合法然后去数据库中验证数据是否存在且准确,最后再通过api接口方法返回响应数据到web客户端提示用户登录成功或登录失败,这就是一个完整的事务;登录属于一个请求,多个请求比如银行转账等
2、TPS(Transactions Per Second)
每秒钟系统能够处理的事务数
注意:事务数并不等于请求数,如服务器一秒钟处理5个事务,并不等于服务器一秒钟处理5个请求也可能是10个请求,TPS和事务的关联关系就在此。
举例:事务靠虚拟用户产生,假如1个虚拟用户在1秒内完成1笔事务,那么TPS就是1,要想达到1000TPS至少需要1000个用户;如果某笔业务响应时间为1ms,那么1个用户在1秒内能完成1000笔事务,TPS就是1000.因此1个用户可以产生1000TPS,1000个用户也可以产生1000TPS,主要看响应时间的快慢。
3、请求响应时间
从客户端发起的一个请求开始,到客户端接收到从服务器返回的响应。整个过程所消耗的时间。
4、事务响应时间
事务可能是由一个或多个请求组成的,事务响应时间主要是针对于用户的角度而言,如转账。
5、并发的定义
没有严格意义上的并发。并发总有先后,无论差距是1ms或者是μs(微秒),总有一个时间差。所以并发讲的是一个时间范围内,比如1秒内的并发。
举例:多用户在系统上进行同一操作,比如双11的时候,大家都针对同一种商品进行秒杀
多用户在系统上进行不同操作,比如双11的时候,大家针对不同的商品进行秒杀,或者说是大家有进行其他不同的操作,比如浏览其他商品。
6、并发用户数
同一单位时间内对系统发起请求的用户数量
举例:现在服务器都是多核CPU,这样做的目的是提高服务器处理多线程能力,也就是处理用户数的能力;一般情况下都是1秒内,如1秒内服务器能够承担多少并发用户数,一定要对时间敏感。
7、吞吐量(Throughput)
一次性能测试过程中网络上传输的数据量总和
说明:以上传输数据量的总和是可以自己手工计算的,如一个http请求(get、post等),你知道它的请求参数,请求头的大小是多少,就可以进行一个粗略的计算;之所以要使用监控软件进行监控是防止有些请求中携带的参数是我们不知道的(也占了网络流量)。
举例:如公司带宽下载速度是10M/S(抛开其他的网络消耗),当下载的文件大小为1M,最大的下载用户并发为10个,再多就会排队等待了,就好比百度网盘一样,实际是将每个用户进行网络带宽限制了,也就是成本控制,毕竟网络开销费用不便宜,所以用户要想提高下载速度就需要花钱了;实际在工作的时候,一般人往往会忽略网络带宽带来的性能瓶颈,如代码、服务器、数据库都没有问题,并发数上不来,那么就需要监控一下网络资源消耗情况
8、吞吐率
单位时间内网络上传输的数据量;吞吐率 = 吞吐量 / 传输时间
压力10分钟总的吞吐量为10M,一分钟的吞吐量 = 10 / 10 = 1M = 1024KB,一秒中的吞吐率为 = 1/60 M
9、点击率
每秒钟用户向服务器提交的请求数。这个指标是web应用程序特有的一个指标,可以想象为每秒钟用户总共在页面上进行多少次点击动作,但是需要注意的是一次鼠标单击的操作后,客户端有可能向服务器发送了多次请求。(现在在手机在也是可以通过手指不断点击的)
10、资源使用率
对不同的系统资源的使用情况,如CPU、内存、IO等
说明:这是性能测试的第一步,也是至关重要的一步;需求分析以及需求评审环节是非常重要的;开发之所以写代码写出了BUG,那是因为开发在写代码过程中存在想不到的地方,测试之所以没有测出所有的BUG,那也是因为在测试过程中,有些情况或者是场景没有想到;所以说需求分析、评审很重要,同样测试人员写的用例也是需要进行评审的,大家一起研究探讨分析就会让用例覆盖率更全面,多个人多个思想多个想法嘛
⇒ 明确测试指标
⇒ 明确测试场景
⇒ 同行业对比
⇒ 业务预期
⇒ 对比以往用户使用行为以及用户量
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!