




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、使用 EMMA 獲得功能測試覆蓋率引言EMMA 是一個開源、面向 Java 程序測試覆蓋率收集和報告工具。它通過對編譯后的 Java 字節(jié)碼文件進行插裝,在測試執(zhí)行過程中收集覆蓋率信息,并通過支持多種報表格式對覆蓋率結果進行展示。 EMMA 所使用的字節(jié)碼插裝不僅保證 EMMA 不會給源代碼帶來“臟代碼”,還確保 EMMA 擺脫了源代碼的束縛,這一特點使 EMMA 應用于功能測試成為了可能。注意:· 在測試中使用 EMMA 收集覆蓋率信息之前,需要從 EMMA 的網站上下載 emma.jar 包。在這個網站上還可以得到更多關于 EMMA 的資源。· EMMA 只能收集 Ja
2、va 代碼的覆蓋率。文章附錄提供一個樣例代碼,包含一個 WAR 包和一個 JAR 包,其中需要將 WAR 包安裝在WebSphere Portal Server 上運行。在實際測試過程中,可以將它們替換成對應的被測對象。功能測試中使用 EMMA 的優(yōu)點EMMA 收集的數據包括類覆蓋率、方法覆蓋率、塊覆蓋率和行覆蓋率,這些數據以包為單位進行組織。大多數功能測試中,測試人員一般不能直接得到被測源代碼,源代碼也不是測試人員關心的重點。在具體的測試過程中,功能測試人員一般以一個有意義的功能模塊作為測試關心的重點,而能夠反映一定功能含義的類和方法的覆蓋率在功能測試中更有價值。因此,在功能測試中,類覆蓋率
3、和方法覆蓋率是測試人員關心的重點,行和塊覆蓋率則作為測試的參考。測試覆蓋率報告中包含了兩個方面的內容,測試覆蓋的部分和未被測試覆蓋的部分。盡管百分之百的測試覆蓋率不能代表被測對象完全沒有問題,但是測試覆蓋的部分以及覆蓋比率可以增加測試者對測試工作的信心,指導測試執(zhí)行以及測試的方向。另一方面,當測試用例執(zhí)行出現異常時,針對每個測試用例的測試報告還可以提供可疑代碼的范圍,為代碼糾錯提供幫助。測試覆蓋率報告中未覆蓋的部分也同樣有價值:· 表明測試可能不完整,有些功能、代碼沒有被測試覆蓋到。· 為測試用例的設計提供指導建議。在覆蓋率報告的指導下,測試人員有目的地與開發(fā)人員進行討論,
4、確定未覆蓋部分是測試的空白還是不需要測試的部分。· 幫助開發(fā)人員發(fā)現無用代碼,為修改,完善代碼提供依據。在使用 EMMA 獲得測試覆蓋率過程中,類、方法等覆蓋的百分比報告,可以方便測試人員更好的評估測試。測試人員通過對照覆蓋率報告與測試用例設計文檔,需求文檔可以迅速找到測試的不足。通過與開發(fā)人員進行討論,可以更好的評估測試力度,并指導進一步的測試。因此在功能測試中引入覆蓋率信息,能夠完善測試結果報告,確保測試質量和力度,保證測試按質、按量地完成。特別是在目前倡導的 Agile 開發(fā)和測試流程中,開發(fā)和測試的周期都很短,有效的覆蓋率信息能夠幫助測試人員更加準確地控制測試結果和周期、跟蹤
5、問題,保證軟件正常發(fā)布。EMMA 在測試執(zhí)行中的應用在這一部分將逐步介紹 EMMA 在功能測試過程中的使用過程和步驟。為了使整個介紹過程容易理解,在文章附錄中提供了示例程序,文章中通過對示例程序進行操作介紹使用 EMMA 的命令。插裝被測組件EMMA 通過對被測組件進行插裝來跟蹤被測組件的執(zhí)行過程,因此對被測組件進行插裝是使用 EMMA 獲得覆蓋率信息的第一步。測試人員應首先和開發(fā)人員討論,確定哪一部分包含了符合插裝要求的文件( Java 文件),哪一部分需要考慮覆蓋率信息,然后選擇合適的方式進行插裝。· 插裝準備 在執(zhí)行插裝操作之前,首先應該擴展 Java 虛擬機,即將 emma.
6、jar 放到被測組件運行使用的JRE 目錄下面作為 JRE 的擴展,以便 EMMA 能夠被調用。 emma.jar 包含了 EMMA 核心功能模塊的實現和 EMMA 運行時所需的類文件,這些文件是使用 EMMA 所必需的。由于示例被測組件運行在 Websphere Portal Server 中,并使用默認的 JRE 運行,因此將emma.jar 放到 “/opt/WebSphere/PortalServer/java/jre/lib/ext” 下面。在實際的測試中,將該路徑進行相應的替換。· 插裝 EMMA 中提供了 “instr” 命令完成插裝操作。插裝操作可以面向 JAR 包、
7、 WAR 包、 WAR 包、類文件和目錄,選擇合適的命令進行插裝可以使插裝過程變得簡便。下面的1-4通過具體例子介紹了不同情況下的插裝命令。1. 插裝目錄和類文件對于類文件,通過指定類文件所在的目錄實現。清單 1. 對類文件插裝命令 /opt/WebSphere/PortalServer/java/jre/bin/java emma instr -m overwrite -ip /opt/WebSphere/PortalServer/installedApps/NumberQuizWEB_10yggsru.ear/NumberQuizWEB.war/WEB-INF/classes -Dmeta
8、data.out.file=/root/emma/Number_coverage.emEMMA: processing instrumentation path EMMA: instrumentation path processed in 682 msEMMA: 5 class(es) instrumented, 0 resource(s) copiedEMMA: metadata merged into /root/emma/Number_coverage.em in 72 ms1. 插裝 JAR 包JAR 包可以作為一個整體進行插裝。通過對整個 JAR 進行插裝,可以避免對 JAR 包進
9、行解壓和壓縮的過程,提高插裝效率。清單 2. 對 JAR 包插裝命令 /opt/WebSphere/PortalServer/java/jre/bin/java emma instr -m overwrite -cp TestWs.jar -Dmetadata.out.file=/root/emma/Number_coverage.emEMMA: processing instrumentation path EMMA: instrumentation path processed in 675 msEMMA: 7 class(es) instrumented, 4 resource(s) c
10、opiedEMMA: metadata merged into /root/emma/Number_coverage.em in 60 ms1. 插裝 WAR/EAR 包由于 WAR/EAR 包需要運行在特定的環(huán)境中,所以在進行插裝之前,需要先將其安裝在特定的 J2EE 容器中,然后將其看作目錄進行插裝。清單 3. 對 WAR/EAR 包插裝命令 /opt/WebSphere/PortalServer/java/jre/bin/java emma instr -m overwrite -ip NumberQuizWEB.war -Dmetadata.out.file=/root/emma/Nu
11、mber_coverage.emEMMA: processing instrumentation path EMMA: instrumentation path processed in 610 msEMMA: 5 class(es) instrumented, 0 resource(s) copiedEMMA: metadata merged into /root/emma/Number_coverage.em in 94 ms1. 選擇性的插裝EMMA 支持對整個 JAR 包和目錄進行插裝,但如果在 JAR 包或者目錄中包含系統(tǒng)的文件或者測試過程中不關心的文件時,應該進行選擇性插裝,因為這
12、些文件的存在會影響測試結果的百分比。 EMMA 提供了選擇插裝的選項,實現選擇性插裝。清單 4. 選擇插裝命令 /opt/WebSphere/PortalServer/java/jre/bin/java emma instr -m overwrite -cp TestWs.jar -ix +org.wstest.service.* -Dmetadata.out.file=/root/emma/Number_coverage.emEMMA: processing instrumentation path EMMA: instrumentation path processed in 637 ms
13、EMMA: 4 class(es) instrumented, 6 resource(s) copiedEMMA: metadata merged into /root/emma/Number_coverage.em in 107 ms上述命令選擇了與清單2中同樣的 JAR 包,由于只包含了 org.wstest.service.* 內的內容,因此只插裝了4個類。以上的1-4分別介紹了在插裝過程中的常用命令,下面對命令中用到的一些參數進行解釋。參數 “m”代表插裝后文件輸出的模式。有三個值可供選擇: “copy” ,“overwrite” 和 “fullcopy” 。其中,“copy” 和 “
14、 fullcopy” 這兩種模式將會改變插裝文件所在的目錄,并需要測試人員手動為其生成所需的包,使用起來比較復雜。“overwrite” 模式直接用插裝后的文件覆蓋插裝前文件,使用方便。但是由于同一時間生成的文件只能插裝一次,在 “overwrite”模式下,插裝前的文件已經丟失,測試人員無法重復插裝操作,因此建議在插裝之前先將需要插裝的文件和包進行備份。參數 “ip” 和 “cp” 用來提供插裝路徑,其中 “cp” 用來指明一個文件夾, “ip” 指定單獨的文件或者 JAR 包。參數 “Dmetadata.out.file” 用來指定插裝得到的元數據文件保存的路徑。EMMA 中通過 “ix”
15、 參數指定文件的包含和排除關系,其中在 “+” 符號后的文件為包含進的文件, “-” 后面的內容為排除在外的文件。· 合并元數據 完成插裝操作以后,在指定的路徑下會產生一些名為 “*coverage.em” 的文件,這些文件保存了插裝的元信息,這些信息主要是記錄插裝過程中的插裝點在被測代碼中的位置。如果在插裝過程中,指定這些文件到同一文件的話, EMMA 默認將元數據進行合并。如果測試人員未指定路徑,或者希望得到獨立的元文件,這些文件將分別產生在默認或指定的目錄下。測試人員還可以通過使用 “merge” 命令手動將這些元文件進行合并,保證生成的覆蓋率報表的全面性。注意:合并操作不支持
16、逆向操作。清單 5. 合并元數據命令 /opt/WebSphere/PortalServer/java/jre/bin/java emma merge -input <path1>/coverage1.em,<path2>/coverage.em -out <path>/coverage2.em在 “input” 后面的參數為待合并的文件名,在 “out” 后面的參數為合并以后的結果文件。完成上面的操作以后,就已經完成了收集覆蓋率信息的準備工作。接下來測試人員可以進行正常的測試工作,在運行測試的過程中, EMMA 將跟蹤并記錄執(zhí)行軌跡,得到覆蓋率信息。運行測
17、試用例,得到覆蓋率報告完成插裝工作以后,測試人員可以按照測試計劃運行測試用例。 EMMA 將在測試執(zhí)行的過程中記錄代碼執(zhí)行信息并將結果記錄在內存中。每次當 JVM 停止時,內存中記錄的執(zhí)行信息將被清除并被保存到 “*.ec” 的文件中。但是在實際測試的過程中, JVM 的停止很難控制,因此測試人員可以定時手動將內存中執(zhí)行信息寫出。在這種情況下,內存中的記錄被輸出,但是內存中的內容不被清除。清單5-7介紹了收集覆蓋率信息以及生成覆蓋率信息報告的命令。清單 6. 從遠程機器上收集覆蓋率信息 /opt/WebSphere/PortalServer/java/jre/bin/java -cp emma
18、.jar emma ctl connect :47653 -command coverage.dump,/root/emma/Number_coverage.ecEMMA: processing control command sequence EMMA: executing coverage.dump (/root/emma/Number_coverage.ec,true) EMMA: coverage.dump: runtime coverage data remotely merged into /root/emma/Number_coverage.ec in 83 msEMMA: co
19、verage.dump: command completed in 96 msEMMA: control command sequence complete清單 7. 從本地收集覆蓋率信息 /opt/WebSphere/PortalServer/java/jre/bin/java -cp emma.jar emma ctl -connect :47653 -command coverage.get,/root/emma/Number_coverage.ecEMMA: processing control command sequence EMMA: executing coverage.get
20、 (/root/emma/Number_coverage.ec,true,true) EMMA: coverage.get: local copy of coverage data merged into /root/emma/Number_coverage.ec in 39 msEMMA: coverage.get: command completed in 79 msEMMA: control command sequence complete這樣收集到的信息被保存在 “coverage.ec” 中, “coverage.ec” 是二進制格式的文件,因此很難被用來查看覆蓋率結果。清單 8.
21、 生成覆蓋率報告 /opt/WebSphere/PortalServer/java/jre/bin/java -cp emma.jar emma report -r html -in /root/emma/Number_coverage.em,/root/emma/Number_coverage.ec -Dreport.html.out.file=/root/emma/Number_coverage.html -Dreport.metrics=class:80(,method:75)EMMA: processing input files EMMA: 2 file(s) read and me
22、rged in 42 msEMMA: writing html report to /root/emma/coverage/Number_coverage.xml 在生成覆蓋率報告的過程中,測試人員可以根據測試要求通過 “Dreport.metrics” 參數設定滿意的覆蓋率標準。在示例命令中設定了類覆蓋率的滿意度為80%。測試報告可以以 HTML ,文本和 XML 三種格式輸出。圖1、圖2為 HTML 格式的報告的例子。覆蓋率的報告是以包、類、方法三級單位組織的。圖1是 Index 類的執(zhí)行情況,其中紅顏色代表該覆蓋率未達到滿意的覆蓋率標準。圖2則是包 org.numberquiz 中 Qu
23、izBran 類的執(zhí)行情況,從總體看,類覆蓋率為100%,方法為91%。在附錄中可以看到示例程序完整的測試覆蓋率報告。圖 1. Index 測試報告圖 2. QuizBran 測試報告在功能測試過程中,為每個單獨的測試用例生成獨立的覆蓋率報告能夠給測試過程帶來很大的幫助:· 當測試用例失敗或者拋出異常時,可以通過覆蓋率報告找到該測試用例對應的代碼,這樣就可以為測試人員提供可能出錯代碼的范圍。這一報告不僅可以幫助測試人員在提交問題時更加詳細的描述錯誤,提供更詳細的信息,還可以為開發(fā)人員跟蹤問題提供線索,縮短解決問題的周期。· 測試人員可以從獨立的測試報告中獲得代碼和功能模塊的
24、對應關系,更好的理解測試用例的作用。· 獨立的測試報告可以幫助測試人員改進測試用例的設計,刪除重復的測試用例,將覆蓋點較多的測試用例進行拆分。為得到獨立的測試報告,需要在每次執(zhí)行測試用例前,將內存中的執(zhí)行信息清除。目前有兩種方法支持清除記錄,測試人員可在測試過程中,根據需要選擇合適的方法。· 每次運行完一個測試用例,重啟 JVM 。這種方法能夠完整的清除內存中記錄的執(zhí)行信息,但是每次重啟 JVM 給測試帶來很多麻煩。· 使用 “coverage.reset” 命令,該命令可以在不重啟 JVM 的情況下,清除內存中記錄的方法、塊、行的執(zhí)行信息,但是無法清除類覆蓋信息
25、。如果用戶關注的重點在方法的覆蓋信息上,可以選擇這種方法。清單 9. 清除內存中覆蓋率信息命令 /opt/WebSphere/PortalServer/java/jre/bin/java -cp emma.jar emma ctl -connect:47653 -command coverage.resetEMMA: processing control command sequenceEMMA: executing coverage.reset ()EMMA: coverage.reset: coverage reset for 5 classes in 0 msEMMA: coverage
26、.reset: command completed in 31 msEMMA: control command sequence complete合并覆蓋率結果完成所用的測試用例后,測試覆蓋信息可以被合并在一起,得到整個測試的覆蓋報告。覆蓋率結果文件通過 “merge” 命令合并 “*.ec” 文件實現的。另外,由于 EMMA 中測試覆蓋率是通過與 “*.em” 文件關聯(lián)獲得代碼信息的,因此當代碼發(fā)生變化時,已經運行過的測試不必完全重復,只需將得到的 “*.ec” 文件合并(新得到的 “*.ec” 文件放在后面),然后關聯(lián)最新的 “*.em” 文件即可得到代碼變化后的覆蓋率信息,這方便了 EM
27、MA 支持版本變化的測試。在生成新的測試報告的時候,需要注意 “*.ec” 的時間一定要晚于 “*.em” 文件。清單 9. 合并覆蓋率結果命令 /opt/WebSphere/PortalServer/java/jre/bin/java emma merge input coverage1.ec,coverage2.ec,coverage3.ec output coverage.ec如果在生成測試報告的時候,如果出現 “com.vladium.emma.EMMARuntimeException: CLASS_STAMP_MISMATCH runtime version of class in the coverage data is not consistent with the version of this class in t
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- Di-γ-linolenin-生命科學試劑-MCE
- Anti-NASH-agent-2-生命科學試劑-MCE
- 2-3-Dimethylmethcathinone-hydrochloride-生命科學試劑-MCE
- 藥店聘請合同范本
- 現代企業(yè)管理中的危機應對與創(chuàng)新
- 消費貸購銷合同范本
- 電商平臺中的內容營銷策略與實踐案例分享
- 專業(yè)冷庫供貨合同范本
- 科技引領的糖尿病健康管理與服務平臺
- 舊物 回收 置換合同范本
- 2025人教版一年級下冊數學教學進度表
- DeepSeek教案寫作指令
- 休學復學申請書
- 瓷磚鋪貼勞務承包協(xié)議書
- 2025年四川司法警官職業(yè)學院高職單招職業(yè)適應性測試近5年常考版參考題庫含答案解析
- 新建污水處理廠工程EPC總承包投標方案(技術標)
- 山東省德州市2024-2025學年高三上學期1月期末生物試題(有答案)
- 《宏觀經濟管理研究》課件
- 本人報廢車輛委托書
- 雙減政策與五項管理解讀
- 2025年道德與法治小學六年級下冊教學計劃(含進度表)
評論
0/150
提交評論