﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-我的ITblog我作主　　关注→　『伊波拉』→　测试　SzDlinXie- ITblog　　  　　   -文章分类-软件测试杂志</title><link>http://www.cnitblog.com/szdlinxie/category/4483.html</link><description>·√·  本ITblog站点记录相关的软件技术文档、网络技术杂志、测试技术杂谈等技术文档的管理站点.联系方式：MSN：dowling@sunlike.cn   QQ:94595885</description><language>zh-cn</language><lastBuildDate>Sat, 01 Oct 2011 02:14:52 GMT</lastBuildDate><pubDate>Sat, 01 Oct 2011 02:14:52 GMT</pubDate><ttl>60</ttl><item><title>db2个人版快速入门</title><link>http://www.cnitblog.com/szdlinxie/articles/32124.html</link><dc:creator>szdlinxie</dc:creator><author>szdlinxie</author><pubDate>Mon, 20 Aug 2007 16:42:00 GMT</pubDate><guid>http://www.cnitblog.com/szdlinxie/articles/32124.html</guid><wfw:comment>http://www.cnitblog.com/szdlinxie/comments/32124.html</wfw:comment><comments>http://www.cnitblog.com/szdlinxie/articles/32124.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/szdlinxie/comments/commentRss/32124.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/szdlinxie/services/trackbacks/32124.html</trackback:ping><description><![CDATA[<a href="http://www.cnitblog.com/Files/szdlinxie/db2A.pdf">/Files/szdlinxie/db2A.pdf</a>
<img src ="http://www.cnitblog.com/szdlinxie/aggbug/32124.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/szdlinxie/" target="_blank">szdlinxie</a> 2007-08-21 00:42 <a href="http://www.cnitblog.com/szdlinxie/articles/32124.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IBM Rational ClearCase 视图全攻略</title><link>http://www.cnitblog.com/szdlinxie/articles/20864.html</link><dc:creator>szdlinxie</dc:creator><author>szdlinxie</author><pubDate>Wed, 20 Dec 2006 09:18:00 GMT</pubDate><guid>http://www.cnitblog.com/szdlinxie/articles/20864.html</guid><wfw:comment>http://www.cnitblog.com/szdlinxie/comments/20864.html</wfw:comment><comments>http://www.cnitblog.com/szdlinxie/articles/20864.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/szdlinxie/comments/commentRss/20864.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/szdlinxie/services/trackbacks/20864.html</trackback:ping><description><![CDATA[
		<div class="style7" align="center">
				<span style="FONT-SIZE: 12pt">
						<b>IBM Rational ClearCase 视图全攻略<br /><div class="daxiao14" align="left"><p class="main"><strong>1  本文简介</strong></p><p class="main"> Rational ClearCase 作为一款功能强大的软件配置管理（ SCM ）工具，在国内已经得到许多企业用户的认可并被广泛采纳。为了帮助大家更好的了解和使用 ClearCase ，本文将全方位解剖 ClearCase 的重要组成部分：视图（ View ）。</p><p class="main"><strong>2  ClearCase视图的分类</strong></p><p class="main">我们知道，软件配置管理工具的一个基本功能是建立和管理开发人员的工作空间。在 ClearCase 中，工作空间被称为视图（ View ），它可以选择所指定任务的每一个文件或目录的适当版本，并将它们呈现给使用者。通俗的讲， View 就像一个过滤器，依据一组配置规则从 VOB 中将我们需要的文件或目录的版本选择出来。 View 是访问 VOB 库中文件和目录版本的手段，通过视图，用户可以浏览、修改、构建可用的文件和目录。</p><p class="main">在实际使用中， View 分为两种类型，即 Dynamic View （动态视图）和 Snapshot View （静态视图，又称快照视图）。下面我们来看看这两种视图有什么差异：</p><p class="main">动态视图：</p>•  自动保持与 VOB 库的同步更新； 
<p class="main">•  使用 MVFS 文件系统透明访问 VOB 库，不占用本机空间；</p><p class="main">动态视图无需将文件拷贝到本地目录，通过虚拟文件系统对 VOB 中的版本进行存取操作。</p><p class="main">•  动态视图的使用依赖于网络；</p><p class="main">•  提供了共享派生对象和构建审计功能，这是动态视图独有的。</p><p class="main">•  动态视图通过 mount 指定的 VOB 库来获取数据。</p><p class="main"> 动态视图采用 mount 的方式获取 VOB 中的数据，速度比较快，它是一个全局视图。</p><p class="main"> 静态视图：</p><p class="main">•  只能定期通过 update 操作实现文件的更新；</p><p class="main">•  文件被下载到本地，占用本地空间；</p><p class="main">•  可以离线工作，断网使用；</p><p class="main">•  可以在本地进行高速编译；</p><p class="main">•  使用静态视图占用 ClearCase 服务器资源较少；</p><p class="main">•  静态视图通过 load 指定的 VOB 库来查看文件。</p><p class="main">因此你可以只选择下载与你的需要有关的文件拷贝（除非你需要所有的内容），这个可通过通过专门的下载规则来实现。当然静态视图也可以卸载在下载规则中被过滤和删除的文件。</p><p class="main">通过对两种视图比较，我们会发现它们各有千秋。在实际使用中，当你希望离线工作或只需要 VOB 库中的部分代码时，建议使用静态视图，这样还能减少因对服务器频繁访问所造成的压力。如果你使用便携式电脑，使用静态视图则更加便利。</p><p class="main">当需要节省本地磁盘空间、希望频繁自动更新或者仅仅是为了查看文档、代码，创建动态视图既快速又不占用本机空间，是个不错的选择。</p><p class="main"><strong>3  如何创建视图</strong></p><p class="main">当你安装了 ClearCase 客户端软件后，要做的第一件事就是创建 View 。如图 1 所示，我们打开 ClearCase Explorer ，以 Base ClearCase 为例，在工具栏里有一项“ Create View ”：</p><p align="center"><img height="427" src="http://www.51testing.com/ddimg/uploadimg/20060104/0929130.jpg" width="553" /></p><p align="center">图 1</p><p class="main">点击“ Create View ”后，出现图 2 ，因为我们是以 Base ClearCase 为例，这里选择默认即可。</p><p align="center"><img height="361" src="http://www.51testing.com/ddimg/uploadimg/20060104/0929131.jpg" width="538" /></p><p align="center">图 2</p><p class="main">根据你的需求选择创建 Snapshot View 或者 Dynamic View ，见图 3 所示：</p><p align="center"><img height="361" src="http://www.51testing.com/ddimg/uploadimg/20060104/0929132.jpg" width="538" /></p><p align="center">图 3</p><p class="main">如果你要创建静态视图，如图 4 ，需要指定该视图在本机的存储路径（存放从 VOB 库中 load 的文件和目录）。</p><p align="center"><img height="361" src="http://www.51testing.com/ddimg/uploadimg/20060104/0929133.jpg" width="538" /></p><p align="center">图 4</p><p class="main">如果你要创建动态视图，则只需要指定一个映射盘符即可，见图 5 。因为动态视图是通过 MVFS 访问 VOB 库中的数据，不需要将数据下载到本机。</p><p align="center"><img height="358" src="http://www.51testing.com/ddimg/uploadimg/20060104/0929134.jpg" width="535" /></p><p align="center">图 5</p><p class="main">在图 4 和图 5 中都有一个“ Advanced Options ”按钮，点击进入后见图 6 ，这里可以选择你的视图是存储在服务器端还是本机。 ClearCase 的 View 数据（主要是 View database 等）既可以存放在 View Server 中，也可以存放在本机。一般建议存放在 View Server 中，以便组织进行统一管理。</p><p align="center"><img height="325" src="http://www.51testing.com/ddimg/uploadimg/20060104/0929135.jpg" width="554" /></p><p align="center">图 6</p><p class="main">选择完成后，将进入如图 7 所示界面，这里有一个“ Inspect Config Spec ”，用来定义该视图的配置规约（ Config Spec ），配置规约将决定哪些版本可以看到，点击进入：</p><p align="center"><img height="240" src="http://www.51testing.com/ddimg/uploadimg/20060104/0929136.jpg" width="327" /></p><p align="center">图 7</p><p class="main">进入“ Inspect Config Spec ”后，我们会发现里面有默认的规约，见图 8 ，可以直接使用。通常管理员或配置经理会根据开发的需要编写一些特定的配置规约供开发人员使用，在这里进行选择和修改。</p><p align="center"><img height="354" src="http://www.51testing.com/ddimg/uploadimg/20060104/0929137.jpg" width="366" /></p><p align="center">图 8</p><p class="main">完成了以上的选择和设置后，就可以成功创建一个视图了。</p><p class="main"><strong>4  视图的管理</strong></p><p class="main">视图通常与任务对应，经过一段时间的使用后，用户因需要会创建了多个视图，这就涉及到视图的管理和维护问题。</p><p class="main style1">4 .1 与视图相关的基本操作</p><p class="main">对于普通开发人员而言，与视图相关的操作主要包括视图的创建和删除，操作相对比较简单。需要强调的是：在删除视图时，要使用 ”Remove View”进行操作，如图9所示。如果使用”Remove View shortcut”,则只是删除了该视图的快捷方式，更新后还会再次出现。</p><p class="main">静态视图有一个特有的操作是 update，需要定期进行，才能和VOB中的数据保持同步。</p><p align="center"><img height="368" src="http://www.51testing.com/ddimg/uploadimg/20060104/0929138.jpg" width="554" /></p><p align="center">图 9</p><p class="main"><span class="style1">4.2 关于 hijacked文件</span></p><p class="main">我们知道，静态视图将 VOB中的文件下载到本地后，文件是只读的。如果你绕过检出(checkout)操作，只是去掉某个需要更改文件的只读属性就进行操作，那么该文件就被称为“劫持”（ hijacked）文件。 具体的表现为：在 ClearCase Explorer 中，处于“ hijacked ”的元素会有一个带对号的红色圆圈。</p><p class="main">如果出现“ hijacked”，有两种操作方式可供选择：</p><p class="main">•  鼠标右击“ Hijacked”的元素，选择“Undo Hijacked”。为了不丢失你对文件所做的改动，Undo Hijacked之后，ClearCase自动生成一个后缀为“keep”的私有文件（view private files），这时你不仅取消了Hijacked，同时也保存了你的工作成果（当然如果不需要可以删除这个私有文件）。</p><p class="main">•  更新视图（ update view），然后鼠标右击“Hijacked”的元素，选择“Check Out”，该元素将处于“checked out”状态，这时你可以继续对该元素进行改动，也可以直接做Check in操作， 完成文件变更的入库，形成新的版本。</p><p class="main">以上也给大家提供了利用静态视图离线或在家办公的方法，还不错吧。</p><p class="main style1">4.3 视图的迁移</p><p class="main">该部分内容主要针对 ClearCase管理员而言。视图的迁移主要是将View Server中的视图在同一个机器中从一个存储区域迁移到另外一个存储区或者跨服务器间移动。通常在视图存储空间不足或者为了提升View Server性能使用新服务器时，需要进行视图的迁移，这样原有的视图信息不会被破坏，客户端基本不受任何影响，迁移后可以正常使用原有的视图。</p><p class="main">下面我们举例说明如何将视图从 CCSERV1这台视图服务器迁移到CCSERV2上：</p><p class="main">4.3.1 首先对CCSERV1上的所有用户的视图信息进行备份。</p><p class="main">4.3.2 将CCSERV2安装为视图服务器，并创建相应的视图存储路径。</p><p class="main">4.3.3 做好以上准备后，就可以进行正式的迁移工作。</p><p class="main">•  在CCSERV1上停掉ClearCase服务，如图10所示。</p><p class="main">•  使用ccopy命令将CCSERV1的视图拷贝到CCSERV2上新建的视图存储目录中，如：</p><p class="main">ccopy G:\cc_Storage\views\ccview \\ccserv2\cc_ Storage\views\ccview</p><p class="main">上面的操作是将 CCSERV1中ccview目录中的视图信息拷贝到CCSERV2的ccview中，如果有多个目录需要进行拷贝可以写成一个脚本统一进行。</p><p align="center"><img height="410" src="http://www.51testing.com/ddimg/uploadimg/20060104/0929139.jpg" width="486" /></p><p align="center">图 10</p><p class="main">4.3.4 确认拷贝到CCSERV2的数据是否完整。</p><p class="main">4.3.5 启动CCSERV1上的ClearCase服务，在CCSERV2上对迁移的视图进行重新注册。</p><p class="main">因为可能涉及到成百上千的视图，单个进行注册是不现实的，需要通过程序进行。基本的思路是先将视图原有的注册信息删除，然后重新注册到CCSERV2上去。这里给大家一个perl语言编写的例子供参考：</p><p class="main">printf ("All Views begin registering:\n");</p><p class="main">@lines = `cleartool lsview -region soft1 -s`;</p><p class="main">foreach $line(@lines)</p>{ 
<p class="main">chomp ($line);</p><p class="main">$view_info = `cleartool lsview -region soft1 $line`;</p>chomp ($view_info); 
<p class="main">$view_info =~ m/(\S+)\s+(\S+)/;</p><p class="main"> $view_tag = $1;</p><p class="main">$view_stg = $2;</p><p class="main">printf "\n";</p><p class="main">printf("The old view stg is:%s\n",$view_stg);</p><p class="main">system("cleartool rmtag -view -region soft1 $view_tag");</p><p class="main">system("cleartool unregister -view $view_stg");</p><p class="main">$new_view_stg = $view_stg;</p><p class="main">chomp ($new_view_stg);</p><p class="main">if ($new_view_stg =~ m/ccview/)</p><p class="main">{</p><p class="main">$new_view_stg=~ s/\\\\ccserv1\\ccview\\views/\\\\ccserv2\\ccview \\views/;</p><p class="main">}</p><p class="main">printf ("The new_view_stg is:%s\n",$new_view_stg);</p><p class="main">$rc = system("cleartool register -view $new_view_stg");</p><p class="main">if ($rc)</p><p class="main">{</p><p class="main"> print LOG_F "$line\n";</p><p class="main">}</p><p class="main">system("cleartool mktag -nstart -region soft1 -view -tag $view_tag $new_view_stg");</p><p class="main">printf "\n";</p><p class="main">}</p><p class="main">printf ("All Views register successfully!\n");</p><p class="main">上面的程序完成了将视图在 CCSERV1上原有的信息删除，然后重新注册到CCSERV2的功能。这里需要注意的是：如果存在多个region，需要分别进行处理。</p><p class="main">4.3.6 验证迁移后的视图使用是否正常。</p><p class="main">在客户端检查原有的静态和动态视图能否正常使用，可以做一些常见的操作，如checkout、checkin、update和mount（仅对动态视图）等。</p><p class="main">4.3.7 检查无误后可以将CCSERV1上的视图数据和视图存储路径予以清除。</p><p class="main">至此，整个视图的迁移工作大功告成。</p><p class="main"><span class="style1">4.4 视图的清除</span></p><p class="main">因为用户对视图处理不当，在经过一段时间的运作后，会出现一些垃圾视图（即已经不再使用但没有被彻底清除），日积月累会严重影响 ClearCase 服务器的性能。可以使用以下命令予以彻底的清除：</p><p class="main">cleartool rmtag -view $tag;</p><p class="main">cleartool rmview -force -all -uuid $uuid;</p><p class="main">cleartool unregist -view -uuid $uuid;</p><p class="main">以上命令需要的 tag 、 uuid 信息可以通过 lsview 命令获取，将这些命令进行组合，写成一个脚本便可以实现批量清除垃圾视图。</p><p class="main"><strong>5  总结</strong></p><p class="main">本文对 Base ClearCase中的View进行了较为详细的介绍（UCM方式基于活动，故有所差异，本文没有提及），希望能对大家有所启示。由于View本身牵涉内容较多，如有更深层次的需求，可以参考ClearCase自带的用户手册，做进一步的研究。</p><p class="main" align="left">本文缩略语：</p><p class="main" align="left">VOB(Versioned Object Base): 版本对象库,ClearCase 数据的存储库，它存储了处于版本控制下所有的文件、目录和元数据等。</p><p class="main" align="left">View: 视图，它可以选择所指定任务的每一个文件或目录的适当版本，并呈现它们。</p><p class="main" align="left">View Server：存储View数据的服务器。</p><p><span class="main"> MVFS(Multiversioned File System)：多版本文件系统，它通过使用标准操作系统协议增加一个新文件系统类型，MVFS提供了透明的版本控制机制。</span></p></div></b>
				</span>
		</div>
<img src ="http://www.cnitblog.com/szdlinxie/aggbug/20864.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/szdlinxie/" target="_blank">szdlinxie</a> 2006-12-20 17:18 <a href="http://www.cnitblog.com/szdlinxie/articles/20864.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Rational的测试理念</title><link>http://www.cnitblog.com/szdlinxie/articles/20860.html</link><dc:creator>szdlinxie</dc:creator><author>szdlinxie</author><pubDate>Wed, 20 Dec 2006 08:10:00 GMT</pubDate><guid>http://www.cnitblog.com/szdlinxie/articles/20860.html</guid><wfw:comment>http://www.cnitblog.com/szdlinxie/comments/20860.html</wfw:comment><comments>http://www.cnitblog.com/szdlinxie/articles/20860.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/szdlinxie/comments/commentRss/20860.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/szdlinxie/services/trackbacks/20860.html</trackback:ping><description><![CDATA[
		<div class="daxiao14" align="left">
				<h2>
						<b>1.</b>
						<b>传统软件测试过程中的问题</b>
						<b>
						</b>
				</h2>
				<div>    测试在所有的软件开发过程中都是最重要的部分。在软件开发过程中，一方面要求我们通过测试活动验证所开发的软件在功能上满足软件需求中描述的每一条特性，性能上满足客户要求的负载压力和相应的响应时间、吞吐量要求；另一方面，面向市场和客户，开发团队还要满足在预算范围内尽快发布软件的要求。 <br />    传统的软件测试流程一般是先在软件开发过程中进行少量的单元测试，然后在整个软件开发结束阶段，集中进行大量的测试，包括功能和性能的集成测试和系统测试。随着开发的软件项目越来越复杂，传统的软件测试流程不可避免地给我们的工作带来以下问题： <br /><b>    问题一：</b>项目进度难于控制，项目管理难度加大<br />    如图一所示，大量的软件错误往往只有到了项目后期系统测试时才能够被发现，解决问题所花的时间很难预料，经常导致项目进度无法控制，同时在整个软件开发过程中，项目管理人员缺乏对软件质量状况的了解和控制，加大了项目管理难度。</div>
				<div align="center">
						<img alt="" src="http://www.51testing.com/ddimg/uploadimg/20060703/1114060.JPG" />
						<br />
						<b>图一、传统测试流程中存在的问题</b>
						<b>
						</b>
				</div>
				<div>
						<b>    问题二</b>：对于项目风险的控制能力较弱<br />项目风险在项目开发较晚的时候才能够真正降低。往往是经过系统测试之后，才真正确定该设计是否能够满足系统功能、性能和可靠性方面的需求。 <br /><b>    问题三</b>：软件项目开发费用超出预算<br />在整个软件开发周期中，错误发现的越晚，单位错误修复成本越高，如图二所示，错误的延迟解决必然导致整个项目成本的急剧增加。 </div>
				<div align="center">
						<img alt="" src="http://www.51testing.com/ddimg/uploadimg/20060703/1114061.JPG" />  </div>
				<div align="center">
						<b>图二、传统测试流程中存在的问题</b>
						<b>
						</b>
				</div>
				<h2>
						<b>2. </b>
						<b>采用IBM Rational软件自动化测试最佳成功经验解决传统测试问题</b>
				</h2>
				<div>    IBM Rational软件自动化测试技术核心的三个最佳成功经验是：尽早测试、连续测试、自动化测试，并在此基础上提供了完整的软件测试流程和一整套的软件自动化测试工具，使我们最终能够做到：一个测试团队，基于一套完整的软件测试流程，使用一套完整的自动化软件测试工具，完成全方位的软件质量验证。</div>
				<h3>2.1 成功经验一：尽早测试</h3>
				<div>    所谓尽早测试是指在整个软件开发生命周期中通过各种软件工程技术尽量早的完成各种软件测试任务的一种思想。IBM Rational主要在以下三个方面为我们提供的尽早测试的软件工程技术： </div>
				<div>首先，软件的整个测试生命周期是与软件的开发生命周期基本平齐的过程，如图三所示，即当需求分析基本明确后我们就应该基于需求分析的结果和整个项目计划来进行软件的测试计划；伴随着分析设计过程同时应该完成测试用例的设计；当软件的第一个发布出来后，测试人员要马上基于它进行测试脚本的实现，并基于测试计划中的测试目的执行测试用例，对测试结果进行评估报告。这样，我们可以通过各种测试指标实时监控项目质量状况，提高对整个项目的控制和管理能力。<b></b></div>
				<div align="center">  <img alt="" src="http://www.51testing.com/ddimg/uploadimg/20060703/1114062.JPG" /></div>
				<div align="center">
						<b>图三、软件测试生命周期</b>
				</div>
				<div>    其次，通过迭代是软件开发把原来的整个软件开发生命周期分成多个迭代周期，在每个迭代周期都进行测试，这样在很大程度上提前了软件系统测试发生的时间，这可以在很大程度上降低项目风险和项目开发成本。 </div>
				<div>    最后，IBM Rational的尽早测试成功经验还体现在它扩展了传统软件测试阶段从单元测试、集成测试到系统测试、验收测试的划分，将整个软件的测试按阶段划分成开发员测试和系统测试两个阶段，如图四所示，它把软件的测试责无旁贷地扩展到整个开发人员的工作过程。通过提前测试发生的时间来尽早地提高软件质量、降低软件测试成本。</div>
				<div align="center">
						<img alt="" src="http://www.51testing.com/ddimg/uploadimg/20060703/1114063.JPG" />
				</div>
				<div align="center"> <b>图四、IBM Rational测试方法对测试阶段的划分</b></div>
				<h3>2.2 成功经验二：连续测试</h3>
				<div>    测试成功经验连续测试是从迭代式软件开发模式得来。在迭代化的方法中，我们将整个项目的开发目标划分成为一些更易于完成和达到的阶段性小目标，这些小目标都有一个定义明确的阶段性评估标准。迭代就是为了完成一定的阶段性目标而从事的一系列开发活动，在每个迭代开始前都要根据项目当前的状态和所要达到的阶段性目标制定迭代计划，而且每个迭代中都包括需求、设计、编码、集成、测试等一系列的开发活动，都会增量式集成一些新的系统功能。通过每次迭代，我们都产生一个可运行的系统，通过对于这个可运行系统的测试来评估该次迭代有没有达到预定的迭代目标，并以此为依据来制定下一次迭代的目标。由此可见，在迭代式软件开发的每个迭代周期我们都会进行软件测试活动，整个软件测试的完成是通过每个迭代周期不断增量测试和回归测试实现的。 </div>
				<div>    如图五所示，采用连续测试的软件成功测试经验，不但能够持续的提高软件质量、监控质量状态，同时也使系统测试的尽早实现成为可能。从而有效的控制开发风险、减低测试成本和保证项目进度。</div>
				<div align="center"> <img alt="" src="http://www.51testing.com/ddimg/uploadimg/20060703/1114064.JPG" /></div>
				<div align="center"> <b>图五、IBM Rational测试成功经验：连续测试</b></div>
				<h3>2.3 成功经验三：自动化测试</h3>
				<div>    在整个软件的测试过程中要想实现尽早测试、连续测试，可以说完善的测试流程是前提，自动化测试工具是保证。IBM Rational的自动化测试成功经验主要是指利用软件测试工具提供完整的软件测试流程的支持和各种测试的自动化实现。 </div>
				<div>    为了使各种软件测试团队更好地进行测试，IBM Rational在提供了测试成功经验之外，还为我们提供了一整套的软件测试流程和自动化测试工具，使软件测试团队能够从容不迫地完成整个测试任务。 </div>
				<h2>
						<b>3. IBM Rational</b>
						<b>软件自动化测试工具</b>
				</h2>
				<div>    在IBM Rational的软件自动化测试解决方案中，我们一直致力追求的一点就是测试工具和测试成功经验、测试流程的统一，上面阐述的每个测试成功经验和测试流程环节，我们都可以通过Rational的测试工具以及工具间的完美集成辅助完成。 </div>
				<div>    IBM Rational的软件自动化测试工具如图七所示，其最大特点是通过一套完整的软件测试工具在实现测试管理流程的基础上，同时涵盖了功能测试、性能测试和可靠性测试的自动化测试需求，通过工具之间的集成完成测试资源的整合，帮助测试团队实现IBM Rational的测试成功经验。</div>
				<div align="center"> <img alt="" src="http://www.51testing.com/ddimg/uploadimg/20060703/1114065.JPG" /></div>
				<div align="center"> <b>图七、IBM Rational自动化测试工具</b></div>
				<h2>
						<b>4. IBM Rational</b>
						<b>软件测试流程</b>
				</h2>
				<div>    IBM Rational的软件测试流程，不仅仅包含完整的软件测试流程框架，同时还提供了内嵌软件测试流程的测试管理工具的支持。 </div>
				<h3>4.1 IBM Rational软件测试流程框架</h3>
				<div>    IBM Rational Unified Process(以下简称RUP)提供了一套完整的测试流程框架，软件测试团队可以以它为基础，根据业务发展的实际要求，定制符合团队使用的软件测试流程。RUP中的软件测试流程如图八所示：</div>
				<div align="center"> <img height="404" alt="" src="http://www.51testing.com/ddimg/uploadimg/20060703/1114066.JPG" width="345" /></div>
				<div align="center"> <b> </b><b>图八、IBM Rational 软件测试流程</b></div>
				<div>    每个测试环节的具体阐述如下： </div>
				<div>    制定测试计划的目的是确定和描述要实施和执行的测试。这是通过生成包含测试需求和测试策略的测试计划来完成的。可以制定一个单独的测试计划，用于描述所有要实施和执行的不同测试类型，也可以为每种测试类型制定一个测试计划。 </div>
				<div>    设计测试的目的是确定、描述和生成测试过程和测试用例。 </div>
				<div>    实施测试的目的是实施（记录、生成或编写）设计测试中定义的测试过程。输出工件是测试过程的计算机可读版本，称为测试脚本。 </div>
				<div>    执行测试的目的是确保整个系统按既定意图运行。系统集成员在各迭代中编译并链接系统。每一迭代都需要测试增加的功能，并重复执行以前版本测试过的所有测试用例（回归测试）。 </div>
				<div>    评估测试的目的是生成并交付测试评估摘要。这是通过复审并评估测试结果、确定并记录变更请求，以及计算主要测试评测方法来完成的。测试评估摘要以组织有序的格式提供测试结果和主要测试评测方法，用于评估测试对象和测试流程的质量。 </div>
				<h3>4.2 利用IBM Rational软件测试管理平台实现软件自动化测试流程</h3>
				<div>    IBM Rational在RUP测试方法论的基础上构建了软件自动化测试管理平台工具TestManager，通过和测试需求管理工具RequisitePro、缺陷追踪工具ClearQuest的完美集成，实现了对整个软件测试生命周期的管理，可以帮助软件测试团队快速建立软件测试平台和测试管理流程，使软件测试团队快速拥有以下能力：</div>
				<div>
						<b>    TestManager</b>提供测试管理的核心平台，整合了从测试需求、测试计划、测试设计、测试实施、测试执行到测试结果分析、测试报告的自动生成等整个测试生命周期的管理活动。同时，统一组织各种Test Suite,Test Case,Test Script，方便地进行回归测试 </div>
				<div>
						<b>    TestManager</b>遵循RUP标准测试流程，使测试人员能够在统一的测试管理平台上、遵循统一的测试管理流程，完成对包括产品的功能性、可靠性和性能等全方位的质量测试。 </div>
				<div>    作为一种集成解决方案，Rational TestManager与Rational 其他工具一起，提供从测试需求、到整个软件测试流程管理、缺陷追踪、测试结果评测的可追踪性，方便测试管理人员进行软件测试过程监控和有关软件质量的各种量化指标的采集、分析。 </div>
				<h3>4.3 利用Rational软件测试工具实现软件自动化的功能和性能测试</h3>
				<div>    IBM Rational的自动化软件测试工具的另一个特点就是：通过TestManager + Robot，在实现测试管理流程的同时，能够完成功能测试和性能测试，这会大大缩短测试团队对工具的学习过程，提高工具的易用性。 </div>
				<h4>4.3.1 软件的自动化功能测试</h4>
				<div>    功能测试主要围绕Windows图形界面、字符终端和Browser界面进行测试。客户端可以是VC、VB、PB、Delphi等编制的软件、各种字符终端软件或者运行浏览器Microsoft Explorer和Netscape，通过自动录制形成测试脚本实现自动化的功能/回归测试。 </div>
				<div>    IBM Rational的功能测试解决方案的目标，是使功能性测试变得更简单、有效并可重复执行，从而快速提升软件测试团队的功能测试能力。它主要具有以下特点： </div>
				<div>      能够方便的对各种环境(IDE)中开发的应用程序、字符终端软件，完成包括测试计划、测试设计、测试实施、测试执行和测试结果分析等全部测试流程。 </div>
				<div>      能够方便的录制或编写各种功能测试脚本，实现自动化的功能/回归测试。 </div>
				<div>      利用数据池方便地解决大批量数据驱动的功能测试； </div>
				<div>      能够方便地完成分布式功能测试，可以一次测试多种测试平台； </div>
				<div>      能够自动完成功能测试需求覆盖，确保应用程序满足产品规格说明和测试计划的每一条业务需求； </div>
				<div>    为了提高对Java和Web开发的应用软件功能测试的支持，IBM Rational的功能测试的解决方案还提供了IBM Rational XDE Tester，它主要用于在Windows和Linux平台上基于Java和Web开发的应用软件的功能测试，尤其适用于使用IBM WebSphere Studio、Eclipse和 Rational XDE Developer等开发平台进行软件开发的团队。它的三个最重要的自动化测试的特性是： </div>
				<div>    专业的自动化测试脚本创建环境：测试平台扩展嵌入到IBM WebSphere Studio、Eclipse和 Rational XDE Developer开发平台，统一了测试和开发环境； </div>
				<div>    测试脚本在回归测试方面具有很强的灵活性和可维护性：ScriptAssure是 IBM提供的针对 Java 和Web应用程序测试时的一组高级能力, 它能够帮助创建灵活、可重用的测试脚本，大大提高了脚本的可维护性。对象地图（Object mapping）提供了核心对象库，测试人员可以基于它进行被测程序中被测对象的修改和验证，并根据修改自动更新所有相关的测试脚本。可以自己设置被测程序中用来表示被测对象的对象属性集，这使得少量对象属性的变化不会影响测试脚本的正常回放。同时，可以创建针对动态数据的验证点，通过正则表达式更容易对动态的数据进行验证； </div>
				<div>    强大的测试脚本语言：使用标准的测试脚本语言Java，可以充分利用工业标准语言的优点进行测试。 </div>
				<h4>4.3.2 软件的自动化压力测试</h4>
				<div>    IBM Rational压力测试工具主要目标是快速提升软件测试团队的性能测试能力，包括负载测试，压力测试等等。Rational性能测试解决方案可以方便灵活地模拟各种负载模型，完成以查找响应时间瓶颈、系统吞吐量、最大并发虚拟用户等为目地的各种要求的性能测试。包括： </div>
				<div>利用TestStudio可以完成对压力测试的测试需求、测试计划、测试设计、测试实施、测试执行和测试结果分析等整个测试生命周期的管理； </div>
				<div>利用TestStudio中的Test Suite，能够方便的完成压力测试对负载模型的各种要求，包括： </div>
				<div>      建立复杂的Scenario模型； 准确模拟复杂负载的时序控制； </div>
				<div>      基于Transaction的负载分析； </div>
				<div>      建立面向目标的事务负载模型，例如：100事务/秒 </div>
				<div>      响应时间精确到1/100秒； </div>
				<div>      支持不同虚拟用户的不同IP地址模拟； </div>
				<div>      准确的波特率模拟； </div>
				<div>      利用TestStudio，能够方便地完成压力测试过程中各种指标的观测； </div>
				<div>      利用TestStudio，能够方便地完成压力测试结果分析和各种结果报告的生成； </div>
				<h3>4.4 利用IBM Rational软件测试工具实现软件自动化的可靠性测试和单元测试</h3>
				<div>    IBM Rational软件测试工具PurifyPlus主要用于帮助软件测试团队在短期内快速提升单元测试能力和可靠性测试能力的团队，其主要特点是：见效快、使用方便、门槛低、培训时间短，开发人员2小时内即可完全掌握该软件进行测试。PurifyPlus包含Rational Purify、Quantify和PureCoverage三个产品，主要功能如下： </div>
				<div>
						<b>    Rational Purify</b>主要针对软件开发过程中难于发现的内存错误、运行时错误。在软件开发过程中： </div>
				<div>      自动地发现错误； </div>
				<div>      准确地定位错误； </div>
				<div>      提供完备的错误信息； </div>
				<div>    从而减少了调试时间， 帮助开发团队找出缺陷并最终形成高质量的产品，使您能真正做到更快地发布更好的软件。 </div>
				<div>
						<b>    Rational Quantify</b>主要解决软件开发过程中的性能问题。在软件开发过程中： </div>
				<div>方便地查明并显示应用程序的性能瓶颈，从而确保整个应用程序的质量和性能。</div>
				<div>
						<b>    Rational Quantify</b> 给开发团队提供了一个性能数据的全局图形化视图，使您从开发流程的开头起就注重性能问题，真正做到更快地发布更好的软件。 </div>
				<div>
						<b>    Rational PureCoverage</b>提供应用程序的测试覆盖率信息。在软件开发过程中： </div>
				<div>    能自动找出代码中未经测试的代码，保证代码测试覆盖率； </div>
				<div>    帮助开发人员确保开发质量，并使质量保证人员能够评价测试工作的效果。 </div>
				<div>    可针对每次测试生成全面的覆盖率报告，可以归并程序多次运行所生成的覆盖数据，并自动比较测试结果，以评估测试进度。 </div>
				<h3>4.5 利用Rational软件测试工具实现实时系统软件的自动化测试</h3>
				<div>    IBM Rational Test Realtime主要适合于开发实时系统和具有较高要求的非实时系统的软件开发，可以帮助测试团队快速建立起单元测试、集成测试、系统测试等测试能力。它提供的自动测试（包括单元测试、集成测试、系统测试）、代码覆盖、内存泄漏检查、性能分析以及UML跟踪等重要特性，帮助软件测试团队在系统崩溃前发现并修复软件缺陷。其主要功能特性如下： </div>
				<div>    自动生成测试脚本模板和测试程序（包括驱动模块和桩模块）：通过源代码分析，自动生成在目标上运行所需的测试脚本和测试程序。除了利用测试脚本指定测试数据外，不需要手工编码。而且在测试报告中，测试结果和源代码相联，简化代码修改； </div>
				<div>    通过代码自动插针进行代码覆盖率、内存泄漏以及性能瓶颈进行分析，并和测试用例建立关联； </div>
				<div>通过把测试结果和观察结果和被测代码关联，把测试作为开发的一个重要部分，真正实现边开发边测试，边测试边观察，边观察边评估这一集成的开发测试过程； </div>
				<div>    通用的、低开销而且易于移植的目标适配技术（Target Deployment Port，TDP）：利用TDP技术，使得测试与编译器、连接器、调试器以及目标结构无关，实现了跨多开发环境、多目标结构； </div>
				<div>模型观察和代码覆盖相集成：利用UML Trace功能观察应用运行状态，并通过状态机模型覆盖实现测试用例和模型的关联，充分利用了模型和代码级测试的长处； </div>
				<div>    与ClearCase、ClearQuest和RUP集成：在同一集成环境中完成对测试文件进行版本控制，提交和修改变更请求；</div>
				<h2>
						<b>5. </b>
						<b>小结</b>
				</h2>
				<div align="center"> </div>
				<div align="center">
						<b>图九、IBM Rational的软件自动化测试解决方案</b>
				</div>
				<div>    IBM Rational主要为软件测试团队提供测试成功经验、自动化测试工具和全方位的咨询服务三方面的支持，如图八所示，最终实现：一个测试团队，基于一套完整的软件测试流程，使用一套完整的自动化软件测试工具，完成全方位的软件质量验证，这正是IBM Rational测试解决方案的精髓和终极目标。 </div>
				<div> </div>
				<div>
						<b>    作者简介:</b>
				</div>
				<div>    Golden Ning，现为IBM中国有限公司软件部 Rational 高级技术专员。在软件工程技术方面，有着多年的实践经验，对于 Rational 的软件工程技术有着深刻的理解。目前主要专注于软件测试技术、面向对象的可视化建模和软件配置管理等技术的研究。在此之前，主要从事电信交换机、电子商务软件分析设计和开发工作。</div>
		</div>
<img src ="http://www.cnitblog.com/szdlinxie/aggbug/20860.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/szdlinxie/" target="_blank">szdlinxie</a> 2006-12-20 16:10 <a href="http://www.cnitblog.com/szdlinxie/articles/20860.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开源软件测试模型</title><link>http://www.cnitblog.com/szdlinxie/articles/20845.html</link><dc:creator>szdlinxie</dc:creator><author>szdlinxie</author><pubDate>Wed, 20 Dec 2006 05:59:00 GMT</pubDate><guid>http://www.cnitblog.com/szdlinxie/articles/20845.html</guid><wfw:comment>http://www.cnitblog.com/szdlinxie/comments/20845.html</wfw:comment><comments>http://www.cnitblog.com/szdlinxie/articles/20845.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/szdlinxie/comments/commentRss/20845.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/szdlinxie/services/trackbacks/20845.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 开源软件测试模型一、模型概览开放源码软件测试模型以“满意测试”为基本原则，强调迭代发展。l          “满意测试”基本定义是一个过程，通过该过程可以合理的成本获取足够的产品质量评价信息，从而使得与产品有关的决策更为明智和及时。l          模型基本需求以下给出开源软件测试模型应满足的一些基本要求，将在实践中不断丰富和完善：1.         应充分考虑开放源码的早发布和常发布特点...&nbsp;&nbsp;<a href='http://www.cnitblog.com/szdlinxie/articles/20845.html'>阅读全文</a><img src ="http://www.cnitblog.com/szdlinxie/aggbug/20845.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/szdlinxie/" target="_blank">szdlinxie</a> 2006-12-20 13:59 <a href="http://www.cnitblog.com/szdlinxie/articles/20845.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用JMeter进行性能测试</title><link>http://www.cnitblog.com/szdlinxie/articles/20844.html</link><dc:creator>szdlinxie</dc:creator><author>szdlinxie</author><pubDate>Wed, 20 Dec 2006 05:52:00 GMT</pubDate><guid>http://www.cnitblog.com/szdlinxie/articles/20844.html</guid><wfw:comment>http://www.cnitblog.com/szdlinxie/comments/20844.html</wfw:comment><comments>http://www.cnitblog.com/szdlinxie/articles/20844.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/szdlinxie/comments/commentRss/20844.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/szdlinxie/services/trackbacks/20844.html</trackback:ping><description><![CDATA[
		<div class="style7" align="center">
				<span style="FONT-SIZE: 12pt">
						<b>使用JMeter进行性能测试<br /><div class="daxiao14" align="left"><p>JMeter是Apache组织的开放源代码项目，它是功能和性能测试的工具，100%的用java实现，最新的版本是1.9.1，大家可以到<font color="#000000" size="2"><a href="http://jakarta.apache.org/jmeter/index.html">http://jakarta.apache.org/jmeter/index.html</a></font>下载源代码和查看相关文档。</p><p>1 JMeter作用领域</p><p>JMeter可以用于测试静态或者动态资源的性能（文件、Servlets、Perl脚本、java对象、数据库和查询、ftp服务器或者其他的资源）。JMeter用于模拟在服务器、网络或者其他对象上附加高负载以测试他们提供服务的受压能力，或者分析他们提供的服务在不同负载条件下的总性能情况。你可以用JMeter提供的图形化界面分析性能指标或者在高负载情况下测试服务器/脚本/对象的行为。</p><p>2 使用JMeter测试Web应用</p><p>接下来的章节里，作者将详细的演示如何使用JMeter来测试Web应用的完整过程。</p><p>2.1 测试环境</p><p>作者使用了Tomcat作为Web服务器进行测试，被测试的内容是一个jsp文件和一个servlet，jsp文件调用 JavaBean、打印相关信息，servlet接受用户参数、调用javabean、输出相关信息。详细的内容请参考作者提供的JMeter.war的内容。</p><p>2.2 安装启动JMeter</p><p>大家可以到通过http: //apache.linuxforum.net/dist/jakarta/jmeter/binaries/jakarta-jmeter-1.9.1.zip 下载JMeter的release版本，然后将下载的.zip文件解压缩到C:/JMeter（后面的文章中将使用%JMeter%来引用这个目录）目录下。现在，请使用%JMeter%/bin下面的jmeter.bat批处理文件来启动JMeter的可视化界面，下面的工作都将在这个可视化界面界面上进行操作。下面的图片是JMeter的可视化界面的屏幕截图。<br /></p><table width="613" border="0"><tbody><tr><td width="95"> </td><td width="406"><img height="230" src="http://www.51testing.com/tool/lib/20050627_3/pic1.jpg" width="406" /></td><td width="98"> </td></tr></tbody></table><p>图一： JMeter打开时的屏幕截图</p><p>2.3 建立测试计划（Test Plan）</p><p>测试计划描述了执行测试过程中JMeter的执行过程和步骤，一个完整的测试计划包括一个或者多个线程组(Thread Groups)、逻辑控制（Logic Controller）、实例产生控制器（Sample Generating Controllers）、侦听器(Listener)、定时器（Timer）、比较（Assertions）、配置元素（Config Elements）。打开JMeter时，它已经建立一个默认的测试计划,一个JMeter应用的实例只能建立或者打开一个测试计划。现在我们开始填充一个测试计划的内容，这个测试计划向一个jsp文件和一个servlet发出请求，我们需要JMeter模拟五个请求者（也就是五个线程），每个请求者连续请求两次，下面的章节介绍了详细的操作步骤。</p><p>2.4 增加负载信息设置</p><p>这一步，我们将向测试计划中增加相关负载设置,是Jmeter知道我们需要模拟五个请求者，每个请求者在测试过程中连续请求两次。详细步骤如下：</p><p>1. 选中可视化界面中左边树的Test Plan节点，单击右键，选择Add'Thread Group，界面右边将会出现他的设置信息框。</p><p>2. Thread Group有三个和负载信息相关的参数：</p><p>Number of Threads： 设置发送请求的用户数目</p><p>Ramp-up period： 每个请求发生的总时间间隔，单位是秒。比如你的请求数目是5，而这个参数是10，那么每个请求之间的间隔就是10／5，也就是2秒</p><p>Loop Count： 请求发生的重复次数，如果选择后面的forever（默认），那么 请求将一直继续，如果不选择forever，而在输入框中输入数字，那么请求将重复 指定的次数，如果输入0，那么请求将执行一次。</p><p>根据我们演示例子的设计，我们应该将Number of Threads设置为5，Ramp-up period设置为0（也就是同时并发请求），不选中forever，在Loop Count后面的输入框中输入2，设置后的屏幕截图如下：</p><table width="611" border="0"><tbody><tr><td width="73"> </td><td width="449"><img height="218" src="http://www.51testing.com/tool/lib/20050627_3/pic2.jpg" width="449" /></td><td width="75"> </td></tr></tbody></table><p>图二：设置好参数的Thread Group。</p><p>2.5 增加默认Http属性（可选）</p><p>实际的测试工作往往是针对同一个服务器上Web应用展开的,所以Jmeter提供了这样一种设置, 在默认Http属性设置需要被测试服务器的相关属性，以后的http请求设置中就可以忽略这些相同参数的设置,减少设置参数录入的时间。我们这里将采用这种属性。你可以通过下面的步骤来设置默认http属性：</p><p>1. 选中可视化界面中左边树的Test Plan节点，单击右键，选择Add'config element'http request defaults，界面右边将会出现他的设置信息框。</p><p>2. 默认http属性的主要参数说明如下：</p><p>protocal：发送测试请求时使用的协议</p><p>server name or ip：被测试服务器的ip地址或者名字</p><p>path： 默认的起始位置。比如将path设置为／jmeter，那么所有的http请求的url中都将增加／jmeter路径。</p><p>port number： 服务器提供服务的端口号</p><p>我们的测试计划将针对本机的Web服务器上的Web应用进行测试，所以protocal应该是http，ip使用localhost，因为这个web应用发布的context路径是／jmeter，所以这里的path设置为／jmeter，因为使用Tomcat服务器，所以port number是8080。设置后的屏幕截图如下：</p><table width="611" border="0"><tbody><tr><td width="50"> </td><td width="502"><img height="176" src="http://www.51testing.com/tool/lib/20050627_3/pic3.jpg" width="502" /></td><td width="45"> </td></tr></tbody></table><p>图三： 测试计划中使用的默认Http参数</p><p>2.6 增加Http请求</p><p>现在我们需要增加http请求了，他也是我们测试的内容主体部分。你可以通过下面的步骤来增加性的http请求：</p><p>1. 选中可视化界面中左边树的Thread Group节点，单击右键，选择Add'sampler'http request，界面右边将会出现他的设置信息框。</p><p>2. 他的参数和2.5中介绍的http属性差不多，增加的属性中有发送http时方法的选择，你可以选择为get或者post。</p><p>我们现在增加两个http 请求，因为我们设置了默认的http属性，所以和默认http属性中相同的属性不再重复设置。设置后的屏幕截图如下：<br /></p><table width="611" border="0"><tbody><tr><td width="44"> </td><td width="509"><img height="365" src="http://www.51testing.com/tool/lib/20050627_3/pic4.jpg" width="509" /></td><td width="44"> </td></tr></tbody></table><p>图四：设置好的jsp测试请求</p><table width="616" border="0"><tbody><tr><td width="47"> </td><td width="507"><img height="365" src="http://www.51testing.com/tool/lib/20050627_3/pic5.jpg" width="507" /></td><td width="46"> </td></tr></tbody></table><p>图五：设置好的Servlet测试请求（带参数）</p><p>2.7 增加Listener</p><p>增加listener是为了记录测试信息并且可以使用Jmeter提供的可视化界面查看测试结果，里面有好几种结果分析方式可供选择，你可以根据自己习惯的分析方式选择不同的结果显示方式，我们这里使用表格的形式来查看和分析测试结果。你可以通过下面的步骤来增加listener：</p><p>1. 选中可视化界面中左边树的Test Plan节点，单击右键，选择Add'listener'view result in table，界面右边将会出现他的设置信息和结果显示框。</p><p>2. 你可以设置界面上面的filename属性设置将测试结果保存到某个文件中界面下面将使用表格显示测试结果，表格的第一列sampleno显示请求执行的顺序和编号，url显示请求发送的目标，sample－ms列显示这个请求完成耗费的时间，最后的success列显示改请求是否成功执行。界面的最下面你还可以看到一些统计信息，最关心的应该是Average吧，也就是相应的平均时间。</p><p>2.8 开始执行测试计划</p><p>现在你可以通过单击菜单栏run -&gt; Start开始执行测试计划了。下面这两个图是作者第一次、第二次执行该测试计划的结果图:<br /></p><table height="21" width="613" border="0"><tbody><tr><td width="16"> </td><td width="566"><img height="452" src="http://www.51testing.com/tool/lib/20050627_3/pic6.jpg" width="566" /></td><td width="17"> </td></tr></tbody></table><p>图六：第一次执行后的结果显示 </p><table width="611" border="0"><tbody><tr><td> </td><td><img height="456" src="http://www.51testing.com/tool/lib/20050627_3/pic7.jpg" width="565" /></td><td> </td></tr></tbody></table><p>图七：第二次执行的结果显示</p><p>大家可以看到第一次执行时的几个大时间值均来自于jsp request，这可以通过下面的理由进行解释：jsp执行前都需要被编译成.class文件。所以第二次的结果才是正常的结果。</p><p>3 总结</p><p>JMeter用于进行供能或者性能测试，通过使用JMeter提供的供能，我们可以可视化的制定测试计划：包括规定使用什么样的负载、测试什么内容、传入的参数，同时，他提供了好多种图形化的测试结果显示方式，使我们能够简单的开始测试工作和分析测试结果。</p><p>本文中，作者根据自己的使用经验，详细演示了如何使用JMeter来进行Web测试的全部过程，简单的介绍了JMeter提供测试结果的图形化显示界面中相关参数的含义。希望能够帮助大家学会使用JMeter的基本知识，同时，大家可以参考这个过程和JMeter的帮助文档来实现对 java对象、数据库等的测试过程。</p><p>参考资料：</p><p><br />JMeter 的用户指南 ： <a href="http://jakarta.apache.org/jmeter/usermanual/index.html"><font color="#0000ff" size="2">http://jakarta.apache.org/jmeter/usermanual/index.html</font></a></p><p>工具下载：</p><p>1. tomcat <font color="#000000" size="2"><a href="http://jakarta.apache.org/tomcat/index.html">http://jakarta.apache.org/tomcat/index.html</a></font></p><p>2. JMeter <font color="#000000" size="2"><a href="http://jakarta.apache.org/jmeter/index.html">http://jakarta.apache.org/jmeter/index.html</a></font></p></div></b>
				</span>
		</div>
<img src ="http://www.cnitblog.com/szdlinxie/aggbug/20844.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/szdlinxie/" target="_blank">szdlinxie</a> 2006-12-20 13:52 <a href="http://www.cnitblog.com/szdlinxie/articles/20844.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JMeter技巧集锦|中国IT实验室</title><link>http://www.cnitblog.com/szdlinxie/articles/20566.html</link><dc:creator>szdlinxie</dc:creator><author>szdlinxie</author><pubDate>Fri, 15 Dec 2006 12:53:00 GMT</pubDate><guid>http://www.cnitblog.com/szdlinxie/articles/20566.html</guid><wfw:comment>http://www.cnitblog.com/szdlinxie/comments/20566.html</wfw:comment><comments>http://www.cnitblog.com/szdlinxie/articles/20566.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/szdlinxie/comments/commentRss/20566.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/szdlinxie/services/trackbacks/20566.html</trackback:ping><description><![CDATA[
		<div align="center">
				<table class="MsoNormalTable" style="BACKGROUND: white; WIDTH: 100%; mso-cellspacing: 0cm; mso-padding-alt: 0cm 0cm 0cm 0cm" cellspacing="0" cellpadding="0" width="100%" border="0">
						<tbody>
								<tr style="HEIGHT: 27pt; mso-yfti-irow: 0; mso-yfti-firstrow: yes">
										<td style="BORDER-RIGHT: #d0d0d0; PADDING-RIGHT: 0cm; BORDER-TOP: #d0d0d0; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d0d0d0; PADDING-TOP: 0cm; BORDER-BOTTOM: #d0d0d0; HEIGHT: 27pt; BACKGROUND-COLOR: transparent">
												<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center; mso-pagination: widow-orphan" align="center">
														<b>
																<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">"JMeter</span>
														</b>
														<b>
																<span style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">技巧集锦<span lang="EN-US">|</span>中国<span lang="EN-US">IT</span>实验室<span lang="EN-US">"<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:p></o:p></span></span>
														</b>
												</p>
										</td>
								</tr>
								<tr style="HEIGHT: 16.5pt; mso-yfti-irow: 1">
										<td style="BORDER-RIGHT: #d0d0d0; PADDING-RIGHT: 0cm; BORDER-TOP: #d0d0d0; PADDING-LEFT: 0cm; BACKGROUND: #e1e1e1; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d0d0d0; PADDING-TOP: 0cm; BORDER-BOTTOM: #d0d0d0; HEIGHT: 16.5pt">
												<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center; mso-pagination: widow-orphan" align="center">
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">发布日期<span lang="EN-US">:2006-2-26 9:06:49 </span>点击数<span lang="EN-US">:
<script src="/Click.asp?NewsID=0622612361324772"></script>
 19 <o:p></o:p></span></span>
												</p>
										</td>
								</tr>
								<tr style="HEIGHT: 43.5pt; mso-yfti-irow: 2; mso-yfti-lastrow: yes">
										<td style="BORDER-RIGHT: #d0d0d0; PADDING-RIGHT: 0cm; BORDER-TOP: #d0d0d0; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d0d0d0; PADDING-TOP: 0cm; BORDER-BOTTOM: #d0d0d0; HEIGHT: 43.5pt; BACKGROUND-COLOR: transparent" valign="top">
												<p class="MsoNormal" style="MARGIN: 0cm 0cm 12pt; TEXT-ALIGN: center; mso-pagination: widow-orphan; mso-margin-top-alt: auto" align="center">
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　<span lang="EN-US">JMeter </span>是一个流行的用于负载测试的开源工具， 具有许多有用的功能元件，如线程组（<span lang="EN-US">thread group</span>）， 定时器（<span lang="EN-US">timer</span>）， 和<span lang="EN-US">HTTP </span>取样<span lang="EN-US"> (sampler) </span>元件。 本文是对<span lang="EN-US">JMeter </span>用户手册的补充，而且提供了关于使用<span lang="EN-US">Jmeter</span>的一些模拟元件开发质量测试脚本的指导。<span lang="EN-US"><br /><br /></span>　　本文同时也讨论了一项重要的内容：在指定了精确的响应时间要求后，如何来校验测试结果，特别是在采用了置信区间分析这种严格的统计方式的情况下应如何操作。请注意，我假定本文的读者们了解关于<span lang="EN-US">Jmeter</span>的基础知识，本文的例子基于<span lang="EN-US">Jmeter2</span>。<span lang="EN-US">0</span>。<span lang="EN-US">3</span>版。<span lang="EN-US"><br /><br /></span></span>
														<b>
																<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　确定一个线程组的<span lang="EN-US">ramp-up period </span>（<span lang="EN-US">Determine</span>）</span>
														</b>
														<b>
																<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">
																		<br />
																</span>
														</b>
														<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">
																<br />
														</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　<span lang="EN-US">Jmeter</span>脚本的第一个要素是线程组（<span lang="EN-US">Thread Group</span>），因此首先让我们来回顾一下。 正如图一所示，线程组需要设置以下参数：<span lang="EN-US"><br /></span>　　<span lang="EN-US">·</span>线程数量。<span lang="EN-US"><br /></span>　　<span lang="EN-US">·ramp-up period</span>。<span lang="EN-US"><br /></span>　　<span lang="EN-US">·</span>运行测试的次数。<span lang="EN-US"><br /></span>　　<span lang="EN-US">·</span>启动时间<span lang="EN-US">:</span>立即或者预定的时间，如果是后者，线程组所包含的元素也要指定这个起止时间。<span lang="EN-US"><o:p></o:p></span></span>
												</p>
												<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="center">
														<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">
																<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /?>
																<v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600">
																		<v:stroke joinstyle="miter">
																		</v:stroke>
																		<v:formulas>
																				<v:f eqn="if lineDrawn pixelLineWidth 0">
																				</v:f>
																				<v:f eqn="sum @0 1 0">
																				</v:f>
																				<v:f eqn="sum 0 0 @1">
																				</v:f>
																				<v:f eqn="prod @2 1 2">
																				</v:f>
																				<v:f eqn="prod @3 21600 pixelWidth">
																				</v:f>
																				<v:f eqn="prod @3 21600 pixelHeight">
																				</v:f>
																				<v:f eqn="sum @0 0 1">
																				</v:f>
																				<v:f eqn="prod @6 1 2">
																				</v:f>
																				<v:f eqn="prod @7 21600 pixelWidth">
																				</v:f>
																				<v:f eqn="sum @8 21600 0">
																				</v:f>
																				<v:f eqn="prod @7 21600 pixelHeight">
																				</v:f>
																				<v:f eqn="sum @10 21600 0">
																				</v:f>
																		</v:formulas>
																		<v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f">
																		</v:path>
																		<o:lock aspectratio="t" v:ext="edit">
																		</o:lock>
																</v:shapetype>
																<v:shape id="_x0000_i1026" style="WIDTH: 326.25pt; HEIGHT: 330.75pt" alt="" type="#_x0000_t75">
																		<v:imagedata o:href="http://java.chinaitlab.com/UploadFiles_8734/200602/20060224113123517.jpg" src="file:///F:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.jpg">
																		</v:imagedata>
																</v:shape>
																<o:p>
																</o:p>
														</span>
												</p>
												<p class="MsoNormal" style="MARGIN: 0cm 0cm 12pt; TEXT-ALIGN: center; mso-pagination: widow-orphan; mso-margin-top-alt: auto" align="center">
														<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">
																<br />
														</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　图<span lang="EN-US"> 1</span>。<span lang="EN-US"> JMeter </span>线程组（<span lang="EN-US">JMeter Thread Group</span>）<span lang="EN-US"><br /><br /></span>　　每个线程均独立运行测试计划。因此， 线程组常用来模拟并发用户访问。如果客户机没有足够的能力来模拟较重的负载，可以使用<span lang="EN-US">Jmeter</span>的分布式测试功能来通过一个<span lang="EN-US">Jmeter</span>控制台来远程控制多个<span lang="EN-US">Jmeter</span>引擎完成测试。<span lang="EN-US"><br /><br /></span>　　参数<span lang="EN-US"> ramp-up period </span>用于告知<span lang="EN-US">JMeter </span>要在多长时间内建立全部的线程。默认值是<span lang="EN-US">0</span>。如果未指定<span lang="EN-US">ramp-up period </span>，也就是说<span lang="EN-US">ramp-up period </span>为零，<span lang="EN-US"> JMeter </span>将立即建立所有线程，假设<span lang="EN-US">ramp-up period </span>设置成<span lang="EN-US">T </span>秒， 全部线程数设置成<span lang="EN-US">N</span>个，<span lang="EN-US"> JMeter </span>将每隔<span lang="EN-US">T/N</span>秒建立一个线程。<span lang="EN-US"><br /><br /></span>　　线程组的大部分参数是不言自明的，只有<span lang="EN-US">ramp-up period</span>有些难以理解， 因为如何设置适当的值并不容易。 首先，如果要使用大量线程的话，<span lang="EN-US">ramp-up period </span>一般不要设置成零。 因为如果设置成零，<span lang="EN-US">Jmeter</span>将会在测试的开始就建立全部线程并立即发送访问请求， 这样一来就很容易使服务器饱和，更重要的是会隐性地增加了负载，这就意味着服务器将可能过载，不是因为平均访问率高而是因为所有线程的第一次并发访问而引起的不正常的初始访问峰值，可以通过<span lang="EN-US">Jmeter</span>的聚合报告监听器看到这种现象。<span lang="EN-US"><br /></span>这种异常不是我们需要的，因此，确定一个合理的<span lang="EN-US">ramp-up period </span>的规则就是让初始点击率接近平均点击率。当然，也许需要运行一些测试来确定合理访问量。<span lang="EN-US"><br /><br /></span>　　基于同样的原因，过大的<span lang="EN-US">ramp-up period </span>也是不恰当的，因为将会降低访问峰值的负载，换句话说，在一些线程还未启动时，初期启动的部分线程可能已经结束了。<span lang="EN-US"><br /><br /></span>　　那么，如何检验<span lang="EN-US">ramp-up period I</span>太小了或者太大了呢？首先，推测一下平均点击率并用总线程除点击率来计算初始的<span lang="EN-US">ramp-up period</span>。 例如，假设线程数为<span lang="EN-US">100</span>， 估计的点击率为每秒<span lang="EN-US">10</span>次， 那么估计的理想<span lang="EN-US">ramp-up period </span>就是<span lang="EN-US"> 100/10 = 10 </span>秒。 那么，应怎样来提出一个合理的估算点击率呢？没有什么好办法，必须通过运行一次测试脚本来获得。<span lang="EN-US"><br /><br /></span>　　其次， 在测试计划（<span lang="EN-US">test plan</span>）中增加一个聚合报告监听器，如图<span lang="EN-US">2</span>所示，其中包含了所有独立的访问请求（一个<span lang="EN-US">samplers</span>）的平均点击率。 第一次取样的点击率（如<span lang="EN-US">http</span>请求）与<span lang="EN-US">ramp-up period </span>和线程数量密切相关。通过调整<span lang="EN-US">ramp-up period </span>可以使首次取样的奠基率接近平均取样的点击率。<span lang="EN-US"><o:p></o:p></span></span>
												</p>
												<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="center">
														<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">
																<v:shape id="_x0000_i1027" style="WIDTH: 450pt; HEIGHT: 273.75pt" alt="resized image" type="#_x0000_t75">
																		<v:imagedata o:href="http://java.chinaitlab.com/UploadFiles_8734/200602/20060224113124229.jpg" src="file:///F:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image003.jpg">
																		</v:imagedata>
																</v:shape>
																<o:p>
																</o:p>
														</span>
												</p>
												<p class="MsoNormal" style="MARGIN: 0cm 0cm 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto" align="left">
														<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">
																<br />
														</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　图<span lang="EN-US">2 JMeter </span>聚合报告<span lang="EN-US"><br /><br /></span>　　第三， 查验一下<span lang="EN-US">Jmeter</span>日志<span lang="EN-US">(</span>文件位置：<span lang="EN-US">JMeter_Home_Directory/bin) </span>的最后一个线程开始时第一个线程是否真正结束了，二者的时间差是否正常。<span lang="EN-US"><br /><br /></span>　　总之，是否能确定一个适当的<span lang="EN-US">ramp-up time </span>取决于以下两条规则<span lang="EN-US">: <br /></span>　　<span lang="EN-US">·</span>第一个取样器的点击率（<span lang="EN-US">hit rate</span>）是否接近其他取样器的平均值，从而能否避免<span lang="EN-US">ramp-up period </span>过小。<span lang="EN-US"><br /></span>　　<span lang="EN-US">·</span>在最后一个线程启动时，第一个线程是否在真正结束了，最好二者的时间要尽可能的长，以避免<span lang="EN-US">ramp-up period</span>过大。<span lang="EN-US"><br /><br /></span>　　有时，这两条规则的结论会互相冲突。 这就意味着无法找到同时满足两条规则的合适的<span lang="EN-US">ramp-up period</span>。 糟糕的测试计划通常会导致这些问题，这是因为在这样的测试计划里，取样器将不能充分地采集数据，可能因为测试计划执行时间太短并且线程会很快的运行结束。<span lang="EN-US"><br /><br /><br /><br /></span></span>
														<b>
																<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　用户思考时间（<span lang="EN-US">User think time</span>），定时器，和代理服务器（<span lang="EN-US">proxy server</span>）</span>
														</b>
														<b>
																<span lang="EN-US" style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">
																		<br />
																</span>
														</b>
														<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">
																<br />
														</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　在负载测试中需要考虑的的一个重要要素是思考时间（<span lang="EN-US">think time</span>）， 也就是在两次成功的访问请求之间的暂停时间。 有多种情形挥发导致延迟的发生： 用户需要时间阅读文字内容，或者填表， 或者查找正确的链接等。未认真考虑思考时间经常会导致测试结果的失真。例如，估计数值不恰当，也就是被测系统可以支持的最多用户量（并发用户）看起来好像要少一些等。<span lang="EN-US"><br /><br /></span>　　<span lang="EN-US">Jmeter</span>提供了一整套的计时器（<span lang="EN-US">timer</span>）来模拟思考时间（<span lang="EN-US">think time</span>）， 但是仍旧存在一个问题：<span lang="EN-US">: </span>如何确定适当的思考时间呢？幸运的是，<span lang="EN-US"> JMeter </span>提供了一个不错的答案：使用<span lang="EN-US"> JMeter HTTP </span>代理服务器（<span lang="EN-US">Proxy Server</span>）元件。<span lang="EN-US"><br /><br /></span>　　代理服务器会记录在使用一个普通的浏览器（如<span lang="EN-US">FireFox </span>或<span lang="EN-US"> Internet Explorer</span>）浏览一个<span lang="EN-US">web</span>应用时的操作。 另外，<span lang="EN-US"> JMeter </span>在记录操作的同时会建立一个测试计划（<span lang="EN-US">test plan</span>）。 这个功能能提供以下便利：<span lang="EN-US"><br /><br /></span>　　<span lang="EN-US">·</span>不必手工建立<span lang="EN-US">HTTP </span>访问请求， 尤其是当要设置一些令人乏味的参数时（然而，非英文的参数也许不能正常工作<span lang="EN-US">) </span>。<span lang="EN-US">JMeter </span>将会录制包括隐含字段（<span lang="EN-US">hidden fields</span>）在内的所有内容。<span lang="EN-US"><br /><br /></span>　　<span lang="EN-US">·</span>在生成的测试计划中，<span lang="EN-US">Jmeter</span>会包含浏览器生成的所有的<span lang="EN-US"> HTTP </span>报头，如<span lang="EN-US">User-Agent (e</span>。<span lang="EN-US">g</span>。，<span lang="EN-US"> Mozilla/4</span>。<span lang="EN-US">0)</span>， 或<span lang="EN-US">AcceptLanguage (e</span>。<span lang="EN-US">g</span>。，<span lang="EN-US"> zh-tw</span>，<span lang="EN-US">en-us;q=0</span>。<span lang="EN-US">7</span>，<span lang="EN-US">zh-cn;q=0</span>。<span lang="EN-US">3)</span>等。<span lang="EN-US"><br /><br /></span>　　<span lang="EN-US">·JMeter </span>会根据设置在录制操作的同时建立一些定时器，其延迟时间是完全根据真实的操作来设置的<span lang="EN-US"><br /></span>现在让我们来看一下如何配置<span lang="EN-US">Jmeter</span>的录制功能。 在<span lang="EN-US">JMeter </span>的控制台上， 在工作台（<span lang="EN-US">WorkBench</span>）元件上单击右键，然后选择<span lang="EN-US">”add the HTTP Proxy Server “</span>。 注意是在<span lang="EN-US">WorkBench </span>上单击右键而不是在<span lang="EN-US">Test Plan</span>上， 因为现在是要为记录操作进行配置而不是要运行测试计划。<span lang="EN-US">  HTTP Proxy Server </span>的实现原理就是通过配置浏览器的代理服务器而使所有的访问请求通过<span lang="EN-US">JMeter</span>发送（，因而被<span lang="EN-US">Jmeter</span>把访问过程录制下来）。<span lang="EN-US"><br /><br /></span>　　如图<span lang="EN-US">3</span>所示，<span lang="EN-US"> HTTP</span>代理服务器（<span lang="EN-US">HTTP Proxy Server</span>）元件的一些参数必须被配置<span lang="EN-US">: <br /><br /></span>　　<span lang="EN-US">·</span>端口<span lang="EN-US">(port): </span>代理服务器的监听端口<span lang="EN-US"><br /><br /></span>　　<span lang="EN-US">·</span>目标控制器（<span lang="EN-US">Target Controller</span>）<span lang="EN-US">: </span>是代理用于存储生成的数据的控制器，默认情况下，，<span lang="EN-US"> JMeter </span>将会在当前的测试计划中找一个记录用的控制器用于存储，此外也可以在下拉菜单中选择任意控制起来存储，通常默认值就可以了。<span lang="EN-US"><br /><br /></span>　　<span lang="EN-US">·</span>分组<span lang="EN-US">(Grouping): </span>确定在测试计划中如何来为生成的元件分组。 有多个选项， 一般可以选择<span lang="EN-US">“</span>只存储每个组的第一个样本<span lang="EN-US">”</span>，否则，将会原样录制<span lang="EN-US">URLs</span>，包括包含图像和<span lang="EN-US">JavaScripts</span>脚本的页面。当然 也可以尝试一下默认值<span lang="EN-US">“</span>不对样本分组<span lang="EN-US">”</span>（<span lang="EN-US">"Do not group samples"</span>），来看一下<span lang="EN-US">JMeter </span>建立的原版的测试计划。<span lang="EN-US"><br /><br /></span>　　<span lang="EN-US">·</span>包含模式<span lang="EN-US">(Patterns to Include) </span>和 排除模式<span lang="EN-US">(Patterns to Exclude) :</span>帮助过滤一些不需要的访问请求。<span lang="EN-US"><o:p></o:p></span></span>
												</p>
												<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="center">
														<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">
																<v:shape id="_x0000_i1028" style="WIDTH: 366pt; HEIGHT: 303pt" alt="" type="#_x0000_t75">
																		<v:imagedata o:href="http://java.chinaitlab.com/UploadFiles_8734/200602/20060224113124482.jpg" src="file:///F:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image005.jpg">
																		</v:imagedata>
																</v:shape>
																<o:p>
																</o:p>
														</span>
												</p>
												<p class="MsoNormal" style="MARGIN: 0cm 0cm 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto" align="left">
														<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">
																<br />
														</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　图<span lang="EN-US"> 3</span>。<span lang="EN-US"> JMeter </span>代理服务器<span lang="EN-US">(Proxy Server)</span>。<span lang="EN-US"><br /><br /></span>　　当你点击开始（<span lang="EN-US">Start</span>）按钮时，代理服务器就会开始记录所接受的<span lang="EN-US">HTTP </span>访问请求。 当然，在开始记录前，要首先设置好浏览器的代理服务器设置。在代理服务器元件中可以增加一个定时器子元件（配置元件），用于告知<span lang="EN-US">Jmeter</span>来在其生成的<span lang="EN-US">HTTP</span>请求中自动的增加一个定时器。<span lang="EN-US">Jmeter</span>会自动把实际的延迟时间存储为一个被命名为<span lang="EN-US">T</span>的<span lang="EN-US">Jmeter</span>变量，因此，如果在代理服务器元件里使用了高斯随机定时器，就应该在其中的固定延迟偏移（<span lang="EN-US">Constant Delay Offset</span>）设置项里添上<span lang="EN-US">${T}</span>（用于自动引用纪录的延迟时间），如图<span lang="EN-US">4</span>所示。这是另一个节省时间的便利特性。<span lang="EN-US"><o:p></o:p></span></span>
												</p>
												<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="center">
														<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">
																<v:shape id="_x0000_i1029" style="WIDTH: 328.5pt; HEIGHT: 217.5pt" alt="" type="#_x0000_t75">
																		<v:imagedata o:href="http://java.chinaitlab.com/UploadFiles_8734/200602/20060224113124384.jpg" src="file:///F:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image007.jpg">
																		</v:imagedata>
																</v:shape>
																<o:p>
																</o:p>
														</span>
												</p>
												<p class="MsoNormal" style="MARGIN: 0cm 0cm 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto" align="left">
														<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">
																<br />
														</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　图<span lang="EN-US"> 4</span>。 在代理服务器组建中增加一个高斯随机定时器<span lang="EN-US"><br /><br /><br /></span>　　定时器将会使相应的的取样器被延迟。 延时的规则是，在上一个访问请求被响应并延时了指定的时间后，下一个被定时器影响的取样访问请求才会被发送出去。 因此， 你必须手工删除第一个取样器中自动生成的定时器，因为第一个取样器不需要定时器。<span lang="EN-US"><br /><br /></span>　　在启动<span lang="EN-US">HTTP</span>代理服务器以前，要在测试计划中增加一个线程组（<span lang="EN-US">thread group</span>），在线程组中增加一个录制控制器（<span lang="EN-US">recording controller</span>）用于存储生成的结果。 否则， 生成的元件将会被直接添加到工作台里。另外， 在录制控制器里增加一个<span lang="EN-US">HTTP</span>请求默认值元件<span lang="EN-US">HTTP Request Defaults </span>元件<span lang="EN-US"> (</span>是一个配置元件<span lang="EN-US">) </span>也很重要，这样<span lang="EN-US">Jmeter</span>就不填写使用了默认值的字段。<span lang="EN-US"><br /><br /></span>　　录制完成后， 停止<span lang="EN-US">HTTP </span>代理服务器<span lang="EN-US">; </span>在录制控制器元件上单击右键将记录的元件保存为一个文件用于以后重用，另外，不要忘了恢复浏览器的代理服务器设置。<span lang="EN-US"><br /><br /></span></span>
														<b>
																<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　指定响应时间需求并校验结果</span>
														</b>
														<b>
																<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">
																		<br />
																</span>
														</b>
														<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">
																<br />    </span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　尽管本节内容与<span lang="EN-US">Jmeter</span>不是直接相关，但是<span lang="EN-US">Jmeter</span>仍旧是指定响应时间需求和校验测试结果这两个负载测试评价任务互相联系的纽带。<span lang="EN-US"><br /><br /></span>　　在<span lang="EN-US">web</span>应用的环境里，响应时间指的是从提交访问请求到等到<span lang="EN-US">HTML</span>结果所耗费的时间。从技术的角度看，响应时间也应包括浏览器重绘<span lang="EN-US">HTML</span>页面的时间，但是浏览器一般是一块接着一块地显示而不是直接显示完整的整个页面，让人感觉响应时间要少一些。 另外，典型的情况是，负载测试工具不会考虑浏览器的重绘时间。 因此， 在实际的性能测试中，我们将考虑以上描述的情形， 如果不能确信，可以在正常的响应时间上加一个固定值，如<span lang="EN-US">0.5</span>秒。<span lang="EN-US"><br /><br /></span>　　以下是一套众所周知的确定相应时间的标准<span lang="EN-US">: <br /></span>　　<span lang="EN-US">·</span>用户将不会注意到少于<span lang="EN-US">0.1</span>秒的延迟<span lang="EN-US"><br /></span>　　<span lang="EN-US">·</span>少于<span lang="EN-US">1</span>秒的延迟不会中断用户的正常思维， 但是一些延迟会被用户注意到<span lang="EN-US"><br /></span>　　<span lang="EN-US">·</span>延迟时间少于<span lang="EN-US">10</span>秒，用户会继续等待响应 <span lang="EN-US"><br /></span>　　<span lang="EN-US">·</span>延迟时间超过<span lang="EN-US">10</span>秒后，用户将会放弃并开始其他操作<span lang="EN-US"><br /><br /></span>　　这些阀值很有名并且一般不会改变，因为是关乎人类的感知特性的。 所以要根据这些规则来设置响应时间需求， 也需要适当调整以适应实际应用。例如，亚马逊公司<span lang="EN-US">(Amazon.com) </span>的主页也遵循了以上规则，但是由于更偏重于风格上的一致，所以在响应时间上有一点损失。<span lang="EN-US"><br /><br /></span>　　乍一看，好像有两种不同的方式来确定相应时间需求：<span lang="EN-US"><br /></span>　　<span lang="EN-US">·</span>平均响应时间<span lang="EN-US">(Average response time )<br /></span>　　<span lang="EN-US">·</span>绝对响应时间（<span lang="EN-US">Absolute response time</span>）<span lang="EN-US">;</span>即， 所有的响应时间必须低于某一阀值<span lang="EN-US"><br /><br /></span>　　指定平均响应时间比较简单一些（<span lang="EN-US">straightforward</span>），但是由于数据变化的干扰，这个需求往往难以实现。为什么取样中的<span lang="EN-US">20%</span>的响应时间要比平均值高<span lang="EN-US">3</span>倍以上呢？请注意，<span lang="EN-US">JMeter </span>计算平均响应时间与图形结果监视器中的标准偏差是一致的。<span lang="EN-US"><br /><br /></span>　　另一方面， 对绝对响应时间需求过于苛求是不实际的。 如果只有<span lang="EN-US">0</span>。<span lang="EN-US">5%</span>的取样不能通过测试该怎么办？如果再测一次，又会有很大的变化。 幸运的是， 使用置信区间（<span lang="EN-US">confidence interva</span>）分析这种正规的统计方法可以顾及到取样变化的影响。<span lang="EN-US"><br /></span>在继续进行前，让我们首先回顾一些基本的统计学知识。<span lang="EN-US"><br /><br /></span><b>　　中心极限定理（<span lang="EN-US">The central limit theorem</span>）</b><span lang="EN-US"><br /> <br /></span>　　中心极限定理表明如果总体的分布有一个平均值<span lang="EN-US">μ</span>和标准偏差<span lang="EN-US">σ</span>，那么对于一个十分大的<span lang="EN-US">n(&gt;30)</span>，其取样平均值的分布将接近于正态分布，其平均值<span lang="EN-US">μmean = μ </span>，标准偏差<span lang="EN-US">σmean = σ/√n</span>。<span lang="EN-US"><br /></span>注意取样平均值的分布是正态的，而取样自身的分布不必是正态的。也就是说如果多次运行测试脚本则测试结果的平均响应时间将会是正态的。<span lang="EN-US"><br /><br /></span>　　图<span lang="EN-US"> 5 </span>和图<span lang="EN-US"> 6 </span>分别展示了两个正态分布。 在这里横坐标是采样响应时间的均值， 总体的均值被调整到坐标的原点（<span lang="EN-US">shifted so the population mean is at the origin</span>）。 图<span lang="EN-US">5 </span>表明<span lang="EN-US">90%</span>的时间里，采样均值位于<span lang="EN-US">±Zσ</span>的区间里（<span lang="EN-US">percent of the time</span>，<span lang="EN-US"> the sampling means are within the interval ±Zσ</span>，），这里的<span lang="EN-US">Z=1.645 </span>和<span lang="EN-US"> σ </span>是标准偏差。 图<span lang="EN-US"> 6 </span>表明了<span lang="EN-US">99%</span>的情况下的情形这时的<span lang="EN-US">Z=2.576</span>。 在给定的概率下，如<span lang="EN-US">90%</span>， 我们可以看到相应的<span lang="EN-US">Z</span>呈现正态曲线，反之亦然。<span lang="EN-US"><o:p></o:p></span></span>
												</p>
												<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="center">
														<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">
																<v:shape id="_x0000_i1030" style="WIDTH: 183.75pt; HEIGHT: 161.25pt" alt="image" type="#_x0000_t75">
																		<v:imagedata o:href="http://java.chinaitlab.com/UploadFiles_8734/200602/20060224113125849.jpg" src="file:///F:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image009.jpg">
																		</v:imagedata>
																</v:shape>
																<o:p>
																</o:p>
														</span>
												</p>
												<p class="MsoNormal" style="MARGIN: 0cm 0cm 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto" align="left">
														<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">
																<br />
														</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　<span lang="EN-US">Figure 5</span>。<span lang="EN-US"> Z value for 90 percent<br />  <o:p></o:p></span></span>
												</p>
												<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="center">
														<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">
																<v:shape id="_x0000_i1031" style="WIDTH: 180.75pt; HEIGHT: 156pt" alt="image" type="#_x0000_t75">
																		<v:imagedata o:href="http://java.chinaitlab.com/UploadFiles_8734/200602/20060224113125802.jpg" src="file:///F:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image011.jpg">
																		</v:imagedata>
																</v:shape>
																<o:p>
																</o:p>
														</span>
												</p>
												<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
														<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">
																<br />
														</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　<span lang="EN-US">Figure 6</span>。<span lang="EN-US"> Z value for 99 percent<br /><br /></span>　　在相关资料中所列的是可提供正态曲线计算的一些网站。在这些网站，我们可以计算随意的相对区间内的概率<span lang="EN-US">(</span>如，<span lang="EN-US">-1.5 &lt; X &lt; 1.5)</span>或者在一个聚集的区域（<span lang="EN-US">cumulated area</span>）内 ，<span lang="EN-US">(</span>如，<span lang="EN-US"> X &lt; 1.5)</span>。 也可以从下面的表中得到近似值。<span lang="EN-US"><br /><br /></span>　　表<span lang="EN-US"> 1</span>。 对应于给定的置信区间（<span lang="EN-US">confidence interval</span>）的标准偏差范围（<span lang="EN-US">Standard deviation range</span>）<span lang="EN-US"><o:p></o:p></span></span>
												</p>
												<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="center">
														<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">
																<v:shape id="_x0000_i1032" style="WIDTH: 240pt; HEIGHT: 120pt" alt="image" type="#_x0000_t75">
																		<v:imagedata o:href="http://java.chinaitlab.com/UploadFiles_8734/200602/20060224113125642.jpg" src="file:///F:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image013.jpg">
																		</v:imagedata>
																</v:shape>
																<o:p>
																</o:p>
														</span>
												</p>
												<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
														<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">
																<br />
																<br />
														</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　表<span lang="EN-US"> 2</span>。 对应于给定的标准偏差范围（<span lang="EN-US">Standard deviation</span>）的置信区间（<span lang="EN-US">confidence interval</span>）<span lang="EN-US"><o:p></o:p></span></span>
												</p>
												<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="center">
														<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">
																<v:shape id="_x0000_i1033" style="WIDTH: 240pt; HEIGHT: 120pt" alt="image" type="#_x0000_t75">
																		<v:imagedata o:href="http://java.chinaitlab.com/UploadFiles_8734/200602/20060224113125989.jpg" src="file:///F:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image014.jpg">
																		</v:imagedata>
																</v:shape>
																<o:p>
																</o:p>
														</span>
												</p>
												<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
														<b>
																<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　置信区间（<span lang="EN-US">Confidence interval</span>）</span>
														</b>
														<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">
																<br /> <br /></span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　置信区间（<span lang="EN-US">confidence interval</span>）的定义是<span lang="EN-US">[</span>取样平均值<span lang="EN-US">- Z*σ/√n</span>， 取样平均值<span lang="EN-US">+ Z*σ/√n]</span>。 例如， 如果置信区间（概率）是<span lang="EN-US">90%</span>， 经查找可知<span lang="EN-US">Z </span>值是<span lang="EN-US">1</span>。<span lang="EN-US">645</span>， 于是置信区间就是<span lang="EN-US"> [</span>取样平均值<span lang="EN-US">- 1</span>。<span lang="EN-US">645*σ/√n</span>， 取样平均值<span lang="EN-US">+ 1</span>。<span lang="EN-US">645*σ/√n]</span>， 这意味着在<span lang="EN-US">90%</span>的时间里， 总体平均值（<span lang="EN-US">population mean</span>）<span lang="EN-US">(</span>是未知的<span lang="EN-US">) </span>会落入这个置信区间内。 也就是说， 我们的测试结果是十分接近的。 如果<span lang="EN-US"> σ</span>（标准偏差） 更大一些， 置信区间也会更大，这就意味着置信区间的上限就会更可能会越过可以接受的范围，即<span lang="EN-US">σ </span>越大，结果越不可信。<span lang="EN-US"><br /><br /></span><b>　　响应时间需求（<span lang="EN-US">Response-time requirements </span>）</b><span lang="EN-US"><br />    <br /></span>　　现在我们把所有的信息都归结到响应时间需求上来。首先。必须要定义性能需求，如<span lang="EN-US">: %95</span>概率的置信区间的平均响应时间的上限必须小于<span lang="EN-US">5</span>秒。 当然，最好有相应的需求或场景。<span lang="EN-US"><br /><br /></span>　　在性能测试结束后，假设进分析得出结论是平均响应时间是<span lang="EN-US">4.5</span>秒，标准偏差时<span lang="EN-US">4.9</span>秒，样本数量是<span lang="EN-US">120</span>个，然后就可以计算<span lang="EN-US">%95</span>概率的置信区间了。 通过查表<span lang="EN-US">1</span>，找到<span lang="EN-US">Z</span>值是<span lang="EN-US"> 1</span>。<span lang="EN-US">95996</span>。 于是置信区间就是<span lang="EN-US"> [4.5 – 1.95996*4.9/√120</span>，<span lang="EN-US"> 4.5 + 1.95996*4.9/√120]</span>， 也就是<span lang="EN-US"> [3.62</span>，<span lang="EN-US"> 5.38]</span>。 尽管看起来这个响应时间看起来很不错，但这个结果（因为超出了需求的要求，因而）是不可接受的。 实际上， 可以检验的是即使是对于<span lang="EN-US">80%</span>概率的可信区间，这个测试结果也是不能接受的。正如你所看到的，使用了置信区间分析后，会得到一个十分精确的方法来估算测试质量。<span lang="EN-US"><br /><br /></span>　　在<span lang="EN-US">web</span>应用中，为了测定某一场景的响应时间，我们一般要通过测试工具来发送多个访问请求，例如：<span lang="EN-US"><br /></span>　　<span lang="EN-US">4. </span>登陆<span lang="EN-US"><br /></span>　　<span lang="EN-US">5. </span>显示表单<span lang="EN-US"><br /></span>　　<span lang="EN-US">6. </span>提交表单<span lang="EN-US"><br /><br /></span>　　假设我们对请求<span lang="EN-US">3</span>更感兴趣。为进行置信区间分析，我们需要的仅是请求<span lang="EN-US">3</span>的所有样本的响应时间均值和标准偏差，而不是全部被统计的样本的。<span lang="EN-US"><br /><br /></span>　　在<span lang="EN-US">Jmeter</span>的图表结果监听器中计算的却是全部请求的响应时间均值和标准偏差。 而<span lang="EN-US">Jmeter</span>的聚合报告监听器计算的是独立的采样器的响应时间均值，可惜没有计算标准偏差。<span lang="EN-US"><br /></span>总之， 仅仅指定响应时间均值是危险的， 因为不能反映出数据的变化。 即使响应时间均值是可以接受的，但是置信区间仅有<span lang="EN-US">75</span>％，这个结果也不能令人信服。但是，使用置信区间分析还是会带来更多的确定性。<span lang="EN-US"><br /><br /></span></span>
														<b>
																<span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　结论</span>
														</b>
														<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">
																<br />
																<br />
														</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　　本文讨论了以下内容<span lang="EN-US">: <br /></span>　　<span lang="EN-US">·</span>详细讲解了<span lang="EN-US">Jmeter </span>线程组在加载负载时的特别设置<span lang="EN-US"><br /><br /></span>　　<span lang="EN-US">·</span>使用<span lang="EN-US">Jmeter</span>代理服务器<span lang="EN-US">(Proxy Server)</span>元件自动建立测试脚本的指导方针，其重点在于模拟用户思考时间（<span lang="EN-US">user think time </span>）。<span lang="EN-US"><br /><br /></span>　　<span lang="EN-US">·</span>置信区间分析（<span lang="EN-US">Confidence interval analysis</span>）， 一种我们可以用来更好地满足响应时间需求的统计分析方法<span lang="EN-US"><br /><br /></span>　　通过使用本文提及的技术可以改善测试脚本的质量，更广泛地说，本文所讨论的内容属于是性能测试的一个工作流程的一部分， 是其中的一个较困难的部分。性能测试包括并不仅限于以下内容：<span lang="EN-US"><br /><br /></span>　　<span lang="EN-US">·</span>编写性能测试需求<span lang="EN-US"><br /></span>　　<span lang="EN-US">·</span>选择测试情景<span lang="EN-US"><br /></span>　　<span lang="EN-US">·</span>准备测试环境<span lang="EN-US"><br /></span>　　<span lang="EN-US">·</span>编写测试脚本<span lang="EN-US"><br /></span>　　<span lang="EN-US">·</span>执行测试<span lang="EN-US"><br /></span>　　<span lang="EN-US">·</span>回顾测试脚本和测试结果<span lang="EN-US"><br /></span>　　<span lang="EN-US">·</span>指出性能瓶颈<span lang="EN-US"><br /></span>　　<span lang="EN-US">·</span>书写测试报告<span lang="EN-US"><br /><br /></span>　　此外， 性能测试结果，包括确定下来的瓶颈， 都需要反馈给开发团队或者架构师进行优化设计。 在这个过程中，并写测试脚本和回顾测试脚本是其中很重要的部分，要精心筹划和管理实施。凭借测试脚本指导和一个好的性能测试流程，你将会有更多的机会来在较重负载下优化软件性能。<span lang="EN-US"><br /><br /><br /></span><b>　　关于作者</b><span lang="EN-US"><br /><br /></span>　　<span lang="EN-US">Chi-Chang Kung </span>是台湾<span lang="EN-US">Sun </span>公司的<span lang="EN-US">java</span>系统架构师，也是<span lang="EN-US">IEEE </span>和<span lang="EN-US">ACM</span>的成员。<span lang="EN-US"><br /><br /></span><b>　　相关资源 </b><span lang="EN-US"><br /><br /></span>　　<span lang="EN-US">·JMeter: http://jakarta.apache.org/jmeter/index.html <br /></span>　　<span lang="EN-US">·</span>《中心极限理论以及经典推论》（<span lang="EN-US">"Central Limit Theorem and Classical Inference" </span>）<span lang="EN-US">Scott M</span>。<span lang="EN-US"> Lynch (2005</span>年<span lang="EN-US">2</span>月<span lang="EN-US">): <a href="http://www.princeton.edu/~slynch/clt_inference.pdf"><span style="COLOR: #003399; TEXT-DECORATION: none; text-underline: none">http://www.princeton.edu/~slynch/clt_inference.pdf</span></a><br /><br /></span>　　<span lang="EN-US">·</span>置信区间（<span lang="EN-US">Confidence intervals</span>）<span lang="EN-US">: <a href="http://people.hofstra.edu/faculty/Stefan_Waner/RealWorld/finitetopic1/confint.html"><span style="COLOR: #003399; TEXT-DECORATION: none; text-underline: none">http://people.hofstra.edu/faculty/Stefan_Waner/RealWorld/finitetopic1/confint.html</span></a><br /><br /></span>　　<span lang="EN-US">·</span>《<span lang="EN-US">java</span>网站的性能分析》（<span lang="EN-US">Performance Analysis for Java Websites</span>），<span lang="EN-US"> Stacy Joines et al. (Addison-Wesley</span>，<span lang="EN-US"> 2002</span>年<span lang="EN-US">9</span>月<span lang="EN-US">; ISBN: 0201844540): <a href="http://www.amazon.com/exec/obidos/ASIN/0201844540/javaworld"><span style="COLOR: #003399; TEXT-DECORATION: none; text-underline: none">http://www.amazon.com/exec/obidos/ASIN/0201844540/javaworld</span></a><br /><br />·</span>《响应时间：三个重要的限制条件》<span lang="EN-US">("Response Times: The Three Important Limits") </span>引自《实用工程学》<span lang="EN-US">( Usability Engineering)</span>，<span lang="EN-US"> Jakob Nielsen (Morgan Kaufmann</span>，<span lang="EN-US"> 1994; ISBN 0125184069): <a href="http://www.useit.com/papers/responsetime.html"><span style="COLOR: #003399; TEXT-DECORATION: none; text-underline: none">http://www.useit.com/papers/responsetime.html</span></a><br /><br /></span>　　<span lang="EN-US">·</span>一些提供了正态曲线计算功能的网站<span lang="EN-US">(Websites for normal curve calculation): <br /></span>　　<span lang="EN-US">o        http://www.psychstat.smsu.edu/introbook/normal.htm <br /></span>　　<span lang="EN-US">o        http://www.ecositebr.bio.br/curva_normal.htm <br /></span>　　<span lang="EN-US">o        <a href="http://statistik.wu-wien.ac.at/mathstat/hatz/vo/applets/probCalc/normal_z_p.html"><span style="COLOR: #003399; TEXT-DECORATION: none; text-underline: none">http://statistik.wu-wien.ac.at/mathstat/hatz/vo/applets/probCalc/normal_z_p.html</span></a><br /><br /></span>　　<span lang="EN-US">·</span>更多关于测试的文章，请参照<span lang="EN-US">JavaWorld's </span>标题索引的<span lang="EN-US">Testing </span>部分<span lang="EN-US">: <a href="http://www.javaworld.com/channel_content/jw-testing-index.shtml"><span style="COLOR: #003399; TEXT-DECORATION: none; text-underline: none">http://www.javaworld.com/channel_content/jw-testing-index.shtml</span></a><br /><br /></span>　　<span lang="EN-US">·</span>关于<span lang="EN-US">JAVA</span>开发工具，参见<span lang="EN-US">JavaWorld's </span>标题索引的<span lang="EN-US">Development Tools </span>部分<span lang="EN-US">: <a href="http://www.javaworld.com/channel_content/jw-tools-index.shtml"><span style="COLOR: #003399; TEXT-DECORATION: none; text-underline: none">http://www.javaworld.com/channel_content/jw-tools-index.shtml</span></a><o:p></o:p></span></span>
												</p>
										</td>
								</tr>
						</tbody>
				</table>
		</div>
<img src ="http://www.cnitblog.com/szdlinxie/aggbug/20566.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/szdlinxie/" target="_blank">szdlinxie</a> 2006-12-15 20:53 <a href="http://www.cnitblog.com/szdlinxie/articles/20566.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>微软技术大会 Tech.Ed2005 讲义下载</title><link>http://www.cnitblog.com/szdlinxie/articles/20528.html</link><dc:creator>szdlinxie</dc:creator><author>szdlinxie</author><pubDate>Fri, 15 Dec 2006 08:47:00 GMT</pubDate><guid>http://www.cnitblog.com/szdlinxie/articles/20528.html</guid><wfw:comment>http://www.cnitblog.com/szdlinxie/comments/20528.html</wfw:comment><comments>http://www.cnitblog.com/szdlinxie/articles/20528.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/szdlinxie/comments/commentRss/20528.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/szdlinxie/services/trackbacks/20528.html</trackback:ping><description><![CDATA[
		<div class="postbody">
				<span class="bold">微软技术大会 Tech.Ed2005 讲义下载<br /><br />课程分类主题<br />开发工具与技术<br />下一代Windows通讯基础(Indigo)简介<br />讲师姓名： 谢晓<br />FileSize: 9659k <br />课程编号： DEV201 <br />下载地址： <a href="http://download.microsoft.com/download/4/8/3/483f1af8-f41d-4cca-9717-24adb79a87db/Dev201-xiexiao.pdf" target="_blank"><font color="#002c99">http://download.microsoft.com/do ... /Dev201-xiexiao.pdf</font></a><br />企业程序库（Enterprise Library）<br />讲师姓名： 王筱东<br />FileSize: 1158k <br />课程编号： DEV205 <br />下载地址： <a href="http://download.microsoft.com/download/4/8/3/483f1af8-f41d-4cca-9717-24adb79a87db/DEV205-wangxiaodong.pdf" target="_blank"><font color="#002c99">http://download.microsoft.com/do ... 05-wangxiaodong.pdf</font></a><br />Windows Presentation Framework (代号Avalon) 360度<br />讲师姓名： 孙展波<br />FileSize: 998k  <br />课程编号： DEV210 <br />下载地址： <a href="http://download.microsoft.com/download/4/8/3/483f1af8-f41d-4cca-9717-24adb79a87db/DEV210-sunzhanbo.pdf" target="_blank"><font color="#002c99">http://download.microsoft.com/do ... EV210-sunzhanbo.pdf</font></a><br />简单之美－实战ASP.NET 2.0<br />讲师姓名： 王洪超，杨滔<br />FileSize: 1014k <br />课程编号： DEV240 <br />下载地址： <a href="http://download.microsoft.com/download/4/8/3/483f1af8-f41d-4cca-9717-24adb79a87db/DEV240-wanghongchao.pdf" target="_blank"><font color="#002c99">http://download.microsoft.com/do ... 40-wanghongchao.pdf</font></a><br />Visual Studio 2005 Team Edition: 用Visual Studio 2005 Team System管理软件开发周期<br />讲师姓名： 郑全战<br />FileSize: 8429k  <br />课程编号： DEV242 <br />下载地址： <a href="http://download.microsoft.com/download/4/8/3/483f1af8-f41d-4cca-9717-24adb79a87db/DEV242-zhengquanzhan.pdf" target="_blank"><font color="#002c99">http://download.microsoft.com/do ... 2-zhengquanzhan.pdf</font></a><br />Visual Studio Team System测试深入探讨<br />讲师姓名： 金宇林<br />FileSize: 2839k  <br />课程编号： DEV243 <br />下载地址： <a href="http://download.microsoft.com/download/4/8/3/483f1af8-f41d-4cca-9717-24adb79a87db/DEV243-jinyulin.pdf" target="_blank"><font color="#002c99">http://download.microsoft.com/do ... DEV243-jinyulin.pdf</font></a><br />.NET框架2.0新特性综述<br />讲师姓名： 卢斌<br />FileSize: 823k <br />课程编号： DEV251 <br />下载地址： <a href="http://download.microsoft.com/download/4/8/3/483f1af8-f41d-4cca-9717-24adb79a87db/DEV251-lubin.pdf" target="_blank"><font color="#002c99">http://download.microsoft.com/do ... db/DEV251-lubin.pdf</font></a><br />Indigo 概览<br />讲师姓名： 任晓明/凌聪<br />FileSize: 10693k  <br />课程编号： DEV301 <br />下载地址： <a href="http://download.microsoft.com/download/4/6/3/4637bf61-9bb3-418f-8441-f4a394ea4f58/DEV301-lingcong.pdf" target="_blank"><font color="#002c99">http://download.microsoft.com/do ... DEV301-lingcong.pdf</font></a><br />Microsoft Visual Studio 2005：托管代码调试<br />讲师姓名： 孙展波<br />FileSize: 836k  <br />课程编号： DEV310 <br />下载地址： <a href="http://download.microsoft.com/download/4/8/3/483f1af8-f41d-4cca-9717-24adb79a87db/DEV310-sunzhanbo.pdf" target="_blank"><font color="#002c99">http://download.microsoft.com/do ... EV310-sunzhanbo.pdf</font></a><br />.NET架构：全球化思想！定制各种文化及国际数据<br />讲师姓名： 张帜<br />FileSize: 2401k <br />课程编号： DEV323 <br />下载地址： <a href="http://download.microsoft.com/download/4/8/3/483f1af8-f41d-4cca-9717-24adb79a87db/DEV323-zhangzhi.pdf" target="_blank"><font color="#002c99">http://download.microsoft.com/do ... DEV323-zhangzhi.pdf</font></a><br />深度探索 C# 2.0<br />讲师姓名： 付仲恺<br />FileSize: 1038k  <br />课程编号： DEV323 <br />下载地址： <a href="http://download.microsoft.com/download/4/8/3/483f1af8-f41d-4cca-9717-24adb79a87db/DEV323-zhangzhi.pdf" target="_blank"><font color="#002c99">http://download.microsoft.com/do ... DEV323-zhangzhi.pdf</font></a><br />Microsoft Visual C# 2005: IDE 技巧与诀窍<br />讲师姓名： 马宁<br />FileSize: 1866k <br />课程编号： DEV332 <br />下载地址： <a href="http://download.microsoft.com/download/4/8/3/483f1af8-f41d-4cca-9717-24adb79a87db/DEV332-maning.pdf" target="_blank"><font color="#002c99">http://download.microsoft.com/do ... b/DEV332-maning.pdf</font></a><br />Microsoft Visual Basic 2005: 提升开发效率并改进应用程序架构<br />讲师姓名： 邵志东<br />FileSize: 902k  <br />课程编号： DEV341 <br />下载地址： <a href="http://download.microsoft.com/download/4/8/3/483f1af8-f41d-4cca-9717-24adb79a87db/DEV341-shaozhidong.pdf" target="_blank"><font color="#002c99">http://download.microsoft.com/do ... 341-shaozhidong.pdf</font></a><br />Microsoft Visual Basic 2005: 应用程序框架和高级语言特性<br />讲师姓名： 施凡<br />FileSize: 1161k <br />课程编号： DEV342 <br />下载地址： <a href="http://download.microsoft.com/download/4/8/3/483f1af8-f41d-4cca-9717-24adb79a87db/DEV342-shifan.pdf" target="_blank"><font color="#002c99">http://download.microsoft.com/do ... b/DEV342-shifan.pdf</font></a><br />WinForms: 使用Clickonce部署客户端应用<br />讲师姓名： <br /><div style="FONT-SIZE: 12px">SQL Server Integration Service开发与部署<br />讲师姓名： 黄春雷<br />FileSize: 4976k <br />课程编号： DAT324 <br />下载地址： <a href="http://download.microsoft.com/download/d/e/b/deb6b0a3-0d4f-4c11-8be3-626c36ce555a/DAT324-huangchunlei.pdf" target="_blank"><font color="#002c99">http://download.microsoft.com/do ... 24-huangchunlei.pdf</font></a><br />Visual Studio 2005与SQL Server 2005协同工作<br />讲师姓名： 孙巍<br />FileSize: 749k  <br />课程编号： DAT327 <br />下载地址： <a href="http://download.microsoft.com/download/4/8/3/483f1af8-f41d-4cca-9717-24adb79a87db/DAT327-sunwei.pdf" target="_blank"><font color="#002c99">http://download.microsoft.com/do ... b/DAT327-sunwei.pdf</font></a><br />SQLCLR 与 T-SQL:数据库开发最佳实践<br />讲师姓名： 孙巍<br />FileSize: 1104k <br />课程编号： DAT328 <br />下载地址： <a href="http://download.microsoft.com/download/4/8/3/483f1af8-f41d-4cca-9717-24adb79a87db/DAT328-sunwei.pdf" target="_blank"><font color="#002c99">http://download.microsoft.com/do ... b/DAT328-sunwei.pdf</font></a><br />SQL Server 2005报表服务：管理与配置<br />讲师姓名： 毛颉<br />FileSize: 1906k  <br />课程编号： DAT331 <br />下载地址： <a href="http://download.microsoft.com/download/d/e/b/deb6b0a3-0d4f-4c11-8be3-626c36ce555a/DAT331-zoufangbo.pdf" target="_blank"><font color="#002c99">http://download.microsoft.com/do ... AT331-zoufangbo.pdf</font></a><br />用数据挖掘使BI更智能化<br />讲师姓名： 唐朝晖<br />FileSize: 4110k  <br />课程编号： DAT332 <br />下载地址： <a href="http://download.microsoft.com/download/4/8/3/483f1af8-f41d-4cca-9717-24adb79a87db/DAT332-tangzhaohui.pdf" target="_blank"><font color="#002c99">http://download.microsoft.com/do ... 332-tangzhaohui.pdf</font></a><br />SQL Server 2005 之数据挖掘<br />讲师姓名： 唐朝晖<br />FileSize: 1039k <br />课程编号： DAT336 <br />下载地址： <a href="http://download.microsoft.com/download/4/8/3/483f1af8-f41d-4cca-9717-24adb79a87db/DAT336-tangzhaohui.pdf" target="_blank"><font color="#002c99">http://download.microsoft.com/do ... 336-tangzhaohui.pdf</font></a><br />使用 SQL Server Integration Services 装载数据仓库<br />讲师姓名： 吕科<br />FileSize: 2749k  <br />课程编号： DAT337 <br />下载地址： <br /><a href="http://download.microsoft.com/download/4/8/3/483f1af8-f41d-4cca-9717-24adb79a87db/DAT337-lvke.pdf" target="_blank"><font color="#002c99">http://download.microsoft.com/download/4/8/3/483f1af8-f41d-4cca-9717-24adb79a87db/DAT337-lvke.pdf</font></a><br /><br />软件开发管理<br />软件开发项目管理 – 精华再谈<br />讲师姓名： 栾跃<br />FileSize: 1146k  <br />课程编号： SDM200 <br />下载地址： <a href="http://download.microsoft.com/download/3/3/6/3364ea20-6347-462e-a264-f356fa726833/SDM200_luanyue.pdf" target="_blank"><font color="#002c99">http://download.microsoft.com/do ... /SDM200_luanyue.pdf</font></a><br />软件开发项目管理的成功指南<br />讲师姓名： 宋晨枫<br />FileSize: 696k  <br />课程编号： SDM204 <br />下载地址： <a href="http://download.microsoft.com/download/3/3/6/3364ea20-6347-462e-a264-f356fa726833/SDM204-songchenfeng.pdf" target="_blank"><font color="#002c99">http://download.microsoft.com/do ... 04-songchenfeng.pdf</font></a><br />软件测试人员面临的挑战与机遇<br />讲师姓名： 张奭<br />FileSize: 321k  <br />课程编号： SDM211 <br />下载地址： <a href="http://download.microsoft.com/download/3/3/6/3364ea20-6347-462e-a264-f356fa726833/SDM211-zhangshuang.pdf" target="_blank"><font color="#002c99">http://download.microsoft.com/do ... 211-zhangshuang.pdf</font></a><br />软件质量管理的策略：测试自动化<br />讲师姓名： 王志峰<br />FileSize: 1181k <br />课程编号： SDM212 <br />下载地址： <a href="http://download.microsoft.com/download/3/3/6/3364ea20-6347-462e-a264-f356fa726833/SDM212-wangzhifeng.pdf" target="_blank"><font color="#002c99">http://download.microsoft.com/do ... 212-wangzhifeng.pdf</font></a><br />软件系统构架设计原则和面向服务(SOA)的系统构架<br />讲师姓名： 栾跃<br />FileSize: 6000k  <br />课程编号： SDM221 <br />下载地址： <a href="http://download.microsoft.com/download/d/e/b/deb6b0a3-0d4f-4c11-8be3-626c36ce555a/SDM221-luanyue.ppt" target="_blank"><font color="#002c99">http://download.microsoft.com/do ... /SDM221-luanyue.ppt</font></a><br />大规模软件开发: 过程与研发管理, 项目管理研发与测试团队的相互关系<br />讲师姓名： 朱敏<br />FileSize: 838k  <br />课程编号： SDM241 <br />下载地址： <a href="http://download.microsoft.com/download/3/3/6/3364ea20-6347-462e-a264-f356fa726833/SDM241-zhumin.pdf" target="_blank"><font color="#002c99">http://download.microsoft.com/do ... 3/SDM241-zhumin.pdf</font></a><br />Scrum: 介绍最新的快捷软件研发过程<br />讲师姓名： 朱敏<br />FileSize: 806k  <br />课程编号： SDM242 <br />下载地址： <a href="http://download.microsoft.com/download/3/3/6/3364ea20-6347-462e-a264-f356fa726833/SDM242-zhumin.pdf" target="_blank"><font color="#002c99">http://download.microsoft.com/do ... 3/SDM242-zhumin.pdf</font></a><br />软件产品质量度量<br />讲师姓名： 张奭<br />FileSize: 906k  <br />课程编号： SDM312 <br />下载地址： <a href="http://download.microsoft.com/download/3/3/6/3364ea20-6347-462e-a264-f356f">http://download.microsoft.com/download/3/3/6/3364ea20-6347-462e-a264-f356f</a><br /><br /><div style="FONT-SIZE: 12px">电驴下载<br />http://lib.verycd.com/2005/10/28/0000071741.html</div></div></span>
		</div>
<img src ="http://www.cnitblog.com/szdlinxie/aggbug/20528.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/szdlinxie/" target="_blank">szdlinxie</a> 2006-12-15 16:47 <a href="http://www.cnitblog.com/szdlinxie/articles/20528.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>