测试.docx
- 文档编号:25664061
- 上传时间:2023-06-11
- 格式:DOCX
- 页数:16
- 大小:58.06KB
测试.docx
《测试.docx》由会员分享,可在线阅读,更多相关《测试.docx(16页珍藏版)》请在冰豆网上搜索。
测试
系统测试
一、性能测试
1、性能测试流程
性能需求分析是整个性能呢个测试工作开展的基础,性能测试的需求没有弄清楚,后面的性能测试工具就无谈起。
性能测试人员需要与需求人员(客户)、领导及项目相关的人员进行沟通,同时收集各种项目资料,对系统进行分析,确认测试的意图。
当然,还需要客户对性能的态度。
确定明确的需求后,就需要制定性能测试计划,即对性能测试过程中所有需要工作制定与规划。
测试计划的大体内容:
项目的简单背景描述,本次性能测试的需求与目的,性能需求分析的结果是什么。
测试环境的准备,需要什么样的软硬件配置,网络状况登录。
测试数据的准备,对于某些性能测试是需要事先准备测试数据的。
测试的策略,前面进行需求分析的目的是制定测试策略,也就是设计符合需求的测试场景,需要对系统的哪些业务模块进行测试,如何进行?
需要设计哪些场景以及设计这些场景的目的。
最后会明确一下人员配备,比如需要开发、DBA、运维都人员的参与协助,性能测试的时间安排。
测试环境的搭建,分硬件环境和软件环境。
硬件环境主要是公司已有的硬件设备。
软件环境的搭建需要熟悉软件平台搭建的过程,对每个平台中部分由比较深入的了解。
因为性能测试的分析并不是死盯着系统应用那一层。
中间件、数据库、系统、硬件都有可能成为系统的瓶颈。
性能工具的引入,一般分为自行开发与引入市面上现有的工具。
市面上的工具有收费与开源免费,各有各的优缺点。
我们要做的是对需求进行分析,从成本,购买成本,开发成本,现有开源工具的二次开发成本,人员学习使用成本以及时间成本等。
性能测试工具包括压力测试工具,测试数据生成工具,性能监控工具等。
测试的执行应该是很大范围的一块内容,用户行为生成-->压力产生器-->用户代理-->测试调度-->系统监控等。
我们所选择的工具如何来实现我们的需求,这个性能测试工程师对引入的有足够的了解。
对协议的了解,可能需要编程的能力等。
其实好多新手对性能的学习也是从某一工具的使用开始的。
测试结果的分析,测试工具只是提供多种不同的数据揭示和呈现方法而已。
工具本身并不能帮我们进行性能结果的分析。
对于性能测试结果的分析,这个需要性能测试工程师对整个被测环境的各种软硬件都要有深入的了解。
当然,在这个过程中我们往往需要各个岗位人员的协助,开发人员、DBA、运维等。
致力成为一位资深的性能测试工程师要走路还很长。
软硬件配置调整与优化属于系统调优阶段。
这一项不是一个必须的环节。
这个要看你本次性能测试的需求与目的。
如果只是为了验证系统的能力的话。
在分析完测试结果后就可以出性能测试报告了。
对于测试人员,对一个系统进行功能测试的目的是验证系统功能是否是符合需求并可用的,但发现了缺陷之后是需要对缺陷进行跟踪和修复的,并不是把发现的缺陷写在报告里就完事的。
当然,功能缺陷与性能缺陷存在着本质的缺陷。
如果在性能测试过程中发现不满足需求的缺陷,进行调优是一个不可缺少的过程。
如果要对系统进行调优的话,测试执行、结果分析、系统调优将会形成一个循环持续的过程。
直到满足客户的需求为止。
本节摘录于
2、性能测试的分类
性能测试(狭义),性能测试方法是通过模拟生产运行的业务压力量和使用场景组合,测试系统的性能是否满足生产性能要求。
通俗地说,这种方法就是要在特定的运行条件下验证系统的能力状态。
特点:
1、这种方法的主要目的是验证系统是否有系统宣称具有的能力。
2、这种方法要事先了解被测试系统经典场景,并具有确定的性能目标。
3、这种方法要求在已经确定的环境下运行。
也就是说,这种方法是对系统性能已经有了解的前提,并对需求有明确的目标,并在已经确定的环境下进行的。
负载测试,是通过在被测系统上不断加压,直到性能指标达到极限,例如“响应时间”超过预定指标或都某种资源已经达到饱和状态。
特点:
1、这种性能测试方法的主要目的是找到系统处理能力的极限。
2、这种性能测试方法需要在给定的测试环境下进行,通常也需要考虑被测试系统的业务压力量和典型场景、使得测试结果具有业务上的意义。
3、这种性能测试方法一般用来了解系统的性能容量,或是配合性能调优来使用。
也就是说,这种方法是对一个系统持续不段的加压,看你在什么时候已经超出“我的要求”或系统崩溃。
压力测试(强度测试),压力测试方法测试系统在一定饱和状态下,例如cpu、内存在饱和使用情况下,系统能够处理的会话能力,以及系统是否会出现错误。
特点:
1、这种性能测试方法的主要目的是检查系统处于压力性能下时,应用的表现。
2、这种性能测试一般通过模拟负载等方法,使得系统的资源使用达到较高的水平。
3、这种性能测试方法一般用于测试系统的稳定性。
也就是说,这种测试是让系统处在很大强度的压力之下,看系统是否稳定,哪里会出问题。
并发测试方法通过模拟用户并发访问,测试多用户并发访问同一个应用、同一个模块或者数据记录时是否存在死锁或其者他性能问题。
特点:
1、这种性能测试方法的主要目的是发现系统中可能隐藏的并发访问时的问题。
2、这种性能测试方法主要关注系统可能存在的并发问题,例如系统中的内存泄漏、线程锁和资源争用方面的问题。
3、这种性能测试方法可以在开发的各个阶段使用需要相关的测试工具的配合和支持。
也就是说,这种测试关注点是多个用户同时(并发)对一个模块或操作进行加压。
配置测试方法通过对被测系统的软\硬件环境的调整,了解各种不同对系统的性能影响的程度,从而找到系统各项资源的最优分配原则。
特点:
1、这种性能测试方法的主要目的是了解各种不同因素对系统性能影响的程度,从而判断出最值得进行的调优操作。
2、这种性能测试方法一般在对系统性能状况有初步了解后进行。
3、这种性能测试方法一般用于性能调优和规划能力。
也就是说,这种测试关注点是“微调”,通过对软硬件的不段调整,找出这他们的最佳状态,使系统达到一个最强的状态。
可靠性测试,在给系统加载一定业务压力的情况下,使系统运行一段时间,以此检测系统是否稳定。
特点:
1、这种性能测试方法的主要目的是验证是否支持长期稳定的运行。
2、这种性能测试方法需要在压力下持续一段时间的运行。
(2~3天)
3、测试过程中需要关注系统的运行状况。
也就是说,这种测试的关注点是“稳定”,不需要给系统太大的压力,只要系统能够长期处于一个稳定的状态。
上面的分类绝非全面,还有失效性测试,就是系统局部发生问题时,其它模块是否可以正常的运行。
本节摘录于
3、性能测试前需要知道什么
性能测试的目的
首先要知道客户的要求。
我把性能测试按目的分以下几种
1)客户有明确要求
这是一个好的结果,这说明客户对性能测试有一定的了解,知道他们需要的系统要达到一个什么样的标准。
如:
系统要求同时满足100用户登陆,平均每个用户登陆时间不能超过5秒。
这个需求很明确,当然也不排除一些不懂装懂的用户,提一些不现实的要求。
不管怎么说,用户提要求了,这个比较容易,你可以对现系统做一次性能测试,至于,是通过优化系统还是增加硬件设备才能达到要求。
就不是我们考虑的问题了。
2)只是想知道目前系统性能(容量测试)
可以把我们的目的就是求得最大用户数和最佳用户数。
但是,这仍然是比较含糊的一个需求,我们需要对系统做出分析,找出系统的压力点。
3)找出系统性能瓶颈
这个同样需要分析可能对系统造成瓶颈的逻辑业务,然后才能进行性能测试。
4)了系统在长时间的压力下性能状况(强度测试)
这个一般验证系统的稳定性,因为系统一旦上线,就有可能会长期处在大用户的访问状态,可能以前没发现的一些问题就会暴漏出来。
比较典型的就是内存溢出。
性能测试的环境
确定了我们的测试目的,当然需要测试环境。
这里的环境,我们需要考虑一下几点
1)硬件环境
我们需要了解被测服务器硬件配置,用于加压客户端的机子配置,CPU内存等
2)软件环境
我们需要了解被测系统的架构,前端、中间件、服务器(这里指运行系统软件服务器,如tomcat)、数据库,以及他们的部署位置。
用于加压的客户端采用什么性能测试工具进行加压。
3)网络环境
网络环境很重要。
在上面的几个目的中,除了找出系统性能瓶颈可以在广域网进行,因为这个目的可以不用设置太多的虚拟用户,只要找出系统哪个地方影响了整个系统的性能就行。
其他目的的测试都需要在,局域网进行,不然你压力工具所发送的请求都会卡死在网络的传输过程中。
寻找系统的压力点
我们需要对系统的哪个页面或业务进行加压。
这个不是自己想出来的,需要与开发人员的沟通。
系统的首页?
系统的登录?
还是系统的交易过程?
各个业务的用户比例是多少?
只有获得有效的性能需求,才容易寻找和定位压力点。
本节摘录于
4、性能测试工具原理与架构
性能测试工具,从广义上讲,在性能测试过程中使用到的所有工具都可以称其为性能测试工具。
从狭义上来讲,我们可以把性能测试工具分为服务器端性能测试工具与前段性能测试工具。
服务器端性能测试工具即我们测试人员通常所认为的性能测试工具。
LoadRunner、JMeter、SilkPerformance、服务器端压力性能工具需要支持产生压力和负载,录制和生成脚本,设置和部署场景,产生并发用户和向系统施加持续的压力。
前端性能测试工具应用比较广泛,开发人员,前端开发人员、测试人员都会经常用到。
Firebug、fildder2、Yslow,前端性能测试工具只需要关于心浏览器等客户端工具对具体需要展现的页面的处理过程。
服务器性能测试工具原理
性能测试工具的主要作用是通过模拟生产环境中的真实业务操作,对被测试系统实行压力负载测试,监视被测试系统在不同业务、不同压力性能下的性能表现,找出潜在的性能瓶颈进行分析、优化。
客户端与服务器相当于两个人,通过信息来进行交流。
由于初次见面不好意思直接交流,与是找来了中间传话人,客户端把信息告诉给传话人,由传话人来转达给服务器。
那么服务器反馈的信息也由传话人转达给客户端。
一般性能测试工具都需要录制或编写客户端行为脚本。
这样传达人就有了客户端的行为能力,从而假扮客户端来欺骗服务器,与之进行通信。
有了客户端行为了传达人可以进行自我复制。
从而变出N多个传达人对服务器进通信。
这个传达人的行为和能力也就是性能测试工具的基本特质。
对于目前流行的性能测试工具,他们的基本工作原理都是一致的。
在客户端通过多线程或多进程模拟虚拟用户访问,对服务器端施加压力,然后在过程中监控和收集性能数据。
性能测试工具的特质
1)工具本身占用系统资源少,可扩展性好,可用性强。
2)能模拟真实业务事务操作,在并发时能真正产生业务压力。
(这一点是核心)
3)对压力测试结果能很好地进行性能分析,快速找出被测试系统的瓶颈。
4)测试脚本的重复性强。
5、压力测试
按照RonPatton在其《Software Testing》一书中的定义,压力测试是一种破坏性测试,它故意让软件在比较少的资源环境下运行,如低内存、小硬盘、慢CPU上运行,考验程序直至程序无法运行,从而发现软件缺陷。
用一句形象的话来比喻,就是让软件在饥饿状态上运行。
负载测试是尽量增加对系统的访问,而压力测试是尽量使系统在资源稀缺的环境下运行。
二者区别很大,负载测试考验的是系统的吞吐量。
Linux性能问题
关于性能问题,主要实现的是Linux操作系统和应用程序的最佳结合。
在应用程序、操作系统、服务器硬件和网络环境等方面,影响性能最大的是应用程序和操作系统。
1、影响linux性能的因素
CPU是操作系统稳定运行的根本,CPU的速度与性能很大一部分决定了系统整体的性能,因此CPU数量越多、主频率越高,服务器性能也就相对好。
但事实也并非完全如此。
目前大部分CPU在同一时间内只能运行一个线程,超线程的处理器可以在同一时间运行多个线程,因而,可以利用处理器的超线程特性提高系统性能。
在Linux系统下,只有运行SMP内核才能支持超线程,但是安装CPU的数量越多,从超线程获得的性能上的提高就越少。
另外,Linux内核会把多核的处理器当作多个单独的CPU来识别,例如两颗4核的CPU,在Linux系统下会认到8颗CPU。
但是从性能角度来讲,两颗4核的CPU和8颗单核的CPU并不完全等价。
根据权威部门得出的测试结论,前者的整体性能要低于后者25%~30%
内存的大小也是影响Linux性能的一个重要的因素。
内存太小,系统进程将被阻塞,应用也将变得缓慢,甚至失去响应;内存太大,会导致资源的浪费。
Linux系统采用了物理内存和虚拟内存的概念,虚拟内存虽然可以缓解物理内存的不足,但是占用过的虚拟内存,应用程序的性能将明显下降。
要保证应用程序的高性能运行,物理内存一定要保证足够大,但是过大的物理内存,会导致内存资源的浪费,例如在一个32位处理器的Linux操作系统上,超过8GB的物理内存将被浪费掉。
因此,要使用更大的内存,建议安装64位的操作系统,同时开启Linux的大内存内核支持。
(查看系统是32位还是64位命令file/sbin/init)。
磁盘的I/O性能直接影响应用程序的性能。
在一个有频繁读写的应用中,如果磁盘的I/O性能得不到满足,就会导致应用的停滞。
CPU
CPU 的占用主要取决于什么样的资源正在 CPU 上面运行,比如拷贝一个文件通常占用较少 CPU,因为大部分工作是由 DMA(DirectMemoryAccess)完成,只是在完成拷贝以后给一个中断让 CPU 知道拷贝已经完成;科学计算通常占用较多的 CPU,大部分计算工作都需要在 CPU 上完成,内存、硬盘等子系统只做暂时的数据存储工作。
要想监测和理解 CPU 的性能需要知道一些的操作系统的基本知识,比如:
中断、进程调度、进程上下文切换、可运行队列等。
这里用个例子来简单介绍一下这些概念和他们的关系,CPU每时每刻都有工作在做(进程、线程)并且自己有一张工作清单(可运行队列),由老板(进程调度)来决定他该干什么,他需要和老板沟通以便得到老板的想法并及时调整自己的工作(上下文切换),部分工作做完以后还需要及时向老板汇报(中断),所以打工仔(CPU)除了做自己该做的工作以外,还有大量时间和精力花在沟通和汇报上。
CPU 也是一种硬件资源,和任何其他硬件设备一样也需要驱动和管理程序才能使用,我们可以把内核的进程调度看作是 CPU 的管理程序,用来管理和分配 CPU 资源,合理安排进程抢占 CPU,并决定哪个进程该使用 CPU、哪个进程该等待。
操作系统内核里的进程调度主要用来调度两类资源:
进程(或线程)和中断,进程调度给不同的资源分配了不同的优先级,优先级最高的是硬件中断,其次是内核(系统)进程,最后是用户进程。
每个 CPU 都维护着一个可运行队列,用来存放那些可运行的线程。
线程要么在睡眠状态(blocked 正在等待 IO)要么在可运行状态,如果 CPU 当前负载太高而新的请求不断,就会出现进程调度暂时应付不过来的情况,这个时候就不得不把线程暂时放到可运行队列里。
可以从以下几个方面监控CPU的信息:
1)中断;
2)上下文切换;
3)可运行队列;
4)CPU 利用率。
Memory
“内存” 包括物理内存和虚拟内存,虚拟内存(VirtualMemory)把计算机的内存空间扩展到硬盘,物理内存(RAM)和硬盘的一部分空间(SWAP)组合在一起作为虚拟内存为计算机提供了一个连贯的虚拟内存空间,好处是我们拥有的内存 ”变多了“,可以运行更多、更大的程序,坏处是把部分硬盘当内存用整体性能受到影响,硬盘读写速度要比内存慢几个数量级,并且 RAM 和 SWAP之间的交换增加了系统的负担。
在操作系统里,虚拟内存被分成页,在 x86 系统上每个页大小是 4KB。
Linux 内核读写虚拟内存是以 “页” 为单位操作的,把内存转移到硬盘交换空间(SWAP)和从交换空间读取到内存的时候都是按页来读写的。
内存和 SWAP 的这种交换过程称为页面交换(Paging),值得注意的是 paging 和 swapping 是两个完全不同的概念,国内很多参考书把这两个概念混为一谈,swapping 也翻译成交换,在操作系统里是指把某程序完全交换到硬盘以腾出内存给新程序使用,和 paging 只交换程序的部分(页面)是两个不同的概念。
纯粹的 swapping 在现代操作系统中已经很难看到了,因为把整个程序交换到硬盘的办法既耗时又费力而且没必要,现代操作系统基本都是 paging 或者 paging/swapping 混合,swapping 最初是在 UnixsystemV 上实现的。
在这里只介绍和性能监测有关的两个内核进程:
kswapd 和 pdflush。
(1)kswapddaemon 用来检查 pages_high 和 pages_low,如果可用内存少于 pages_low,kswapd 就开始扫描并试图释放 32个页面,并且重复扫描释放的过程直到可用内存大于 pages_high 为止。
扫描的时候检查3件事:
1)如果页面没有修改,把页放到可用内存列表里;
2)如果页面被文件系统修改,把页面内容写到磁盘上;
3)如果页面被修改了,但不是被文件系统修改的,把页面写到交换空间。
(2)pdflushdaemon 用来同步文件相关的内存页面,把内存页面及时同步到硬盘上。
比如打开一个文件,文件被导入到内存里,对文件做了修改后并保存后,内核并不马上保存文件到硬盘,由 pdflush 决定什么时候把相应页面写入硬盘,这由一个内核参数 vm.dirty_background_ratio 来控制,比如下面的参数显示脏页面(dirtypages)达到所有内存页面10%的时候开始写入硬盘。
IO
磁盘通常是计算机最慢的子系统,也是最容易出现性能瓶颈的地方,因为磁盘离 CPU 距离最远而且 CPU 访问磁盘要涉及到机械操作,比如转轴、寻轨等。
访问硬盘和访问内存之间的速度差别是以数量级来计算的,就像1天和1分钟的差别一样。
要监测 IO 性能,有必要了解一下基本原理和 Linux 是如何处理硬盘和内存之间的 IO 的。
1)内存页
内存和硬盘之间的 IO 是以页为单位来进行的,在 Linux 系统上1页的大小为 4K。
可以用以下命令查看系统默认的页面大小:
$/usr/bin/time-vdate
...
Pagesize(bytes):
4096
...
2)缺页中断
Linux 利用虚拟内存极大的扩展了程序地址空间,使得原来物理内存不能容下的程序也可以通过内存和硬盘之间的不断交换(把暂时不用的内存页交换到硬盘,把需要的内存页从硬盘读到内存)来赢得更多的内存,看起来就像物理内存被扩大了一样。
事实上这个过程对程序是完全透明的,程序完全不用理会自己哪一部分、什么时候被交换进内存,一切都有内核的虚拟内存管理来完成。
当程序启动的时候,Linux 内核首先检查 CPU 的缓存和物理内存,如果数据已经在内存里就忽略,如果数据不在内存里就引起一个缺页中断(PageFault),然后从硬盘读取缺页,并把缺页缓存到物理内存里。
缺页中断可分为主缺页中断(MajorPageFault)和次缺页中断(MinorPageFault),要从磁盘读取数据而产生的中断是主缺页中断;数据已经被读入内存并被缓存起来,从内存缓存区中而不是直接从硬盘中读取数据而产生的中断是次缺页中断。
上面的内存缓存区起到了预读硬盘的作用,内核先在物理内存里寻找缺页,没有的话产生次缺页中断从内存缓存里找,如果还没有发现的话就从硬盘读取。
很显然,把多余的内存拿出来做成内存缓存区提高了访问速度,这里还有一个命中率的问题,运气好的话如果每次缺页都能从内存缓存区读取的话将会极大提高性能。
要提高命中率的一个简单方法就是增大内存缓存区面积,缓存区越大预存的页面就越多,命中率也会越高。
3)FileBufferCache
从上面的内存缓存区(也叫文件缓存区 FileBufferCache)读取页比从硬盘读取页要快得多,所以 Linux 内核希望能尽可能产生次缺页中断(从文件缓存区读),并且能尽可能避免主缺页中断(从硬盘读),这样随着次缺页中断的增多,文件缓存区也逐步增大,直到系统只有少量可用物理内存的时候 Linux 才开始释放一些不用的页。
我们运行 Linux 一段时间后会发现虽然系统上运行的程序不多,但是可用内存总是很少,这样给大家造成了 Linux 对内存管理很低效的假象,事实上 Linux 把那些暂时不用的物理内存高效的利用起来做预存(内存缓存区)。
4)页面类型
Linux 中内存页面有三种类型:
Readpages,只读页(或代码页),那些通过主缺页中断从硬盘读取的页面,包括不能修改的静态文件、可执行文件、库文件等。
当内核需要它们的时候把它们读到内存中,当内存不足的时候,内核就释放它们到空闲列表,当程序再次需要它们的时候需要通过缺页中断再次读到内存。
Dirtypages,脏页,指那些在内存中被修改过的数据页,比如文本文件等。
这些文件由 pdflush 负责同步到硬盘,内存不足的时候由 kswapd 和 pdflush 把数据写回硬盘并释放内存。
Anonymouspages,匿名页,那些属于某个进程但是又和任何文件无关联,不能被同步到硬盘上,内存不足的时候由 kswapd 负责将它们写到交换分区并释放内存。
5)IO’SPerSecond(IOPS)
每次磁盘 IO 请求都需要一定的时间,和访问内存比起来这个等待时间简直难以忍受。
在一台 2001 年的典型 1GHzPC 上,磁盘随机访问一个 word 需要 8,000,000nanosec=8millisec,顺序访问一个 word 需要 200nanosec;而从内存访问一个 word 只需要 10nanosec.(数据来自:
TeachYourselfProgramminginTenYears)这个硬盘可以提供 125 次 IOPS(1000ms/8ms)。
6)顺序IO和随机IO
IO 可分为顺序 IO 和 随机 IO 两种,性能监测前需要弄清楚系统偏向顺序 IO 的应用还是随机 IO 应用。
顺序 IO 是指同时顺序请求大量数据,比如数据库执行大量的查询、流媒体服务等,顺序 IO 可以同时很快的移动大量数据。
可以这样来评估 IOPS 的性能,用每秒读写 IO 字节数除以每秒读写 IOPS 数,rkB/s 除以 r/s,wkB/s 除以 w/s. 下面显示的是连续2秒的 IO 情况,可见每次 IO 写的数据是增加的(45060.00/99.00=455.15KBperIO,54272.00/112.00=484.57KBperIO)。
相对随机 IO 而言,顺序 IO 更应该重视每次 IO 的吞吐能力(KBperIO),随机 IO 是指随机请求数据,其 IO 速度不依赖于数据的大小和排列,依赖于磁盘的每秒能 IO 的次数,比如 Web 服务、Mail 服务等每次请求的数据都很小,随机 IO 每秒同时会有更多的请求数产生,所以磁盘的每秒能 IO 多少次是关键。
7)SWAP
当系统没有足够物理内存来应付所有请求的时候就会用到 swap 设备,swap 设备可以是一个文件,也可以是一个磁盘分区。
不过要
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 测试