1. 錄制登錄腳本
步驟 1. 啟動 RPT 中的腳本錄制器錄制登錄腳本,待由 RPT 啟動的瀏覽器打開之后,關閉該瀏覽器的局域網代理服務器。
IE 設置的路徑:Tools -> Connections -> LAN setting -> Proxy server
圖 1. 瀏覽器中局域網設置界面
步驟 2. 啟動另外一個瀏覽器實例,開啟局域網 Proxy server。然后在這個瀏覽器中錄制登錄腳本。
步驟 3. 錄制完登錄腳本后,停止錄制(關閉 RPT 啟動的那個瀏覽器或者直接點擊停止錄制按鈕)
圖 2. RPT 客戶端中停止錄制按鈕
2. 錄制業務邏輯腳本
步驟 4. 啟動錄制業務邏輯腳本錄制。操作同步驟 1
步驟 5. 開啟之前手動打開瀏覽器的 Proxy server,開始在這個瀏覽器中繼續錄制業務邏輯腳本。
步驟 6。錄制完業務邏輯腳本后,停止錄制。操作同步驟 3
3. 錄制注銷腳本
步驟 7. 錄制過程同步驟 4,步驟 5,步驟 6,只是錄制腳本為注銷
4. 組合腳本,添加數據關聯
步驟 8. 添加自定義代碼維護數據關聯關系
在登錄的測試項中向 RPT 的 DataArea 中緩存數據。
RPT 的 Data Area 中的數據有三種生命周期,第一個是 TEST 域,存儲數據的生命周期僅限于自定義代碼所在的測試項。第二個是 VIRTUALUSER 域,存儲數據的生命周期等同于執行到該代碼段的虛擬用戶的生命周期。第三個是 ENGINE 域,整個測試代理中運行的測試均可以使用 ENGINE 域中的數據。
由于登錄,業務邏輯,注銷被分別錄制為 3 個測試項,3 個測試項之間會用一個測試調度串聯起來,因此選擇 VIRTUALUSER 域的 Data Area 來在同一個用戶的測試腳本上下文間傳遞信息。
清單 1. 在同一個用戶的測試腳本上下文間傳遞信息
public String exec(ITestExecutionServices tes, String[] args) { String acount = args[0]; IDataArea dataArea = tes.findDataArea(IDataArea.VIRTUALUSER); dataArea.put(user_KEY, acount); return null; } |
業務邏輯的測試項從 DataArea 中取得數據
清單 2. 從 DataArea 中取得數據
public String exec(ITestExecutionServices tes, String[] args) { IDataArea dataArea = tes.findDataArea(IDataArea.VIRTUALUSER); String account = (String) dataArea.get(user_KEY); return ACCOUNT; } |
3.2 通過自定義代碼實現腳本間同步
用 RPT 編寫的測試調度中引用的不同測試項之間通常會存在某種數據層的制約關系。比如,測試項 1 需要給一個變量賦于一個值,測試項 2 則需要從這個變量中讀一個值。兩個測試項分別被不同的用戶執行,在最開始時,肯定是執行測試項 1 的用戶先執行,之后是執行測試項 2 的用戶,但是由于測試項在調度中都是無限重復的執行下去,數據總會有不同步的現象,即測試項 2 先于測試項 1 被執行,此時會造成整個測試場景混亂的情況。
本小節介紹的方法是通過 ENGINE 域的 DataArea 來實現測試調度中不同腳本間的數據同步從而保證整個測試場景長時間的正常執行。
下面是一個場景,測試項 1 提交一個申請,并設置了一個提交標識。測試項 2 等待申請,判斷是否有提交申請標識,若有則處理該申請并停止循環。
測試項 1 提交一個申請。通過自定義代碼“test.ApplyFor”將提交標志信息存放到 ENGINE 域的 DataArea 中,測試腳本如下:
圖 3. 測試項 1 示例
自定義代碼“test.ApplyFor”如下:
清單 3. 自定義代碼“test.ApplyFor”
public String exec(ITestExecutionServices tes, String[] args) { IDataArea eDataArea = tes.findDataArea(IDataArea.ENGINE); String item = args[0]; eDataArea.put(ITEM_KEY, ITEM); return null; } |
測試項 2 審批測試項 1 的申請。首先從 ENGINE 域的 DataArea 取得提交申請標志信息,如果申請標志信息為空,則等待一段時間,再繼續提取提交申請標志信息,判斷是否為空,如此循環下去,直到申請標志不為空則停止循環。
圖 4. 測試項 2 示例
判斷申請標志是否為空的自定義代碼“test.CheckApply”:
清單 4. 自定義代碼“test.CheckApply”
public String exec(ITestExecutionServices tes, String[] args) { IDataArea eDataArea = tes.findDataArea(IDataArea.ENGINE); String item = (String) eDataArea.get(ApplyFor.ITEM_KEY); if (item != null) return "PASS"; return "FAIL"; } |
原文轉自:http://www.ibm.com/developerworks/cn/rational/r-cn-rptlongrun/index.html