前言
近年来,随着我国软件产业的蓬勃发展以及对软件质量的重视,软件测试行业也越来越被软件企业所看重,软件测试成为了一个前景光明的新兴产业。由权威调查机构发布的《软件测试从业人员调查报告》显示,目前软件测试行业呈现出高端人才缺口大,整体薪资较高的行业趋势。不得不承认,很多同学大学毕业就选择软件测试这个行业,嘴上说对测试感兴趣,但十有八九都是因为觉得测试入门的门槛低,不需要什么开发技术知识。额,关于这个观点,其实我一开始也是这样想的......
但是后来......关于这个话题咱们可以以后再说。接下来,我结合软件测试行业的特点,带大家初步认识软件测试的进阶技术-性能测试。
那么我们来看看,为什么要做性能测试?“大家都是聪明人,就不要拐弯抹角了,就是为了提升竞争力,多涨工资嘛”,童鞋你很机智,但是不要说得那么直接嘛。可是性能测试不是所有项目都有需要进行的,怎么办?因此,平时的自学习惯在这时就体现的稀里哗啦,那么,让我们开始吧。
Part 1 什么是软件性能
软件的性能是个很大的概念,覆盖面非常广泛,对一个软件系统而言,包括执行效率、资源占用、稳定性、安全性、兼容性、可扩展性、可靠性等等。不同角色眼中的性能又是不一样的,有用户视角的软件性能、管理员视角的软件性能 、 产品开发人员视角的软件性能。
从用户角度来说,软件性能就是软件对用户操作的响应时间。
从管理员角度来说, 软件性能就是,系统的响应时间、系统运行时服务器的状态,如CPU内存使用情况、系统是否能够实现扩展、系统支持多少用户访问、系统性能可能的瓶颈在哪里、系统是否支持7 * 24小时的业务访问。
从产品开发人员角度来说,软件性能就是,架构设计是否合理、数据库设计是否合理、代码是否存在性能方面的问题、系统中是否有不合理的内存使用方式。
但是我们常说的性能测试概念呢,主要是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。但是这些指标都是为了一个目的,就是尽可能满足各个角色对性能的需求。性能测试的目的主要是,评估系统的能力、识别体系中的弱点、验证系统可伸缩性(resilience)和可靠性(reliability)、系统调优。
Part2 性能测试的指标
并发用户数、响应时间、吞吐量、资源利用率
并发用户数 是指在某一给定时间内,某个特定点上进行会话操作的用户数。PS: 我们产品并发的概念实际是在线用户数。
响应时间指的是客户端发出请求到得到响应的整个过程所经历的时间。
吞吐量是指单位时间内系统处理的客户请求的数量,直接体现软件系统的性能承载能力。PS:一般来说,吞吐量用请求数/秒或页面数/秒来衡量,从业务的角度,吞吐量也可以用访问人数/天或处理的业务数/小时等单位来衡量。从网络的角度来说,也可以用字节数/天等单位来考察网络流量。
资源利用率是指系统资源的使用程度,比如服务器的CPU利用率、内存利用率、磁盘利用率、网络带宽利用率等。PS:除了上述资源,我们还应该考虑数据库连接池使用情况,JVM内存使用情况,数据库cpu占用情况等因素。
Part 3 性能测试的内容
负载测试,主要用于描述常规的性能测试,通过模拟生产运行的业务压力和使用场景组合来测试系统的性能是否满足生产要求。目的是为了在特定的运行条件下验证系统的能力状况。
压力测试,是为了发现在什么条件下应用程序的性能会变得不可接受。压力测试与负载测试的比较而言,他们的实现方法基本相同,但是测试的目的不同。
容量测试,为了确定测试对象在给定时间内能够持续处理的最大负载或工作量,使测试对象处理大量的数据,以确定是否达到了将使被测对象发生故障的极限。目的是为了测试单业务在一定数据容量下性能表现。
网络性能测试,测试网络带宽、延迟、负载和端口的变化对用户的响应时间的影响主要是测试用户数目与网络带宽的关系,评估网络的依赖程度。
可靠性测试(疲劳测试),其中软件可靠性的含义是,在规定条件下,在规定时间内,软件不引起系统失效的概率。可靠性测试的含义是,在有使用代表性的环境中,持续运行系统某些功能,验证系统稳定性的过程。目的是为了尽量模拟客户的使用环境,一定业务压力下,持续运行过程N*24小时,测试系统的稳定性。
Part 4 性能测试的步骤
这里要展开写,确实要写很多,暂时就先用这一张图来简单介绍一下
性能测试的步骤
由上面的图不难看出,性能测试不单单是性能测试工程师单独完成的工作,也不是一个独立的工作,他也是需要和整个项目串联起来,也需要协调各个环节的角色配合完成的工作。
Part 5 常见性能测试工具
常用的性能测试工具有HPE公司的LoadRunner、CompuWare 公司的QALoad 、Microsoft公司的WAS 、RadView公司的WebLoad 、IBM公司的RPT 、开源工具Jmeter、OPENSTA等。当然,大多数性能测试工程师觉得最好用的就是 LoadRunner(商业软件、需要购买license),用Virtual User Generator来录制脚本、编辑脚本,用Controller来布置测试场景、执行测试场景,最后用Analysis来对测试结果进行分析,一条龙服务(完美)。
Part 6 小结
性能测试是一个对技术全面性要求很高的(对于好的性能测试工程师而言),不仅仅需要学会工具的使用,而且还需要学习数据库、操作系统、Java等和系统性能息息相关的知识,还是相当有难度的。因此,学习、学习、学习,做为测试工程师,眼界要放的更高、更远,了解更多的技术知识,更要利用现有的资源,完善自己的知识体系,成为一名更加出色的测试工程师。
created by 陈瑜