初级软件测试工程师如何向性能测试工程师进阶?献给迷茫的测试人
性能测试的目的不仅是为了评估系统当前的性能状况,同时还希望通过故障定位找到系统存在的性能瓶颈,从而进一步优化性能,直接提升系统的处理能力,或者对系统的扩展能力提供优化策略。性能测试工程师的能力可分为三个层次,从初级的性能检测,到中级的故障定位,再到高级的性能调优,是一个循序渐进,逐步提高的过程,下面就这三个层次的能力进行简述。能力层次如下图:
(一)初级——性能检测能力
初级性能测试工程师需要掌握性能的基础理论,能够编制测试方案,使用自动化测试工具,进行初步的数据结果分析。
在性能基础理论方面,需要知道并发用户数、响应时间、吞吐量等常用的性能测试指标,知道负载测试、压力测试、疲劳强度测试、基准测试等主要的性能测试类型,知道测试流程的几个重要节点,如测试需求分析、测试方案制定、测试环境配置、测试数据准备、测试执行及测试结果分析。测试流程如下图:
在性能测试方案方面,根据性能测试需求,编制性能测试方案,方案中应包括测试目的、测试依据、测试计划、测试内容、测试方法、测试环境要求等。其中关键的是测试用例及测试数据的准备,测试数据包括铺底数据、参数化数据及测试数据,数据量的多少及合理性会影响到测试结果的真实性。
在测试工具使用方面,至少会使用一到两种自动化的性能测试工具,如主流的商业化测试工具LoadRunner、开源的测试工具JMeter等。能够识别应用协议录制脚本、简单调试脚本、配置测试策略、装载测试数据、收集测试数据。
在测试结果分析方面,重点关心时间特性、资源利用率及容量,包括交易的响应时间、支持的并发用户数、交易的吞吐量、网络的吞吐量、CPU的使用情况、磁盘读写情况等常用指标,通过数据分析可以反映系统当前的性能状况。
(二)中级——故障定位能力
中级性能测试工程师需要通过透视性能脚本执行过程来找到影响系统性能提升的故障点,为后续的性能调优提供数据支持。所以需要具备故障诊断分析能力,熟练使用各类的故障分析工具等。
在故障诊断分析方面,当在做性能测试的时候发现系统响应时间过长,没有达到预期的目标,那么就需要分析是什么因素导致了响应慢,是数据库服务器响应慢,还是应用服务器响应慢,如果是数据库服务器响应慢,是因为SQL语句执行时间长引起,还是数据库参数配置不当造成的,这些都是要找出的故障点。故障诊断可以从技术架构、硬件、网络、软件、应用、安全这几个方面展开,如下图:
在故障分析工具方面,掌握一些专有的故障分析工具可以提高故障定位效率,可以通过性能监控工具、日志分析工具、抓包工具、安全监控软件等来辅助定位故障,为接下来的系统调优做准备。如Youkit是一款专业的java性能分析工具,可以提供强有力的数据分析功能。Fiddler是一个抓包工具,可对数据包进行截获、重发、编辑、转存等操作,也可以用来检测网络情况。日志分析工具可以监控服务器、数据库、中间件等系统日志,发现问题及时定位,如Facebook日志系统Scribe、Apache日志系统Chukwa日志系统等。
(三)高级——性能调优能力
高级性能测试工程师因需要参与解决性能问题,对测试工程师的要求非常高,需要有比较全面强大的技术基础及实践经验,要熟悉系统架构,熟悉基础支撑软件等,还要具备性能优化分析能力,通常性能问题的修复成本相对较高,如何使用最低的成本换取最高的性能,是性能调优的重点。
在性能调优知识面,要实现性能调优,需要掌握系统架构、中间件、数据库、操作系统、网络协议等综合知识,如下图:
在性能优化分析方面,在进行性能测试的时候,通过过程数据分析,可在这几个方面入手性能调优。应用服务器调优包括JVM调优、Server调优、JDBC调优、WEB、JMS、EJB调优;数据库调优包括核心参数调优、数据库连接池调优、SQL与索引调优、表及视图的调优;应用程序调优包括通用代码调优、JDBC代码调优、WEB代码调优、JMS代码调优、EJB代码调优;操作系统调优包括硬件的配置(CPU、内存、硬盘等)、核心参数、TCP/IP参数、补丁等。系统架构调优是系统层次上的优化,如采用Redis设置系统缓存数据库机制,减少数据库的访问代价。
也可考虑系统部署方式、网络和硬件层面的调优,包括对系统部署负载均衡策略、网络带宽/流量、安全访问控制策略等情况优化系统。根据实际性能结果计算资源瓶颈,对系统硬件资源(内存、存储资源等)进行扩容处理优化。通常建议性能优化可从程序优化、业务处理方式优化、系统层次优化、系统架构优化、网络架构优化、硬件优化这个顺序展开。