完成插裝工作以后,測試人員可以按照測試計劃運行測試用例。 EMMA 將在測試執行的過程中記錄代碼執行信息并將結果記錄在內存中。每次當 JVM 停止時,內存中記錄的執行信息將被清除并被保存到 “*.ec” 的文件中。但是在實際測試的過程中, JVM 的停止很難控制,因此測試人員可以定時手動將內存中執行信息寫出。在這種情況下,內存中的記錄被輸出,但是內存中的內容不被清除。清單5-7介紹了收集覆蓋率信息以及生成覆蓋率信息報告的命令。
清單 6. 從遠程機器上收集覆蓋率信息
清單 7. 從本地收集覆蓋率信息
這樣收集到的信息被保存在 “coverage.ec” 中, “coverage.ec” 是二進制格式的文件,因此很難被用來查看覆蓋率結果。
清單 8. 生成覆蓋率報告
在生成覆蓋率報告的過程中,測試人員可以根據測試要求通過 “Dreport.metrics” 參數設定滿意的覆蓋率標準。在示例命令中設定了類覆蓋率的滿意度為80%。
測試報告可以以 HTML ,文本和 XML 三種格式輸出。圖1、圖2為 HTML 格式的報告的例子。覆蓋率的報告是以包、類、方法三級單位組織的。圖1是 Index 類的執行情況,其中紅顏色代表該覆蓋率未達到滿意的覆蓋率標準。圖2則是包 org.numberquiz 中 QuizBran 類的執行情況,從總體看,類覆蓋率為100%,方法為91%。在附錄中可以看到示例程序完整的測試覆蓋率報告。
圖 1. Index 測試報告
圖 2. QuizBran 測試報告
在功能測試過程中,為每個單獨的測試用例生成獨立的覆蓋率報告能夠給測試過程帶來很大的幫助:
當測試用例失敗或者拋出異常時,可以通過覆蓋率報告找到該測試用例對應的代碼,這樣就可以為測試人員提供可能出錯代碼的范圍。這一報告不僅可以幫助測試人員在提交問題時更加詳細的描述錯誤,提供更詳細的信息,還可以為開發人員跟蹤問題提供線索,縮短解決問題的周期。
測試人員可以從獨立的測試報告中獲得代碼和功能模塊的對應關系,更好的理解測試用例的作用。
獨立的測試報告可以幫助測試人員改進測試用例的設計,刪除重復的測試用例,將覆蓋點較多的測試用例進行拆分。
為得到獨立的測試報告,需要在每次執行測試用例前,將內存中的執行信息清除。目前有兩種方法支持清除記錄,測試人員可在測試過程中,根據需要選擇合適的方法。
每次運行完一個測試用例,重啟 JVM 。這種方法能夠完整的清除內存中記錄的執行信息,但是每次重啟 JVM 給測試帶來很多麻煩。
使用 “coverage.reset” 命令,該命令可以在不重啟 JVM 的情況下,清除內存中記錄的方法、塊、行的執行信息,但是無法清除類覆蓋信息。如果用戶關注的重點在方法的覆蓋信息上,可以選擇這種方法。
清單 9. 清除內存中覆蓋率信息命令
合并覆蓋率結果
完成所用的測試用例后,測試覆蓋信息可以被合并在一起,得到整個測試的覆蓋報告。覆蓋率結果文件通過 “merge” 命令合并 “*.ec” 文件實現的。
另外,由于 EMMA 中測試覆蓋率是通過與 “*.em” 文件關聯獲得代碼信息的,因此當代碼發生變化時,已經運行過的測試不必完全重復,只需將得到的 “*.ec” 文件合并(新得到的 “*.ec” 文件放在后面),然后關聯最新的 “*.em” 文件即可得到代碼變化后的覆蓋率信息,這方便了 EMMA 支持版本變化的測試。在生成新的測試報告的時候,需要注意 “*.ec” 的時間一定要晚于 “*.em” 文件。
清單 9. 合并覆蓋率結果命令
原文轉自:http://www.testwo.com/article/591