软件测试


网站首页 | 软件测试论坛 | 软件测试培训 | 软件测试博客 | 软件测试杂志 | 软件测试沙龙 | 软件测试下载 | 软件测试顾问
业界新闻 | 软件测试人才 | 软件测试技术 | 软件测试工具 | 行业软件测试 | 软件测试管理 | 软件质量专栏 | 软件开发专栏
当前位置:首页>>软件测试工具>>Rational>>正文
使用自定义代码对数据池进行随机访问
文章出处:IBM 作者:Roger Guderian 发布时间:2006-11-23

    为了更加稳健的测试,可以用自定义代码使 Performance Tester 随机化。目前,Performance Tester 数据池中的元素只能按照顺序进行访问。这篇文章讨论了作者如何创建自定义的 Performance Tester 代码,并用随机数据访问来实现数据池。这篇文章提供的了 RPTDataPool 类,以及如何实现它的详细说明。

    注意:这篇文章适用于 IBM® Rational® Performance Tester Version 6.1.2.002

    好的测试不仅仅是重复执行相同的动作。为了更好的模拟实际用户的动作,测试人员可以利用IBM Rational Performance Tester中的数据池。这是远超出使用静态记录测试的一步,因为它允许测试为每个执行来选择不同的变量。例如,无论什么时候应用软件要求用户输入搜索条件,比如一个电影的名字,一个标题或者标题的一个部分都可以从数据池中选择。

    目前Rational Performance Tester数据池仅仅是顺序存储。在这个电影搜索的例子中,每次你运行这个测试时,相同电影名称的搜寻都是以相同的顺序来进行处理的。通过对要搜索的标题进行随机选择,可以提高测试的稳健性。

    数据池文本文件

    在i5/OS系统测试环境中,IBM测试自动化小组自从2004年就一直在将Mercury LoadRunner的脚本转换到Rational Performance Tester。为了随机化i5/OS测试的变量选择,我们创建了一个Rational Performance Tester自定义代码的包,来对数据池中的元素进行随机存储。这个执行一点都没有用到Rational Performance Tester数据池的特性。相反,Rational Performance Tester DataPool 类读取的文本文件中包含要使用的数据池条目。

    这个将选择元素随机化的数据池文件是一个每行仅包含一个元素的纯文本文件。用Rational Performance Tester来实现它的一个简单的方法,就是为测试项目的文本文件创建一个数据池文件夹。一个文件输出包括这些文本文件,因为它们被包含在Rational Performance Tester项目中。当转换Mercury LoadRunner脚本时,你可以通过LoadRunner数据文件来实现。

RPTDataPool类

    这个文本数据的文件名传给创建者,整个文件在首次访问尝试时就被读取进入了 Java™ Vector 对象。为了从这个数据池中随机重新找到一个条目,可以使用getaDataPoolItem 方法。(参见列表1。)

注意事项

    记住整个文件在测试的开始就已被读入存储器是十分重要的。巨大的数据池将会用到大量的内存,这将会降低加载和Rational Performance启动的速度。巨大的Rational Performance Tester测试数据池也会发生类似的情况。

    你可以使用每行包含多个元素的数据池,但是用户必须在这个测试的自定义代码中增加一些功能来取出单个元素。


    列表1. getaDataPoolItem 方法
    
import .io.*;
import .util.Vector;
public class RPTDataPool {
    private boolean DataPoolIsLoaded = false;
    private String DataPoolFileName;
    private Vector DataPool;
    private int DataPoolCount = 0;
 
    public RPTDataPool( String fileName )  {
        DataPoolFileName = fileName;
        DataPool = new Vector();
        DataPoolCount = fillVector( DataPoolFileName, DataPool);
        DataPoolIsLoaded = true;
        }
  
    public String getaDataPoolItem(  )  {
        if( !DataPoolIsLoaded ) {
            //System.out.println("loading:" + DataPoolFileName);
            DataPoolIsLoaded = true;
        }
        return (String) DataPool.elementAt((int)
          (Math.floor(Math.random() * (DataPoolCount))));
    }
   
    private int fillVector( String fileName, Vector FileLines) {
        // take the Datapool file and read it into a Vector
        // do this only once per test
        int fileLineCounter = 0;
       
        BufferedReader brInReader = null;
       
        // read from the file
        // try to setup a buffered reader and open the file
        try  { brInReader = new BufferedReader(new FileReader(fileName));}
        catch(Exception error)
        {
      //System.out.println("Error Opening DataPool File: " + error);
      return 0;
  }
  
  // read the file and place the lines in an array
  // get the first line of the file
  String sInLine = ReadLine(brInReader);
  
  // read through the file
  while (sInLine != null)
  {
      //System.out.println("Storing '"+ sInLine+"'");
      FileLines.addElement(sInLine);
     
      // read the next line
      sInLine = ReadLine(brInReader);
     
      fileLineCounter++;
  }
  
  // At this point, the FileLines Vector has all the lines
  from the file and fileLineCounter
  
  // indicates the max index value for the array
  return fileLineCounter;
  }
  
  // ReadLine
  // This method will read a line from a given file and return the string value
  // ********************************************************************************
  
  private String ReadLine(BufferedReader brReader) {
      String sReadLine = "";
      try  {  sReadLine = brReader.readLine();}
      catch (IOException error)
      {//System.out.println("DataPool.test Read Error: " + error);}
     
      return sReadLine;
  }
  // end of Read
  }


    在测试中实例化数据池对象

    为Rational Performance Tester测试项目创建一个特殊的类来实例化这个数据池的对象。这里,用MovieSearchDataPools来举例说明,这个电影搜索项目需要三个不同的数据池(请看列表2)


列表 2. MovieSearchDataPools 例子
    

public class MovieSearchDataPools {
    static RPTDataPool Titles =
        new RPTDataPool("C:\\Workloads\\ MovieSearch\\ Datapools\\MovieTitles.txt" );
       
    static RPTDataPool Directors =
        new RPTDataPool("C:\\Workloads\\ MovieSearch\\ Datapools\\MovieDirectors.txt" );
       
    static RPTDataPool Actors =
        new RPTDataPool("C:\\Workloads\\ MovieSearch\\ Datapools\\MovieActors.txt" );
    }


    使用自定义代码从一个数据池中取回数据

    要取回一个元素,在一个自定义代码模块中使用getaDataPoolItem方法。用这个电影搜索的例子来取回一个任意电影的标题名称,如列表3所示。


列表 3: 使用 getaDataPoolItem 方法
    
package test;

import com.ibm.rational.test.lt.kernel.services.ITestExecutionServices;

public class GenerateRandomTitle implements
    com.ibm.rational.test.lt.kernel.custom.ICustomCode2 {
   
    /**
    * Instances of this will be created using the no-arg constructor.
    */
    public GenerateRandomTitle() { } 
   
    /**
    * For description of ICustomCode2 and ITestExecutionServices interfaces,
    * see doc located at 

/rpt_prod/eclipse/plugins/com.ibm.rational.test.lt.kernel_/pubdoc
    */
   
public String exec(ITestExecutionServices tes, String[] args) {
    return MovieSearchDataPools.Titles.getaDataPoolItem();
    }
   
}


    你可以使用来自搜索电影的HTTP请求中的自定义代码模块中的输出结果。


站内搜索
相关文章
◎在VU脚本中使用HTTP连接
◎Robot如何测试帮助c++程序员识别自定义或第三方控件
◎用Robot写Java代理(二)
◎用Robot写Java代理(一)
◎浅谈RFT
◎如何在Robot脚本中使用Object Data
◎Rational Robot 常用语句
◎Rational Robot项目移植
◎Rational 识别 Delphi TDBGrid的解决方法
◎Rational robot 识别对象的方法
◎使用IBM Rational的测试理念成功打造测试团队
◎使用Rational的测试理念
◎Rational系列产品大概的介绍
◎Robot压力测试实例
◎理解Rational分析三层结构观点
◎robot函数实例讲解(二)
◎robot函数实例讲解(一)
◎IBM Rational XDE tester使用指南
◎详解 Rational ClearCase中的lost+found目录
◎关于Rational与软件质量保证
◎Robot手工编写GUI脚本如何获取对象识别方法和属性
◎rational对象脚本命令
◎Robot GUI脚本操作SQL SERVER数据库
◎GUI录制回放测试方法缺点
◎Rational中DataPool的介绍与实际应用-续(2)
◎Rational中DataPool的介绍与实际应用-续(1)
◎Rational中DataPool的介绍与实际应用
◎ClearCase迁移中的一些经验
◎IBM Rational ClearCase 视图全攻略
◎浅谈ClearQuest 2002.05 建库指南
◎Rational ClearQuest介绍
◎数据池(DATAPOOL)专题
◎使用IBM Rational PurifyPlus测试J2EE应用程序
◎使用Rational Robot测试含有数据关联的Web应用
◎IBM Rational Robot
◎用Rational Functional Tester创建随需应变的自动测试脚本
◎解决Grid自动化测试的思路
◎Base ClearCase与ClearQuest的集成
◎IBM Rational助您轻松完成基于J2EE的Web应用系统的性能测试和性能优化
◎IBM Rational 助您轻松完成自动化功能测试
◎使用 Rational PureCoverage 诊断 C/C++ 程序覆盖信息和用户环境的集成
◎Rational XDE tester使用指南
◎Rational 完成自动化功能测试
◎定制ClearQuest以通过所有者、角色或组来分隔记录
热门文章
◎IBM Rational Robot
◎Rational 完成自动化功能测试
◎Rational系列产品大概的介绍
◎Robot压力测试实例
◎Rational ClearQuest介绍
◎用Rational Functional Tester创建随需应变的自动测试脚本
◎robot函数实例讲解(一)
◎Robot手工编写GUI脚本如何获取对象识别方法和属性
◎关于Rational与软件质量保证
◎IBM Rational 助您轻松完成自动化功能测试
◎IBM Rational XDE tester使用指南
◎robot函数实例讲解(二)
◎使用 Rational PureCoverage 诊断 C/C++ 程序覆盖信息和用户环境的集成
◎rational对象脚本命令
◎GUI录制回放测试方法缺点
◎IBM Rational ClearCase 视图全攻略
◎使用IBM Rational的测试理念成功打造测试团队
◎数据池(DATAPOOL)专题
◎详解 Rational ClearCase中的lost+found目录
◎IBM Rational助您轻松完成基于J2EE的Web应用系统的性能测试和性能优化
◎Base ClearCase与ClearQuest的集成
◎理解Rational分析三层结构观点
◎浅谈ClearQuest 2002.05 建库指南
◎使用IBM Rational PurifyPlus测试J2EE应用程序
◎Rational中DataPool的介绍与实际应用
◎使用Rational的测试理念
◎Robot GUI脚本操作SQL SERVER数据库
◎ClearCase迁移中的一些经验
◎Rational中DataPool的介绍与实际应用-续(2)
◎Rational Robot 常用语句
◎Rational robot 识别对象的方法
◎使用Rational Robot测试含有数据关联的Web应用
◎Rational中DataPool的介绍与实际应用-续(1)
◎定制ClearQuest以通过所有者、角色或组来分隔记录
◎Rational XDE tester使用指南
◎浅谈RFT
◎解决Grid自动化测试的思路
◎Robot如何测试帮助c++程序员识别自定义或第三方控件
◎Rational Robot项目移植
◎用Robot写Java代理(一)
◎Rational 识别 Delphi TDBGrid的解决方法
◎如何在Robot脚本中使用Object Data
◎用Robot写Java代理(二)
◎在VU脚本中使用HTTP连接
◎使用Robot连接SQL的例子
◎使用Robot输入清单
◎Robot进行数据库的并发测试

Google提供的广告