应用程序性能测试的艺术(连载)第2章 有效应用系统性能测试的基本原则02

<!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:黑体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimHei; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:1 135135232 16 0 262144 0;} @font-face {font-family:"Cambria Math"; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:-1610611985 1107304683 0 0 159 0;} @font-face {font-family:"/@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"/@黑体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:1 135135232 16 0 262144 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman","serif"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} h2 {mso-style-unhide:no; mso-style-qformat:yes; mso-style-link:"标题 2 Char"; mso-style-next:正文; margin-top:13.0pt; margin-right:0cm; margin-bottom:13.0pt; margin-left:45.0pt; text-align:justify; text-justify:inter-ideograph; text-indent:0cm; line-height:173%; mso-pagination:lines-together; page-break-after:avoid; mso-outline-level:2; mso-list:l1 level1 lfo1; font-size:16.0pt; font-family:"Arial","sans-serif"; mso-fareast-font-family:黑体; mso-bidi-font-family:"Times New Roman"; mso-font-kerning:1.0pt;} p.MsoFootnoteText, li.MsoFootnoteText, div.MsoFootnoteText {mso-style-noshow:yes; mso-style-unhide:no; mso-style-link:"脚注文本 Char"; margin:0cm; margin-bottom:.0001pt; mso-pagination:none; layout-grid-mode:char; font-size:9.0pt; font-family:"Times New Roman","serif"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} span.MsoFootnoteReference {mso-style-noshow:yes; mso-style-unhide:no; vertical-align:super;} span.2Char {mso-style-name:"标题 2 Char"; mso-style-unhide:no; mso-style-locked:yes; mso-style-link:"标题 2"; mso-ansi-font-size:16.0pt; mso-bidi-font-size:16.0pt; font-family:"Arial","sans-serif"; mso-ascii-font-family:Arial; mso-fareast-font-family:黑体; mso-hansi-font-family:Arial; mso-font-kerning:1.0pt; font-weight:bold;} span.Char {mso-style-name:"脚注文本 Char"; mso-style-noshow:yes; mso-style-unhide:no; mso-style-locked:yes; mso-style-link:脚注文本; mso-ansi-font-size:9.0pt; mso-bidi-font-size:9.0pt; mso-font-kerning:1.0pt;} .MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; font-size:10.0pt; mso-ansi-font-size:10.0pt; mso-bidi-font-size:10.0pt; mso-ascii-font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-hansi-font-family:"Times New Roman"; mso-font-kerning:0pt;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no; mso-footnote-separator:url("file:///C:/DOCUME~1/阳光8F~1.000/LOCALS~1/Temp/msohtmlclip1/01/clip_header.htm") fs; mso-footnote-continuation-separator:url("file:///C:/DOCUME~1/阳光8F~1.000/LOCALS~1/Temp/msohtmlclip1/01/clip_header.htm") fcs; mso-endnote-separator:url("file:///C:/DOCUME~1/阳光8F~1.000/LOCALS~1/Temp/msohtmlclip1/01/clip_header.htm") es; mso-endnote-continuation-separator:url("file:///C:/DOCUME~1/阳光8F~1.000/LOCALS~1/Temp/msohtmlclip1/01/clip_header.htm") ecs;} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} /* List Definitions */ @list l0 {mso-list-id:1383166960; mso-list-template-ids:143714856;} @list l0:level1 {mso-level-text:第%1章; mso-level-tab-stop:21.6pt; mso-level-number-position:left; margin-left:21.6pt; text-indent:-21.6pt;} @list l0:level2 {mso-level-text:"%1/.%2"; mso-level-tab-stop:28.8pt; mso-level-number-position:left; margin-left:28.8pt; text-indent:-28.8pt;} @list l0:level3 {mso-level-text:"%1/.%2/.%3"; mso-level-tab-stop:36.0pt; mso-level-number-position:left; margin-left:36.0pt; text-indent:-36.0pt;} @list l0:level4 {mso-level-text:"%1/.%2/.%3/.%4"; mso-level-tab-stop:43.2pt; mso-level-number-position:left; margin-left:43.2pt; text-indent:-43.2pt;} @list l0:level5 {mso-level-text:"%1/.%2/.%3/.%4/.%5"; mso-level-tab-stop:50.4pt; mso-level-number-position:left; margin-left:50.4pt; text-indent:-50.4pt;} @list l0:level6 {mso-level-text:"%1/.%2/.%3/.%4/.%5/.%6"; mso-level-tab-stop:57.6pt; mso-level-number-position:left; margin-left:57.6pt; text-indent:-57.6pt;} @list l0:level7 {mso-level-text:"%1/.%2/.%3/.%4/.%5/.%6/.%7"; mso-level-tab-stop:64.8pt; mso-level-number-position:left; margin-left:64.8pt; text-indent:-64.8pt;} @list l0:level8 {mso-level-text:"%1/.%2/.%3/.%4/.%5/.%6/.%7/.%8"; mso-level-tab-stop:72.0pt; mso-level-number-position:left; margin-left:72.0pt; text-indent:-72.0pt;} @list l0:level9 {mso-level-text:"%1/.%2/.%3/.%4/.%5/.%6/.%7/.%8/.%9"; mso-level-tab-stop:79.2pt; mso-level-number-position:left; margin-left:79.2pt; text-indent:-79.2pt;} @list l1 {mso-list-id:1780225228; mso-list-template-ids:-65785144;} @list l1:level1 {mso-level-style-link:"标题 2"; mso-level-suffix:none; mso-level-text:"P/.%1/."; mso-level-tab-stop:none; mso-level-number-position:left; margin-left:45.0pt; text-indent:0cm;} @list l1:level2 {mso-level-number-format:none; mso-level-suffix:none; mso-level-text:""; mso-level-tab-stop:none; mso-level-number-position:left; margin-left:0cm; text-indent:0cm;} @list l1:level3 {mso-level-number-format:none; mso-level-suffix:none; mso-level-text:""; mso-level-tab-stop:none; mso-level-number-position:left; margin-left:0cm; text-indent:0cm;} @list l1:level4 {mso-level-number-format:none; mso-level-suffix:none; mso-level-text:""; mso-level-tab-stop:none; mso-level-number-position:left; margin-left:0cm; text-indent:0cm;} @list l1:level5 {mso-level-number-format:none; mso-level-suffix:none; mso-level-text:""; mso-level-tab-stop:none; mso-level-number-position:left; margin-left:0cm; text-indent:0cm;} @list l1:level6 {mso-level-number-format:none; mso-level-suffix:none; mso-level-text:""; mso-level-tab-stop:none; mso-level-number-position:left; margin-left:0cm; text-indent:0cm;} @list l1:level7 {mso-level-number-format:none; mso-level-suffix:none; mso-level-text:""; mso-level-tab-stop:none; mso-level-number-position:left; margin-left:0cm; text-indent:0cm;} @list l1:level8 {mso-level-number-format:none; mso-level-suffix:none; mso-level-text:""; mso-level-tab-stop:none; mso-level-number-position:left; margin-left:0cm; text-indent:0cm;} @list l1:level9 {mso-level-number-format:none; mso-level-suffix:none; mso-level-text:""; mso-level-tab-stop:none; mso-level-number-position:left; margin-left:0cm; text-indent:0cm;} @list l0:level1 lfo2 {mso-level-numbering:continue; mso-level-tab-stop:21.6pt; mso-level-number-position:left; margin-left:21.6pt; text-indent:-21.6pt;} @list l0:level2 lfo2 {mso-level-numbering:continue; mso-level-tab-stop:28.8pt; mso-level-number-position:left; margin-left:28.8pt; text-indent:-28.8pt;} @list l0:level3 lfo2 {mso-level-numbering:continue; mso-level-tab-stop:36.0pt; mso-level-number-position:left; margin-left:36.0pt; text-indent:-36.0pt;} @list l0:level4 lfo2 {mso-level-numbering:continue; mso-level-tab-stop:43.2pt; mso-level-number-position:left; margin-left:43.2pt; text-indent:-43.2pt;} @list l0:level5 lfo2 {mso-level-numbering:continue; mso-level-tab-stop:50.4pt; mso-level-number-position:left; margin-left:50.4pt; text-indent:-50.4pt;} @list l0:level6 lfo2 {mso-level-numbering:continue; mso-level-tab-stop:57.6pt; mso-level-number-position:left; margin-left:57.6pt; text-indent:-57.6pt;} @list l0:level7 lfo2 {mso-level-numbering:continue; mso-level-tab-stop:64.8pt; mso-level-number-position:left; margin-left:64.8pt; text-indent:-64.8pt;} @list l0:level8 lfo2 {mso-level-numbering:continue; mso-level-tab-stop:72.0pt; mso-level-number-position:left; margin-left:72.0pt; text-indent:-72.0pt;} @list l0:level9 lfo2 {mso-level-numbering:continue; mso-level-tab-stop:79.2pt; mso-level-number-position:left; margin-left:79.2pt; text-indent:-79.2pt;} ol {margin-bottom:0cm;} ul {margin-bottom:0cm;} -->

2.1    选择合适的性能测试工具

自动化工具在大约 15 年前就已经出现了,在这段时期,应用系统技术早已日新月异,从标准的“胖客户端( fat client )”发展为 Web 应用。因此,目前的自动化工具必须更偏重于支持 Web 应用,而支持传统的基于两层应用架构的系统需求则越来越少。这种“注重 Web 应用”的情况对于性能测试人员来说是个好消息,因为现在即使是您没有太多的预算,在市面上同样有很多的自动化工具厂商可供选择,除此之外,还有许多免费或开源的共享软件可供使用。

随着面向服务的架构( Service Oriented Architecture SOA )体系的出现,还可能会发生另外一些巨大的变化,我们关注的性能将不再仅仅针对最终用户的交易( Transaction ),而且还包含了业务流程。对于目前的这些性能工具来说,这个概念通常显得有点抽象,但是使用了类似 Web Service 技术的相关业务流程组件,同样可以对其进行测试。我将在第 5 章中讨论 SOA 和其他的一些技术。

应用系统技术的发展,对于 Web 应用系统的性能测试技术的支持和工具的支持对我们测试人员来说是很好的帮助,但是这也有一些缺陷。比如:当您需要做非 Web 应用的性能测试时,工具厂商的选择空间就会大大减少,而且在技术方面也同样存在着挑战。这些问题的核心并不在于执行测试和分析结果,而是如何成功地录制应用系统的操作,增强并生成测试脚本的过程。 [1] 在性能测试过程中,“加密”和“压缩”技术往往是生成测试脚本的难题,因为由于系统的这些技术可能导致无法开发测试脚本。如果不影响到最终的测试结果,最好在测试过程中屏蔽这些技术。

即使是基于 Web 的技术也同样可以暴露性能测试工具的问题。举例来说,假如您需要处理流媒体或客户端认证技术,那么并不是所有的厂商都可以提供解决方案。因此在对测试工具进行最终选择之前,应该仔细地考虑您需要性能测试工具提供的功能,而且我建议在决定购买之前先做一次概念验证( Proof of Concept,POC

尽管存在着上述内容中的挑战,在正规的性能测试中仍然有必要引入自动化工具。这也是我在第 1 章中提到的为什么许多应用系统在发布前没有进行正确的性能测试的原因。因为不使用自动化工具,就没有办法执行可靠的、可重复的性能测试。 [2]

因此,任何自动化性能测试工具的目标就是简化测试过程,测试工具一般是通过提供录制用户操作,并将其转换为交易或脚本来实现的。这些脚本被用来创建负载测试的会话和场景,并以此模拟典型的最终用户对业务的操作。这才是真正的性能测试,一旦创建,便可以很容易地重复执行,这正是他与任何手工测试相比最大的优势所在。

与手工测试相比,自动测试还有另外一个巨大的优势,他能够快速地从不同的系统资源(比如服务器,网络和应用系统响应时间)获取的性能数据关联起来,并且在同一个视图中展现。这些信息在每一次测试运行过程中都会记录下来,这样就可以很容易的比较多次性能测试的结果。

1.1.1     测试工具的构成

自动化性能测试工具通常由以下组件构成:

脚本模块

提供录制最终用户操作的功能,并支持很多不同的中间组件协议。允许修改录制脚本以关联内部 / 外部数据,以及配置响应时间度量的粒度。

测试管理模块

提供创建和执行负载测试的会话或场景,并以此模拟不同用户混合业务的操作。这些会话负责调用指定的脚本,以及调度一个或多个负载生成器。

负载生成器

从多个工作台或服务器上创建一般负载,创建负载的大小视负载需要而定。

分析模块

提供对每次测试执行过程中收集到的数据分析的功能。这些数据通常是一些自动生成的报表和图形,或者是表格形式的报告组合而成,可能还会提供自动分析结果并将关注的重点区域进行突出显示等一些“高级”功能。

除了以上这些模块,还要再加上一个在负载测试运行过程中监控服务器和网络性能的模块。图 2-1 展示了一个典型的自动化性能测试工具配置情况。由负载生成器生成的“虚拟用户”代表了应用系统的实际用户。


[1] 译者注:脚本开发的一般过程包括:通过录制生成脚本框架、编辑并增强脚本、调试并最终确认脚本。

[2] 译者注:合理的性能测试工具的引入,是应用系统性能测试成败的关键技术之一。

发布了93 篇原创文章 · 获赞 5 · 访问量 43万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览