关闭

对 Rational Performance Tester 数据池的改进

发表于:2007-11-28 15:22

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:聂健    来源:网络转载

  Rational Performance Teser(RPT)是专门针对 B/S架构和专用系统(SAP,Citrix 等)进行压力测试的工具。RPT 基于开放的 TPTP 平台和 Java 语言其实对我们的测试提供了很大的扩展性。本文从数据池的角度出发,结合实际环境中遇到的一些问题,来扩展 RPT 的数据驱动能力。
前言

  在性能测试中,我们往往遇到这样的一些问题,比如需要通过不同的用户进行登录操作,或者需要动态的输入数据,在测试工具中往往我们是通过数据池来进行完成的。比较全面的数据池的设计往往会考虑用户数据的来源,比如文件,数据库等多种形式,但其实如果采用直接映射数据库中的某些列来进行实现,虽然在操作上会省下很多数据加工的时间,但在实际运行过场中会有诸多缺点,主要体现在每个用户每次获取数据时就需要消耗大量的时间,因为往往数据库在远程的服务器上而非本地,如果频繁的交互会使真正需要了解的响应时间大打折扣。出于测试尽可能反映真实的应用响应时间的考虑,Rational Performance Tester 采用了文件的方式来进行数据的导入。

Rational Performance Tester 内置的 DataPool 的实现机制

  Rational Performance Tester 内置的数据池采用了 TPTP 的前身 Hyades 测试框架的实现方式,也就是通过 EMF 进行实现。其设计图为:


图 1: 设计图
设计图

其中比较主要的几个概念是:

Variable:
主要指一个列,通常包含一个名字和建议的类型
Record:
行,包含多列的数据
Cell:
数据块,对应的是某行某列
EquivalenceClass:
等价类,数据池中记录的逻辑组合
Datapool:
数据池

  往往我们在通过 RPT 的界面建立数据池或者从 CSV 文件导入数据池时,会发现在我们的 workspaces 项目的根目录下中生成了一个 .datapool 的文件,把文件通过 winrar 解开,可以看到是一个 xmi 文件,格式如下:

<?xml version="1.0" encoding="UTF-8"?>
<Common_Datapool:DPLDatapool xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" 
    xmlns:Common_Datapool="http://www.eclipse.org/hyades/models/common/datapool.xmi" 
    id="E123A884D00625FC60097F300AD111DC" name="aa">
    <equivalenceClasses id="E123A884D00625FC6021E9300AD111DC" name="String">
        <records>
            <cells value="&lt;Literal>eric&lt;/Literal>" 
                variable= "E123A884D00625FC600C8C700AD111DC "/>
            <cells value="&lt;Literal>ericnie&lt;/Literal>" 
                variable="E123A884D00625FC602062900AD111DC"/>
        </records>
        <records>
            <cells value="&lt;Literal>eric1&lt;/Literal>" 
                variable="E123A884D00625FC600C8C700AD111DC"/>
            <cells value="&lt;Literal>ericnie1&lt;/Literal>" 
                variable="E123A884D00625FC602062900AD111DC"/>
        </records>
        <records>
            <cells value="&lt;Literal>eric2&lt;/Literal>" 
                variable="E123A884D00625FC600C8C700AD111DC"/>
            <cells value="&lt;Literal>ericnie2&lt;/Literal>" 
                variable="E123A884D00625FC602062900AD111DC"/>
        </records>
        <records>
            <cells variable="E123A884D00625FC600C8C700AD111DC"/>
            <cells variable="E123A884D00625FC602062900AD111DC"/>
        </records>
    </equivalenceClasses>
    <datapoolSpec id="E123A884D00625FC60097F310AD111DC">
        <variables id="E123A884D00625FC600C8C700AD111DC" name="name" type="String”/>
        <variables id="E123A884D00625FC602062900AD111DC" name="password" 
			type="String”/>
    </datapoolSpec>
</Common_Datapool:DPLDatapool>

  这个 xmi 文件实际就是我们数据池实例 aa 的序列化后的形式,系统在实际调用时会将其反序列化同时将相关的数据 load 到内存中去。在 Rational Performance Tester 中打开这个 xmi 文件,可以清晰的看到它的层次结构,同时可以对它进行修改。


图 2: 层次结构
层次结构

  采用 EMF 设计的一个很直接的好处是,系统可以自动的根据模型生成代码,同时实现了 UML 模型,XML Schema, 注释过的 Java 接口表现模型的统一。但在实际环境中,采用 Rational Performance Tester 内置的 DataPool 还是有很多不太方便的地方,比如:

  1. 要经常对文件中的数据进行变化,然后再重新测试时

    很多时候测试完后,数据就暂时没用了,因为状态已经更新了,为此需要对测试数据进行替换,但在 RPT 目前的这种序列化反序列化的机制中,要实现这一点并不容易,所以体现在界面中的操作实际上是比较繁琐的,表现为:

    • 要重新加入一个新的 Pool
    • 需要对原来的变量去掉关联
    • 关联新的 Pool 中的变量

    如果你的变量比较多,还是非常繁琐的,而且不是一种最好的解决办法。

  2. 当测试数据很大,比如文件大概 50M 或更多时

    这时候内置的机制会产生一些问题,装载数据时比较慢。这在早期的 6.x 版本中经常遇到,但现在 70 有没有这个问题倒是需要看看底层机制是否有更改。

  正因为上面的问题,同时还频繁在实际的测试过程中遇到,因此找到一种更好的替代方案对于实际的项目更加迫切,好在 RPT 建立在 TPTP 的架构上,也就意味着建立在纯粹的 Java 的实现机制下,因此提供了让人很方便的插入 Java 代码的方式,使得很多的扩展和增强成为可能。下面我们就来谈谈如何解决这两个问题。

31/3123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号