在评估性能和可伸缩性方面,这些并行分析模式能够帮助您发现系统架构的优势和缺陷,并在解决与性能和可伸缩性有关的问题时确定必须检查哪些组件。与此类似的功能测试策略(即全部数据完整性验证),正显得越来越关键,因为现在数据可能是从分散的数据源派生而来。通过评估组件内外的数据完整性(包括处理过程中的任何功能性的数据转换),测试人员可以定位每个潜在的错误,并使系统集成和缺陷隔离成为标准的开发过程的一部分。端到端架构测试(End to End Architecture Testing)指的是这样一种概念,它测试计算环境中所有的访问点,并在组件级和系统级的测试中将功能测试和性能测试整合在一起(见图2)。
很显然,首先必须开发单个组件,然后才能将它们“装配”成功能系统。因为组件可以进行早期测试,所以在 TAP 中端到端测试是从组件测试开始的。在组件测试中,随着环境的建立,适当的测试也分别实施于各个不同的单个组件上。功能测试和性能测试在组件测试阶段都相当有价值,它们帮助诊断了在整个环境构建前和构建中的各种缺陷。
组件测试中的功能测试
组件级功能测试验证了每个组件所执行的事务。这包括了组件或系统所要求的任何数据转换和组件所处理的事务的业务逻辑的验证。在应用程序功能的开发中,基础设施测试(infrastructure testing)验证并量化整个环境中的数据流量,并以这种方式来同时进行功能和性能测试。数据完整性必须当数据在组件间传递时进行验证。例如,XML 测试在逐个事务地验证 XML 数据内容,并在需要时验证正式 XML 结构(元数据结构)。对组件测试来说,诸如 IBM Rational Robot 这样的自动可扩展的测试工具可以大大的减少用在 GUI 测试和非GUI组件的功能测试上的时间和精力。Rational Robot 的脚本语言支持对外部 COM DDLs 的调用,是非 GUI 对象测试的理想工具。此外,Rational Suite TestStudio 和 Rational Team Test 所附带的新的 Web 和 Java 测试功能,提供了测试 J2EE 架构和使用 java 语言来编写测试脚本的附加功能。
组件级可伸缩性测试和性能测试
与这些功能测试并行的是组件级可伸缩性测试,在环境中检验每个组件来确定其事务(或者说容量)的限度。一旦有足够的应用功能来创建业务相关的事务,事务特征测试(transcation characterization testing)就被用来确定业务事务中的各个定量描述,包括消耗的带宽和后台 CPU 以及内存的占用率。资源测试(Resource testing)将这个概念扩展到多用户测试,从而确定应用程序和子系统或模块中全部的资源消耗。最后,配置测试(configuration testing)可以用来确定哪些硬件、操作系统、软件、网络、数据库或者其他配置上的变更可以优化性能。与功能测试一样,有效的自动工具如Rational Suite TestStudio 和 Rational Team Test 所提供的那些工具可以极大地简化可伸缩性测试和性能测试。在这种情况下,创建、计划和驱动多用户测试以及监控资源利用率的能力是有效且成功完成资源测试、事务特征测试和配置测试的基础。
与组件级的可伸缩性测试一样,Rational suite TestStudio、Rational TeamTest 和其他类似的工具提供了一些高级的,多用户的测试能力,它们可以用来高效进行上述的大多数或者全部的可伸缩性和性能测试。
一个实际例子
也许举一个例子是说明的最好办法。请考虑下面的情况:
通过 eRetailer 构建一个公共的 Web 书店,并在它的内容层中使用了四种由内容提供的 Web 服务。第一种服务提供目录,包括书名,介绍语和作者。第二种服务提供所有产品的当前库存信息。第三种是价格服务器,它提供商品定价信息,并根据购买者的所在地提供运费和税费信息并完成交易。最后一种服务用来保存用户档案和历史购买纪录。
表示层将用户通过 UI 图形界面输入的请求转换成 XML 并发送给相应的内容服务器。接着响应 XML 就会通过表示层转换成 HTML 并服务于用户会话。每一种内容层的服务都会根据需要更新其他的服务。(参见图8)例如,在用户的历史购买纪录发生变更时,价格服务器必须更新相应的用户档案服务。
图8:典型的 eRetailer 应用程序的访问点
对上述的系统来说,一个端到端测试策略的起点是分别对内容层的每种服务同时应用功能测试和可伸缩性/负载测试。XML 请求被提交给每种内容服务,而相应的响应 XML 文档则被捕获,从而对它的数据内容或者响应时间进行评估。随着这些内容服务逐个的集成到系统中,通过向 Web 服务器提交事务,功能测试和可伸缩性/负载测试也都可以在集成系统中进行。事务可以贯穿整个站点进行验证,不论是为功能测试(使用 SQL查询)还是为可伸缩性/负载测试。