测试的目的: 软件测试存在于 系统开发时每一个阶段且必须要持续且反复进行 , 可以控制住 , 整个系统在开发各阶段的风险问题 . 测试的流程: 单元测试 - > 整合的模块测试 - > 功能测试 - > 性能测试 Web 层内软件测试的概念与流程,如图二所示,其中键头旁的数字符号代表着整个测试流程的执行步骤。首先先准备好受测数据与受测系统之后,借着虚拟浏览器来发出request ,向受测系统取得包裹着HTML code 的response 。然后再利用测试平台来协助我们进行受测数据与预期值的比对工作。当比对后所回报的结果都是正确无误时,代表着受测系统的功能可以正常运作了 1.单元测试 1.1目的: 检查单元模块内部是否是符合业务逻辑 1.2. JUnit平台单元测试 1.2.1. 开发测试要求 一个class 有一个相应的testCase(class 中每个函数 一个 test函数) 一个功能模块 有一个相应的 TestSuite 1.2.2. JUnit平台的设计架构 是采用了命令(Command )和复合(Composite )两种设计模式(Design Pattern )做为关键的组成架构。 - 命令(Command)TestCase包含数个test method - 用来测试被测类别内public method 的产出对象与预期的结果是否相同。在JUnit 平台内有提供数种用来协助比对的assert method - 复合(Composite)TestSuite 可以由数个TestCase或是数个TestSuite组成, 可以根据测试的需求,拼凑出多个的TestSuite 如图三所示。在了解了JUnit 平台的架构之后,我们便可以运用JUnit 平台来发展受测系统的整合测试与功能测试。 1.2.3. jbuider/eclipse中快速做测试 a. 通过 jbuider 中 File - > New 实现如下图 : b.ok 后 - >TestCaseWizard : 选择类和选择方法 c. finish 后 自动产生代码如下: 只需在 setUp() 中完成测试初始操作, 只需在 tearDown () 中完成测试结束操作, public class TestCataImageHistoryDAO extends TestCase { private CataImageHistoryDAO cataImageHistoryDAO = null; public TestCataImageHistoryDAO(String name) { super(name); } protected void setUp() throws Exception { super.setUp(); cataImageHistoryDAO = new CataImageHistoryDAO(); } protected void tearDown() throws Exception { cataImageHistoryDAO = null; super.tearDown(); } public void testAddCataImageHistoryOne() throws DAOException, BusinessDescriptionException, WasException { UserProfile user = null; CataImageMidInfo info = null; cataImageHistoryDAO.addCataImageHistoryOne(user, info); } 1.3.ant结合junit进行软件自动测试 1.4.其他测试方法 2.整合测试的观念与Cactus应用
整合测试提供了 J2EE Container 的环境,可以快速轻易地检验出 Domain Object 与 J2EE Container 的互动行为是否合乎逻辑。因此整合测试的对象是以一个 EJB 、 Servlet 或是 JSP 的程序代码为基本单元。 Open Source 社群的 Jakarta 计划中的子计划 Cactus ,即是为了实作整合测试用的平台而诞生的。
Cactus 基本上也是延伸 JUnit 平台而发展出来的,因此它除了原有基本的 method 之外,还提供了可以用来模拟浏览器的内部行为的 beingxxx( ) 和 endxxx( ) 的 method 。这两个 method 来 这些 method 的执行顺序和与 Web Container 互动的行为模式,如图四所示。
我们利用 beginxxx( ) 来设定要传递给受测对象的字符串参数。执行完 beginxxx( ) 后,会发出 request 将参数名称与参数值传递到 Web Container 。 TestCase 会执行 setUp( ) ,将受测对象所需要的对象环境建立起来,接着在 testxxx( ) 执行存取受测对象的动作。当存取受测对象的动作执行完后,便可以检验受测对象可能存放在 session 的产出物。然后在 Web Container 会执行释放资源的动作,然后将 response 回传到 Client 端。最后在 Client 端执行 endxxx( ) 来进行比对 HTML code 是否和预期值相同,执行完 endxxx() 时也代表一个整合测试的结束。将这五个 method 所执行的功能汇整如表一所示。
虽然 Cactus 架构提供了受测对象产出物与预期结果的比对功能,但是当回传的 HTML code 的内容过于庞大复杂时,反而不利于比对的工作。因此采用了一个实用性的做法。此做法是在 JSP 或 servlet 欲产出的 HTML code 的程序代码里,于关键的卷标内添加 ID 这种属性。当 endxxx( ) 要进行比对前,先读取记载着 ID 属性值与预期值的外部数据文件,再透过 DOM 的存取机制来取得 HTML code ,便能够快速地比对关键的数据。不仅可以将比对的工作模块化,更能够在不需要重新编译测试码的情形下,随时变更预期值。读者们若有遇到相似的问题时,不妨可以采用与相同的策略来解决。
整合测试不同于单元测试,虽然减低了撰写测试码的困难度,但也因为 Domain Object 与 J2EE Container 的结合,而不能为 Domain Object 提供单纯的测试环境。因此若有其它的测试可以单纯地检验整个系统,便可以弥补整合测试的不足。功能测试即是扮演这样的一个角色。 3.性能测试 目的: 并发用户的多少,以便优化 web 压力工具: web压力测试 免费测试工具 * Web Application Stress Tool, Microsoft, http://www.microsoft.com
* JMeter, Java Apache Project, http://www.apache.org/
* LoadItUp, BroadGun Software, http://www.broadgun.com
非免费 测试工具 如果你或你的公司很有 Money ,或者需要更加丰富的功能,可以使用以下商业软件,不过它们都价值 $10,000 ,甚至更多:
* WebLoad, RadView Software, http://www.radview.com/
* SilkPerformer, Segue Software, http://www.segue.com/
* Benchmark Factory, Quest Software, http://www.benchmarkfactory.com/
* LoadRunner, Mercury Interactive, http://www.mercuryinteractive.com/ 压力测试主要测试功能 * 发送 GET 和 POST 请求
* “ 记录 ” 从浏览器发送的 GET 和 POST 请求(以免开发者需要手写这些合适的请求)。
* 获取和发送 COOKIE 。
* 多线程
* 模拟用户延迟
* 记录性能数据
* 控制带宽 Profiler : 用于优化 , 检测你的应用程序并提供一些有用的运行时信息,比如某块代码的执行时间、内存 / 堆的使用情况、内存中的对象实例数量等等。比如,我们想知道到底是哪个 Java 对象的哪个方法耗费了更多的时间。
* Quantify , Rational Software , http://www.rational.com/
* Optimizeit , Intuitive Systems , http://www.optimizeit.com/
* JProbe , Sitraka Software , http://www.jprobe.com/ 3.1.WEB压力测试 下面的公式计算访问站点的真实用户生成的负载(请求数/秒): 例如,某个站点有 100 名并发用户,假设下载时间为 10 秒,思考时间为 30 秒,则每秒将生成 2.5 页。如果我们假设每页 3 个请求,则在 Web 服务器上将转化为每秒 7.5 个请求。 真实用户负载=(站点总并发用户/(下载时间 + 思考时间))*(总请求数/总页数) 注意点: 总请求数指(Get 数量) , 总页数指 3.1.1.如何用 web application Stress Tool 1.Record 进入 WAS 后,在工具栏中选 出现 选 Record 关闭所有IE窗口后,同时把IE中的 连接 - >代理服务 设为 localhost 8000 且去掉 本地服务不调用代理的复选 再 Finish 系统自动打开IE 输入测试URL 页面 这时系统自动记录对页面的操作 用 GET ,POST 语句 如果你测试服务器不是在本地,这时你就要输入server 如:目标测试URL http://10.220.1.32:7001/TaiBaoHouse/ server 输入 10.220.1.32 配置运行时间及Threads等 其中 :并发线程数 运行时间 请求延迟 运行 查看结果: 3.1.2 如何根据测试结果提高性能 1. 发布 Web 应用程序时避免瓶颈的实际负载测试技巧 http://www.microsoft.com/china/msdn/library/webservices/WebApp/misLoadTesting.mspx 2. 附: 3.1.2 如何用 3.2针对系统优化 3.2.1 一..参考资料 主要联接 1. 发布 Web 应用程序时避免瓶颈的实际负载测试技巧 http://www.microsoft.com/china/msdn/library/webservices/WebApp/misLoadTesting.mspx 1.WEB压力测试 作者: 不详 来源: 中国软件评测中心 http://www.csai.cn 2005年09月26日 随着WEB应用程序使用越来越广泛,针对其性能测试的要求也越来越多。然而由于WEB程序 混合了大量的技术,如:HTML、Java、Javascript、VBScript等,同时它还依赖很多其它的因素,如:Link、Database、Network等,使得WEB应用程序测试变得更加复杂。WEB压力测试是 评价一个WEB应用程序的重要手段,我觉得可以从以下几个方面入手: 1、充分熟悉待测软件。这是测试前的准备工作 ,任何一个项目,在开始测试之前,都应该对它有个全面的了解,如这个软件是干什么的,其功能和性能主要体现在哪几个方面,有什 么特点,如何才能体现这些特点等。 2、制定测试计划。测试计划就是定义一个测试项目的过程 ,以便能够正确地度量和控制测试。测试计划包括准备采用哪种测试工具,根据现有条件准备搭建的测试模拟环境,测试完 成的标准(包括数据库的大小、并发用户的多少等),是否进行对比测试,测试方法与进度安排等等。 3、实施测试。按照测试计划,在各种条件下,运行事先设计的测试脚本,记录WEB服务器 及相关客户端的性能参数。在一定的范围内调整数据库的大小、并发访问的用户数、访问时间 等测试条件以获得所需要的数据。 4、分析测试结果。测试会收集到大量的数据,根据这些数据就可以帮助分析Web应用程序 的性能。对其性能的描述可以采用线图、条形图和报表等多种直观的形式。 具体而言,评价WEB应用的有以下几个指标: Number of hits:测试间隔内虚拟用户点击页面的总次数 Requests per second:每秒客户端的请求次数 Threads:线程数,即虚拟用户并发量 Socket Errors Connect:Socket错误连接次数 Socket Errors Send:Socket错误发送次数 TTFB Avg:从第一个请求发出到测试工具接收到服务器应答数据的第一个字节之间的平均时间 TTLB Avg:从第一个请求发出到测试工具接收到服务器应答数据的最后一个字节之间的平均时间 根据以上数据,可以从以下几个方面分析应用程序性能,生成相应报表: Number of hits vs. Users:随着虚拟用户的增加,服务器在规定时间内所能处理的总点击数 Requests per second vs. Users:随着虚拟用户的增加,服务器在规定时间内所能处理的每秒请求数 Errors vs. Time:随着模拟访问时间的延续,出现错误的数量 Errors vs. Users:随着虚拟用户的增加,出现错误的数量 Performance Distribution vs. Users:针对虚拟用户数的应用性能分布情况,包括服务器的内存、CPU使用情况等 Performance vs. Users:随着虚拟用户的变化,应用性能的变化等 2. 2.压力测试工具 2.1.测试工具:Microsoft Web Application Stress Tool 2.1.1 概要 帮助: http://www.microsoft.com/technet/archive/itsolutions/intranet/downloads/webtutor.mspx 下载网址:http://www.microsoft.com/technet/archive/itsolutions/intranet/downloads/webstres.mspx
Microsoft Web Application Stress Tool 是由微软的网站测试人员所开发,专门用来进行实际网站压力测试的一套工具。透过这套功能强大的压力测试工具,您可以使用少量的Client端计算机仿真大量用户上线对网站服务所可能造成的影响,在网站实际上线之前先对您所设计的网站进行如同真实环境下的测试,以找出系统潜在的问题,对系统进行进一步的调整、设置工作。
Microsoft Web Application Stress具有以下几个特性:
* 可以数种不同的方式建立测试指令:包含以手动、录制浏览器操作步骤、或直接录入IIS的记录文件、录入网站的内容及录入其它测试程序的指令等方式。
* 支持多种客户端接口:标准的网站应用程序C++的客户端,使用Active Server Page 客户端,或是使用Web Application Stress对象模型建立您自定的接口。.
* 支持多用户利用多种不同的认证方式仿真实际的情况,包含了DPA, NTLM 及 SSL等。
* 支持使用动态的cookie仿真定制网站实际运作场景及对话(session)的支持。
* 在客户端的计算机以NT 服务的方式执行仿真的工作,可在不中断测试的情况下将某些客户端的测试计算机删除。
* 透过集中式的Microsoft Web Application Stress 管理员,您可以使用任意数目的客户端计算机同时进行测式的工作。
* 具有Bandwidth throttling (带宽遏流)的功能以仿真用户使用调制解调器上线的效果。
* 内建的query-string 编辑器可帮助您建立name-value pair组合的模板,并可在不同的场景测试中重复使用。
* 可程序化的对象模式让您可以建立您自己的测试客户端。
* 汇总的测试报告及丰富的性能测试资料。
* 支持域名系统(DNS)让您可以测试整个群集(Cluster)的机器。
* 使用Page group的方式来控制文件的组及测试指令的执行程序。
* 可自定的header让您可以仿真各种不同种类的浏览器。
* 可自定的指令延迟让您以更接近真实环境的方式进行测试。
2.1.2 网站测试概述 为了正确使用WAS进行网站的压力测试,您需要对于网站测试的方法有一初步的了解。以下的讨论将包含一些基本的概念以供参考。
网站的测试可大略分成三个主要的类别:
* 网站性能测试 (Performance testing)
* 压力测试下的网站稳定性 (Stability or stress testing)
* 网站承受能力评估 (Capacity planning)
网站性能测试的第一件工作就是使用测试工具对网站加压以测量网站服务器每秒可以承受的请求(Request Per Second) 的最大值。第二件工作就是找出系统性能限制的原因所在,举例来说,CPU、内存、或是后端系统所造成的反应延迟等。
在许多状况下,网站服务器的CPU是主要的性能瓶颈。测试时您可以持续加压直到性能表现开始下降,再慢慢的降低压力的程度。此时您所测试出来的最大性能即为该网站所能达到的最高值。在实际测试时,您可以通过增加压力线程(thread),或是增加执行WAS测试程序的客户端来加压。
在网站服务器端,您可以使用性能监视工具如Performance Monitor来监视如 "System: % Total Processor Time" 及 "Web Service: Connection Attempts/sec" 或 "Active Server Pages: Requests Queued"等指针。如果CPU的资源指针已达到80%到85%,则CPU的处理能力最有可能就是整个系统的瓶颈所在。若是在压力测试的过程中CPU所被使用的比例不高而”Requests Queued”的指针一直居高不下,可能是程序正在调用服务器上的COM组件而这个组件无法有效的执行完所有的命令,因而造成了系统性能的降低。在这种情形下,服务器上的COM组件才是真正的瓶颈。
目前市场上最热门的定制网站应用程序也会对网站的性能表现有重大的影响。WAS包含了数种特性可有效的帮助您测试定制的网站应用程序。例如,您可以建立用户,让WAS可以设置并储存每一个用户的cookie。您也可以使用QueryString 编辑器帮助您建立并储存数个不同的name-value pair以便在每一次执行request时进行测试。
一般的网站测试问题
* 错误的测试平台,和实际上线的 production server(生产环境服务器)不同,无法测出实际的问题。
* 错误的测试指令,无法正确的仿真出实际上线系统真正的反应。
* 线程安全性问题以及不稳定的服务器COM组件。
* Active Server Page 的错误及GLOBAL.ASA 设置的问题。
Java 程序的测试工具(转自PMT杂志) |
Java 程序的测试工具 --pengpeng [email protected] 现在有很多软件都是基于Java的,如何测试这些Java程序就成了一个测试工程师的新 课题。以下介绍一些测试工具,可以提高Java 程序的测试效率。 Bean-test 出品人:RSW 软件公司 网址:http://www.testmybeans.com/ 主要功能:对EJB 应用软件进行负载和压力测试(load/stress testing),以衡量它 的扩展性(scalability)。 EJBQuickTest 网址:http://www.ejbquick.com/ 主要功能:模拟EJB 应用软件的客户程序,进行方法调用(method invocation)。支 持回归测试(regression testing),测试数据的生成,以及性能和压力测试。 JStyle 出品人:Man Machine Systems 网址:http://www.mmsindia.com/ 主要功能:分析Java 源代码的质量,包括产生源代码的有关统计信息和指标度量。 JTest 出品人:Parasoft 公司 网址:http://www.parasoft.com/ 主要功能:功能很丰富,包括白盒测试、黑盒测试、回归测试,以及代码风格的检查。 JProbe 出品人:Sitraka 软件公司 网址:http://www.klgroup.com/ 主要功能:对Java 代码进行内存测试和性能剖析(profile),有针对EJB 的服务器端 版本和针对普通Java 代码的客户端版本。 JUnit 网址:http://www.junit.org/ 主要功能:提供了一个Java代码的单元测试框架,以方便Java程序员进行持续的单元 测试。JUnit 是Open Source 的,在XP(Extreme Programming)圈子里颇受欢迎。 |