停止循環的自定義代碼“test.JumpOutLoop”, 將 CheckApply 的返回結果做為 JumpOutLoop 的輸入參數:
清單 5. 自定義代碼“test.JumpOutLoop”
public String exec(ITestExecutionServices tes, String[] args) { String result = args[0]; // if CheckApply is pass, break the loop if ("PASS".equals(result)) { tes.getLoopControl().breakLoop(); } return null; } |
該場景的測試調度如下:
圖 5. 測試調度示例
通常這種存在著數據或邏輯的制約關系而且還必須由不同的用戶執行的測試項之間的數據同步可以參考本節所介紹的方法。
3.3 通過自定義代碼實現腳本執行情況監測
在腳本運行過程中,RPT 只能通過查看回放頁面與錄制頁面的響應代號是否一致來判斷是否回放成功,并不能檢驗數據是否正確。在持續性測試中,通常長時間運行的程序會對一些數據造成影響。為了更好的監控程序是否正常的運行,僅靠 RPT 提供的頁面響應代號是不夠的。我們需要實時地監控程序中處理的一些數據是否正確,因此需要添加一些自定義代碼。下面是一段實例代碼將一些重要的數據實時地寫入自定義的日志文件中,以監控監腳本執行情況。
下面的例子中,有 2 個參數傳遞給該自定義代碼的執行函數,分別是頁面響應中的關鍵檢測數據,此處為登錄帳號(account)和該帳號剩余的工作項的數目。每次執行該測試項,就有一個或兩個工作項數目減少,證明腳本正常執行即該登錄帳戶成功處理一個或兩個工作項。
RPT 的持續性測試腳本中通常使用無限循環來執行相應的測試項組合。因此,在日志文件中,下面的代碼段利用了 DataArea 記錄下了當前循環的次數。同時通過 getScriptName 方法取到腳本的名稱打印到日志當中。
清單 6. 利用了 DataArea 記錄下了當前循環的次數
public String exec(ITestExecutionServices tes, String[] args) { ITestLogManager testlog = tes.getTestLogManager(); IDataArea dataArea = tes.findDataArea(IDataArea.VIRTUALUSER); String account = args[0]; String itemnumber = args[1]; String worklist = ""; // put loop count into DataArea String loopNumber = (String) dataArea.get(loopNumber_KEY); if (loopNumber == null) { loopNumber = "1"; } else { loopNumber = String.valueOf(Long.parseLong(loopNumber) + 1); } dataArea.put(loopNumber_KEY, loopNumber); // get script Name worklist = getScriptName(tes); // write running information to log logInfo(account, loopNumber, itemnumber, worklist, testlog); return null; } |
寫入本地日志方法如下,其中還添加了時間戳信息:
清單 7. 在同一個用戶的測試腳本上下文間傳遞信息
private void logInfo(String account, String loopNumber, String itemnumber, String worklist, ITestLogManager testlog) { FileWriter fw = null; try { fw = new FileWriter(runProgress, true); fw.write("[" + new Date() + "] User:" + account + " Loop Number:" + loopNumber + " WorkList:" + worklist + " Item Number:" + itemnumber + "\n"); fw.flush(); } catch (IOException e) { testlog.reportMessage("Write to " + runProgress + " error: " + itemnumber + "\n"); } finally { if (fw != null) { try { fw.close(); } catch (IOException e) { testlog.reportMessage("Write to " + runProgress + " error: " + e.getMessage()); } } } |
下面是運行該測試后得到的監控日志文件內容:
圖 6. 測試結果日志文件示例
(查看大圖)
3.4 通過自定義的代碼來取代部分 RPT 的默認變量關聯
通常持續性測試所使用的腳本不是在待測試軟件的最新版本當中錄制,但隨著版本的更新,RPT 錄制腳本往往會因為頁面內容的變動導致已建立的數據關聯關系失效而使腳本回放失敗。此時,重新錄制腳本并重新建立變量關聯關系是一個繁瑣的工作。下面介紹的方法是通過已有的腳本,用自定義代碼來取代 RPT 設置的變量關聯關系來使 RPT 腳本可以在新的 Build 當中成功回放。
下面是一個實例,腳本是某應用前一個版本錄制的。由于版本變更,“ApprovePage”的主請求的響應和以前版本不一樣,導致從該頁面取得數據的關聯失效。為了避免重錄腳本,添加自定義代碼“test.FetchInv”從“ApprovePage”主請求的響應中取得數據關聯的數據,然后修改后面請求對該數據的關聯。
原文轉自:http://www.ibm.com/developerworks/cn/rational/r-cn-rptlongrun/index.html