性能测试基础

目前,典型的企业信息服务系统的架构一般是由客户端、网络、防火墙、负载均衡服务器(硬件如F5, 软件Apache等)、Web服务器、应用服务器(中间件WebLogic, Tomcat等)、数据库服务器等各个环节组成。

在交付给客户上线使用之前,业务系统的每个环节都要进行性能测试和优化,才能保证上线后的质量。

功能测试和性能测试

功能测试主要根据产品业务需求、产品行业特征、模拟用户操作方式来测试一个产品的特性以确定它们是否满足用户需求。

性能测试通过某种特定的方式对被测试系统按照一定的测试策略进行施压,获取该系统的响应时间、运行效率、资源利用情况等各项性能指标,来评价系统是否满足用户性能需求的过程。

通俗的说,功能测试用于确保软件系统做了正确的事情,性能测试则用于确保系统快速的完成了任务。

软件性能的生命周期

需求阶段的性能分析:软件开发前期的需求分析阶段,需求分析师与客户业务人员沟通时,要明确提出各项性能指标,包括系统业务交易的使用频度、系统并发用户量、业务数据量评估等各项指标,然后对系统的响应时间、用户数和资源使用进行分析。

  响应时间的需求调研分析是一个非常重要的度量值,因为它是直接体现用户体验的一个指数,同时也是最不容易测量的度量值,因为它比其他的度量值更容易发生变化。
  用户数分析主要分析评估系统上线后的总用户数、平均每天在线用户数等情况。
  资源使用分析用于衡量系统资源使用率的情况,反映系统的最底层性能情况,对于容量规划比较有指导作用,同时它也是比较容易理解的性能度量值。

设计开发阶段的性能分析与验证:大部分项目的性能问题是设计出来的,而不是开发和测试出来的。要获得性能良好的软件系统,需要根据需求分析及设计规划,进行系统的规模分析和完整的性能分析,预估性能瓶颈点,提出解决方案,最终通过架构师、程序设计人员等角色进行评审验证并确认,保障性能目标的达成。

系统测试阶段的性能验证与优化:单元性能测试、集成性能测试、系统性能测试、多套系统互联接口性能测试等。其中,对一套系统进行的系统性能测试,也就是在特定的环境下、一定量的数据情况下,进行的系统级的性能测试,是最常用的,也是最为测试人员所熟悉的一种性能测试。

  系统性能测试阶段的一般测试过程:在系统功能被确认后,模拟真实生产环境进行软件系统的部署,再根据前期的性能测试需求分析结果及测试策略定义的方法,模拟一定量的虚拟并发用户数,进行压力测试,同时监控分析系统是否满足预期的性能指标,识别性能可能出现的瓶颈点,并进行性能优化处理,调优后再进行复测,确保软件系统最终达到性能要求。

什么是软件性能?

软件性能的好坏主要体现在:系统在一定的负载压力工作的情况下,能否及时为用户提供相应的服务能力,具体包括响应时间、吞吐量、资源利用率等。

影响软件性能的因素

硬件设施、网络、操作系统、并发用户数、系统积累的数据量、中间件等。如果系统中哪一个环节出现了性能瓶颈,都会严重影响系统的正常运行。

硬件是决定一套系统性能的关键因素之一,主要包括服务器的CPU, 内存,磁盘I/O使用情况,如果系统并发用户数增大而内存不足,会导致CPU和磁盘使用压力。

软件性能测试目标

软件开发的目标就是开发出的产品满足用户需求,而软件性能测试的目标是在一定时间范围内尽可能地寻找软件的缺陷,并提交给开发人员进行修复,最终及时地给客户提供高质量的软件产品,这需要通过制定性能测试策略、性能测试计划、执行性能测试、对性能问题进行定位分析和优化。

对于当前已经交付使用的系统,性能测试的目标,是评价当前系统的性能状况,寻找性能瓶颈,优化系统性能,测试系统未来性能及可扩展性。

Web网站性能测试应该尽可能地从用户体验的角度出发制定目标:成功率、响应时间、准确性。

性能测试术语

响应时间:客户端呈现数据时间+网络传输时间+系统响应时间。
  性能测试工具LoadRunner中一般通过Transaction(事务)进行响应时间的统计,Transaction是一组度量函数,分为起始事务、结束事务。在进行压力测试后分析事务的响应时间可分为:最大响应时间、平均响应时间、最小响应时间、标准差响应时间、90%响应时间。
  响应时间受很多因素的影响:网络带宽、用户数、提交事务请求数、事务类型等,响应时间越快,单位时间内处理的请求数就会越多。

并发用户数:用户通过客户端与应用程序进行交互。并发一般是指多个人同时进行某一个业务交易的动作行为。确定用户的行为模式、建立真实的模拟业务场景,在性能测试中尤为重要。

吞吐量:吞吐量是用来测量系统完成的工作量,也是每个服务器实例单位时间内处理的请求量。吞吐量是多种因素作用的结果,包括用户请求数、用户请求交易特性和数据量大小,以及应用实例和数据库的性能。吞吐量用来衡量服务器承受的压力,根据不同的方式角度分析表达的吞吐量意义不同。

TPS: Transaction Per Second,即每秒系统能够处理的交易或事务的数量。它是衡量系统处理能力的重要指标。

点击率:Hit Per Second,每秒用户向Web服务器提交的HTTP请求数,这个指标是Web应用特有的一个指标。点击率越大,对服务器的压力也越大。

网络协议

利用通信线路将分散在不同地方,具有独立功能的计算机连接起来,并按照一定的通信规则实现这些计算机之间的资源与数据的共享,这样的一个计算机集合体便称为计算机网络,它们之间的通信离不开网络通信协议。

OSI参考模型:

OSI参考模型 主要功能 常见协议
应用层 提供应用程序之间通信 HTTP, FTP
表示层 提供处理数据格式,数据加密等 NBSSL, LPP
会话层   建立、维护、会话管理 RPC, LDAP
传输层 建立计算机之间端到端的连接 TCP, UDP
网络层 寻址和路由选择 IP, ICMP
数据链路层 提供介质访问和链路管理等 PPP
物理层 比特流传输     

TCP/IP参考模型

TCP/IP参考模型 主要功能  常见协议
应用层 提供应用层次接口     HTTP, FTP
传输层 建立计算机端到端的连接 TCP, UDP
互联网层 寻址和路由选择 IP, ICMP
网络接口层 二进制数据流传输和物理介质访问 PPP

LoadRunner的原理是通过通信协议方式传输模拟客户端对服务端发送数据来对测试对象进行测试。

在性能测试中,如何对测试对象进行协议分析,了解该测试系统客户端与服务端之间使用的是哪种协议呢?

  通过与设计、开发人员进行沟通获取测试对象所使用的协议,这是最直接的方法。因为开发设计人员最清楚他们所开发的应用系统使用何种协议进行数据通信。
  通过使用协议分析工具(如WireShark),对客户端与服务器端之间的通信过程进行捕获分析,然后确定被测试对象所使用的协议
  通过以往的测试经验确定被测对象所使用的协议,使用此法准确性较低。

HTTP协议:Hyper Text Transfer Protocol, 超文本传输协议,互联网上应用最为广泛的网络协议,也是最常用的协议。该协议最初的设计目的是为了提供一种发布和接收HTML页面的方法。
  简单地说,HTTP协议就是WWW服务器传输超文本到本地浏览器的传输协议。
  "http://www.example.com/admin/index.html": http://代表超文本传输协议,www表示一个Web服务器,example.com/显示的是网页所在的服务器的域名或站点服务器的名称,admin/表示服务器上的子目录,index.html表示目录中的一个html文件。
  HTTP报文由从客户机到服务器的请求和从服务器到客户机的响应构成,请求报文格式:请求行-通用信息头-请求头-实体头-报文主体, 响应报文格式:状态行-通用信息头-响应头-实体头-报文主体

HTTP状态码:由RFC 2616规范定义,用于表示Web服务器HTTP响应状态的3位数字代码

  1xx消息: 请求已被接受,需要继续处理
  2xx成功: 请求已成功被服务器接收、理解并接受
  3xx重定向: 需要客户端采取进一步的操作才能完成请求
  4xx请求错误: 客户端看起来可能发生了错误,妨碍了服务器的处理
  5xx服务器错误:服务器在处理请求的过程中有错误或异常状态发生

协议分析工具:MiniSniffer, WireShark--开源的网络封包分析软件。

性能测试工程师的素质要求

懂得搭建测试环境:对各类操作系统原理有所了解,系统工作原理、系统参数调整、系统监控命令等

网络知识:了解各类协议,知道TCP/IP, DNS, DHCP, WINS, 路由/交换机/网路集线器,且知道工作原理

服务器技术:知道什么是存储设备,什么类型的CPU,多大内存,几颗CPU,需要多少磁盘空间,是什么类型的机器

了解数据库知识:知道数据库使用原理,性能测试诊断分析数据库性能问题时,综合考虑缓冲池大小,数据结构,锁和应用程序需求间的复杂关联并进行判断问题所在

中间件技术:中间件的用处,与应用程序、操作系统、硬件设施、数据库之间的关系及其本身参数配置

编程能力:从开发设计人员代码中对函数方法调用,对象释放角度分析

沟通技巧、IT素质

性能测试框架

性能测试工具的主要作用是通过模拟生产环境中的真实业务操作,对被测试系统实行压力负载测试,监控被测系统在不同业务场景、不同压力情况下的性能表现。

  工具本身占用系统资源少,可扩展性好,可用性强
  能模拟真实业务事务操作,在并发时能真正产生业务压力
  对压力测试结果能很好地进行性能分析,快速找出被测试系统的瓶颈
  测试脚本的复用性强,且这些测试脚本以多进程或线程形式在客户端运行,模拟多用户并发访问服务

原理:在客户端通过多线程或多进程模拟用户访问,对服务器施加压力,然后再过程中监控和收集性能数据。

性能测试框架的设计:

  Controller: 控制程序,用于控制整个测试过程,向各个客户端发出执行测试的命令,收集客户端和服务器端的性能参数
  Agent: 代理程序,部署在各个客户端,用于响应Controller的命令执行测试
  VU: 虚拟用户,用于模拟用户的操作,产生对服务器的压力

自己设计性能测试框架的好处是:可以按自己的思路设计性能测试,可扩展性强,可加入更多验证手段。在一些特殊场合,测试工具不支持的协议或环境下,需要自己手动编写性能测试程序来完成工作。

posted @ 2015-11-11 14:43  Ribbon  阅读(1039)  评论(0编辑  收藏  举报