首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

使用 Java 擴充 Rational Performance Tester:從程式設計師視角打造客製化效能測試

     編輯:Java 相關知識

前言:Rational 測試工具的擴充能力

新版 IBM Rational 測試工具著重讓非程式設計師也能輕鬆使用。本文從 Java 程式設計師視角,探討如何撰寫針對 Rational Performance Tester (RPT) 的客製化程式碼,善用 Java 物件導向特性與 Eclipse 基礎架構。基於 Eclipse 的 RPT 與 Rational Functional Tester (RFT) 擁有強大擴充能力,採用 Java 撰寫客製化程式碼,是開發複雜彈性測試程式的明智選擇。

RFT vs RPT 的擴充差異

  • RFT:針對 Web/Java 應用,腳本直接生成 Java,提供客戶端內部 Java 物件直接存取,內建 SuperHelper 類別擴充 Helper
  • RPT:效能測試設計產生最小負載,無冗餘結果;客戶端物件對映非關鍵構件,故無類似 SuperHelper 的內建擴充模型

本文討論 RPT 兩大強力擴充點:透過超類別進行物件擴充、透過靜態方法使用可重用設施。範例實現測試間變數持久化,採無程式碼執行方式,非程式設計師也能輕鬆重用。

客製化程式碼環境建置

RPT 預設使用專案 src 資料夾下的 test 套件存放客製化程式碼,亦為動態生成程式碼(測試、排程)的位置。為結構化管理,建議採標準 Java 專案命名規範:

套件名稱說明
com.ibm.rpt.template模板檔案
com.ibm.rpt.util彈性可重用 Java 類別
com.yourco.example.var本文範例相關套件

命名規範建議:yourSuffix.yourCompanyName.applicationName.var(var 表變數相關)。

範例專案結構

下載 rpt_ext.zip 解壓至 src,結構如下:

範例目錄結構 Java 透視圖 Package Explorer

變數持久化核心機制

測試中變數持久化通常包含動態生成值,需保留至最後測試階段。RPT 使用 IDataArea 類別保留值,實例化於虛擬使用者層級確保資料隔離。問題在於「Arguments」區域僅允許傳值,無名稱關聯。

解決方案:每個變數建立獨立類別

  • 類別命名參考後續測試需套用的變數名
  • 腳本存取通用 Java 類別 VariablePersister.java 執行持久化功能
  • 優勢:變數需變更時,每個變數可獨立擴充,顯著增加/減少

VariablePersister 實作(字串版)


public class VariablePersister(ITestExecutionServices testExecutionServices,
    String aVariableKey, String aVariableValue) {
    variableKey = aVariableKey;
    virtualUserDataArea = testExecutionServices.findDataArea(IDataArea.VIRTUALUSER);
    if (aVariableValue != null) {
        variableValue = aVariableValue;
        virtualUserDataArea.put(variableKey, variableValue);
    } else {
        try {
            variableValue = (String) virtualUserDataArea.get(variableKey);
        } catch (NullPointerException e) {
            variableValue = EMPTY_STRING;
            virtualUserDataArea.put(variableKey, variableValue);
        }
    }
}

提供 getVariableValue()(字串)與 getVariableContent()(物件)避免 NullPointerException。值維護於虛擬使用者 IDataArea,無跨使用者污染風險。

建立與使用字串持久化變數(無程式碼模式)

步驟 1:建立變數類別

  1. Java 透視圖 > Package Explorer
  2. 從 com.ibm.rpt.template 複製 PersistentVariableStringTemplate.java 至 com.yourco.example.var
  3. 重命名為目標變數名(如 SAMPLE_VAR1)重命名模板 重命名介面

步驟 2:取得應用變數值

  1. 錄製測試場景(如 Merriam-Webster 每日一字)每日一字頁面
  2. 開啟回應內容,定位唯一 HTML 元素(<span class="headword">debonair</span>)回應內容
  3. 右鍵建立參考,於 Test Data Sources 確認新參考值資料來源參考

步驟 3:插入客製化程式碼設定變數

  1. Test Contents > 主 URL 回應下 > Insert > Custom Code
  2. Class Name 輸入 com.yourco.example.var.SAMPLE_VAR1插入客製化程式碼
  3. Arguments > Add > 切換至 URL 入口 > 選擇剛建立的參考值選擇參數值

SAMPLE_VAR1 現設為動態值。測試元素細節

步驟 4:引用持久化變數

  1. 切換至 URL 定義,檢查 Data 區域合適值持久化變數值
  2. 選擇整個字詞,右鍵 Substitute from > Custom Code: com.yourco.example.var.SAMPLE_VAR1

未來測試將使用新發現值替換原值。

陣列型持久化變數:循序與隨機模板

範本類別 Javadoc 說明:

模板說明
PersistentVariableStringTemplate簡單字串變數
PersistentVariableSequentialTemplateString[] 循序返回,循環至測試結束
PersistentVariableRandomTemplateString[] 隨機返回

皆使用 com.ibm.rpt.util.VariablePersister 類別,透過 IDataArea.put/get 實作。

SuperObject 超類別架構


public abstract class SuperObject implements ICustomCode2 {
    public String variableKey;
    public String[] variableValue = null;
    public String pointerKey;
    public Integer pointerValue = null;
    public ITestExecutionServices virtualUserTestExecutionServices;
    public IDataArea virtualUserDataArea;
    public static final String POINTER_SUFFIX = "_POINTER";

    public String exec(ITestExecutionServices arg0, String[] arg1) { return null; }
    // 後續方法支援 VariablePersister 模板...
    public void putMessage(String message) {
        virtualUserTestExecutionServices.getTestLogManager().reportMessage(message);
    }
}
  • 循序陣列:VariablePersister 建立 _POINTER 後綴變數,每次存取呼叫 getNextPointerValue() 循環陣列
  • 隨機陣列:呼叫 getRandomValue(String[]),使用 NumericGenerator.getRandomInt() 準隨機產生器

範例:貨幣兌換效能測試

  1. 建立 SAMPLE_VAR2(PersistentVariableSequentialTemplate)
  2. 插入客製化程式碼,Class Name 設為 com.yourco.example.var.SAMPLE_VAR2貨幣效能測試
  3. Arguments 添加多值建立陣列選擇貨幣參數
  4. 展開 XE.com Conversion 請求,替換第二貨幣類型為 SAMPLE_VAR2選擇貨幣 URL 顯示貨幣值

測試執行期間將循環陣列值。PersistentVariableRandomTemplate 同理實現隨機存取。

靜態方法重用:NumericGenerator 產生隨機貨幣值

靜態方法雖非純物件導向,但在特定情境下最高效。

步驟 1:建立 SAMPLE_VAR3 並修改程式碼


// 修改前
public class SAMPLE_VAR3 extends ICustomCode2 { ... }

// 修改後
public class SAMPLE_VAR3 extends SuperObject {
    public String exec(ITestExecutionServices tes, String[] args) {
        return NumericGenerator.getRandomCurrency("5000");
    }
}

貨幣轉換

步驟 2:修正導入

錯誤提示 NumericGenerator cannot be resolved,Quick Fix 導入 com.ibm.rpt.util.NumericGenerator。快速修正導入

步驟 3:替換請求資料

於 www.xe.com/ucc/convert.cgi 請求資料中,Amount= 後的 1 替換為 SAMPLE_VAR3。每次測試將獲得 0-5000 間準隨機貨幣值。

NumericGenerator 核心實作


public static String getRandomCurrency(String high) {
    refreshRandom();
    double randomDouble = Math.round(random.nextDouble() * Double.parseDouble(high));
    return currencyDecimalFormat.format(randomDouble).toString();
}
private static void refreshRandom() {
    random.setSeed(System.currentTimeMillis());
}

使用 java.util.Random 搭配 System.currentTimeMillis() 種子,DecimalFormat 格式化為貨幣格式。

總結與程式碼下載

範例雖簡單,展示透過 Java 操作擴充測試功能:降低冗餘程式碼、減少長期維護成本。RPT 簡單客製化模型易於擴充,善用 Java 超類別與可重用組件打造良好測試環境。

程式碼下載:developerWorks 頁面

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved