对 Rational Performance Tester 数据池的改进(3)

发表于:2012-03-26来源:未知作者:娃娃点击数: 标签:
PoolLoad.java: 传入文件位置,初始化 RPTDataPool 文件只包括一行,就是调用 RPTDataPool 的构造函数: static RPTDataPool pool1 = new RPTDataPool(c:\\pool1.txt); getLine.java:

  PoolLoad.java: 传入文件位置,初始化 RPTDataPool

  文件只包括一行,就是调用 RPTDataPool 的构造函数:

static RPTDataPool pool1 = new RPTDataPool("c:\\pool1.txt");

  getLine.java: 每个 RPT 的 Test 中,在需要数据池前需要插入的代码,用于把当前用户对应的数据池记录通过一行返回给 Test

public String exec(ITestExecutionServices tes, String[] args) {
    // 调用 PoolLoad 中初始化的 pool1 的 getDataPoolItemLine 的方法返回当前行然后把 line 返回给 Test
    String line = PoolLoad.pool1.getaDataPoolItemLine();
    return line;
}

  getName.java: 从返回的行中取出需要的字段 ,每个变量对应着一个 get 方法,比如 getName, getPassword 等 。

public String exec(ITestExecutionServices tes, String[] args) {
    // 从参数中读出记录行到 line
    StringTokenizer st = new StringTokenizer(line,",");// 转换成 StringTokenizer
    while (st.hasMoreTokens()) {
    if (i == index) { // 匹配需要的字段
        name = st.nextToken(); // 把相应的字段赋值
        break;
    }
    i++;
}

  关键代码的解释:

  RPTDataPool.java:主要用于将记录以分页的形式从文件中读入到 ArrayList 中

  首先定义需要的变量:

Private String DataPoolFileName;// 定义数据池文件存放的位置,运行时会由 PoolLoad.java 装入
        private ArrayList DataPool;// 存放每次从数据池中读出的记录
        private int cursor = 0;// 当前记录的光标
        static private int pageno = 1;// 根据每页的大小 (PageSize), 目前光标停在哪页
        private int pagesize = 500;// 每次 load 进 DataPool 的记录数量

  构造函数 RPTDataPool:

  调用 fillPageByLine 方法,把文件的第一个页面存入到变量 DataPool 中来。

public RPTDataPool(String fileName ) {
    
    ……
    
    fillPageByLine( DataPoolFileName, DataPool, 1);
}        

  fillPageByLine: 每次到了页面的记录末尾,都会被调用,从而把相关的记录读到 DataPool 中来。

private boolean fillPageByLine(String fileName, ArrayList FileLines, int Pageno) {
    // 通过 ReadLine 读文件 ;
    while (line !=null) {
    // 当前行数在关注的页面中, pageno 通过参数传入
    if ((lineno>=pagesize*(Pageno-1))&&(lineno<pagesize*Pageno)) {
        FileLines.add(line);// 把当前记录加入 ArrayList
        line=br.readLine();// 记录下移
        lineno++;// 行数增加
    } else if (lineno<pagesize*(Pageno-1)) {// 当前行数还没到关注的页面
        line=br.readLine();// 记录下移
        lineno++;// 行数增加
    } else if (lineno >= pagesize*(Pageno)) {// 当前行数超过关注的页面
        break;// 退出
    }
}

  PoolLoad.java: 传入文件位置,初始化 RPTDataPool

  文件只包括一行,就是调用 RPTDataPool 的构造函数:

static RPTDataPool pool1 = new RPTDataPool("c:\\pool1.txt");

  getLine.java: 每个 RPT 的 Test 中,在需要数据池前需要插入的代码,用于把当前用户对应的数据池记录通过一行返回给 Test

public String exec(ITestExecutionServices tes, String[] args) {
    // 调用 PoolLoad 中初始化的 pool1 的 getDataPoolItemLine 的方法返回当前行然后把 line 返回给 Test
    String line = PoolLoad.pool1.getaDataPoolItemLine();
    return line;
}

  getName.java: 从返回的行中取出需要的字段 ,每个变量对应着一个 get 方法,比如 getName, getPassword 等 。

public String exec(ITestExecutionServices tes, String[] args) {
    // 从参数中读出记录行到 line
    StringTokenizer st = new StringTokenizer(line,",");// 转换成 StringTokenizer
    while (st.hasMoreTokens()) {
    if (i == index) { // 匹配需要的字段
        name = st.nextToken(); // 把相应的字段赋值
        break;
    }
    i++;
}

原文转自:http://www.ltesting.net