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.anti-gravitydesign.com