目的:檢查代碼覆蓋率,包括對語句的覆蓋,對分支或者條件的覆蓋等等
實現原理:1、服務器上采集收據
2、采集數據和本地源碼做匹配
3、瀏覽器展示匹配結果
使用工具:Sonar5.4:覆蓋結果展示;
Jacoco7:用於在服務器端產生覆蓋數據;
命令行方式處理匹配結果;
JDK1.8
SonarQube Scanner 3.2;
一、服務器環境搭建
1、下載Jacoco並解壓上傳至服務器(linux)
http://www.eclemma.org/jacoco/index.html
2、在gsxdb.properties文件中加入:指定javaangent的安裝位置,指定結果文件jacoco.exec(運行后生成此文件)的位置。
-javaagent:XX/lib/jacocoagent.jar=destfile=XX/jacoco.exec
3、檢驗是否部署成功:
例gs項目:ps -ef | grep Main_Gs
刷新安裝目錄,查看是否生成了jacoco.exe文件,如果有此文件,則部署成功。
4、做功能測試時,需要關閉進程獲取結果文件jacoco.exec.
二、本地環境搭建
1、下載SonarQube並解壓到本地。
http://www.sonarqube.org/downloads/
2、開啟SonarQube:進入本地操作系統對應的目錄,如本地操作系統為windows64位,則進入D:\aotu\sonarqube-5.4\bin\windows-x86-64,雙擊StartSonar.bat啟動SonarQube。
3.驗證SonarQube是否正常運作:瀏覽器訪問http://localhost:9000/ ,然后登陸,用戶名:admin,密碼:admin。
4、進入對應的源碼項目,
1)將服務器下載的jacoco.exec,放入目錄中
2)新增配置文件:sonar-project.properties,設置項目的參數,供Sonar讀取,以及Class文件的地址和結果文件的地址,供Sonar-Scanner讀取。
腳本代碼參考:
# must be unique in a given SonarQube instance sonar.projectKey=gs # this is the name displayed in the SonarQube UI sonar.projectName= gs #sonar.language=java sonar.projectVersion=1.0 # Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows. # Since SonarQube 4.2, this property is optional if sonar.modules is set. # If not set, SonarQube starts looking for source code from the directory containing # the sonar-project.properties file. sonar.sources=. #sonar.binaries=C:/Users/Administrator/Desktop/codes/web/yyxw/WebRoot/WEB-INF/classes/com sonar.java.binaries=項目class文件 # Encoding of the source code. Default is default system encoding sonar.sourceEncoding=UTF-8 #Set jacoco Configuration #Code coverage tool sonar.java.coveragePlugin=jacoco #Path to the JaCoCo report file containing coverage data by unit tests. The path may be absolute or relative to the project base directory sonar.jacoco.reportPath=項目路徑/jacoco.exec #Path to the JaCoCo report file containing coverage data by integration tests. The path may be absolute or relative to the project base directory sonar.jacoco.itReportPath=項目路徑/jacoco.exec #sonar.jacoco.reportMissing.force.zero sonar.jacoco.reportMissing.force.zero=false
5、下載SonarQube Scanner:Sonar插件,讀取sonar-project.properties用於掃描源碼,將Jacoco數據結果文件對應到源碼中去。SonarScanner最新版本是4.2,但需jdk11了。咱們的環境是jdk8,只能用SonarScanner3.2。
https://docs.sonarqube.org/pages/viewpage.action?pageId=11641634&navigatingVersions=true
6、安裝SonarQube Scanner:將壓縮包解壓,粘貼復制到SonarQube所在文件夾,將文件合並即可。
7、將Sonar的bin文件目錄加到系統環境變量中
8、驗證環境變量是否加入成功:打開cmd,直接輸入sonar-scanner.bat出現圖中界面即成功。
9、cmd執行匹配結果
打開項目及sonar-project.properties文件所在目錄
cd [項目代碼路徑],並在此路徑下啟動sonar,執行sonar-scanner.bat。
10、注意查看dos界面打印信息,如果有錯誤信息,具體查看報錯原因。
執行完是Excution Success。
11、登錄http://localhost:9000,打開匹配的項目,不同的顏色對應不同的覆蓋程度,顏色越紅覆蓋得越少,顏色越綠,覆蓋得越多,點擊不同的版塊,可以看到版塊內部的覆蓋情況。