1. 程式人生 > >SonarQube學習(三)- 專案程式碼掃描

SonarQube學習(三)- 專案程式碼掃描

## 一、前言 元旦三天假,兩天半都在玩86版本DNF,不得不說,這個服真的粘度太高了,但是真的很良心。 **作為一個老玩家,玩的就是個情懷!** 說明: > 註冊賬號上線100w點券,一身+15紅字史詩裝備以及+21強化新手武器。線上泡點一分鐘888點券。所有東西皆可白嫖! ### 遊戲成就 附圖1 ![](https://img2020.cnblogs.com/blog/718867/202101/718867-20210103201046471-1915938897.png) 附圖2 ![](https://img2020.cnblogs.com/blog/718867/202101/718867-20210103201242037-544024058.png) 附圖3 ![](https://img2020.cnblogs.com/blog/718867/202101/718867-20210103201410762-1740303244.png) 附圖4 ![](https://img2020.cnblogs.com/blog/718867/202101/718867-20210103201438838-1393247667.png) 這把+21的武器,建立角色就給,刷圖是真的太爽了! 附圖5 ![](https://img2020.cnblogs.com/blog/718867/202101/718867-20210103201808803-624575703.png) 我拿到**墜入深淵的靈魂**稱號,刷到紅狗所有鬼劍的85版本史詩武器,天御三等二,開盒子開到手軟,重點是**不花錢,不花錢!** 下午突然想到**SonarQube**這個我還沒學完,接著便開始接著搞**SonarQube**,自己想做的事,必須要堅持,有始有終,一定要更新完。 正事的時候,我一般都是隨時可以退掉不玩,哈哈,誰和我打排位估計會坑吧。 ## 二、準備 ### 1、建立一個springboot 工程 此處略 ### 2、隨便寫幾個 Service Controller 及API的測試方法。 程式碼1,示例如下: ```java package com.rongrong.springboot.demo.controller; import com.rongrong.springboot.demo.responstory.StudentResponstory; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.result.MockMvcResultMatchers; /** * @description: 對API進行單元測試 * @author rongrong * @version 1.0 * @date 2021/1/03 14:12 */ @RunWith(SpringRunner.class) @SpringBootTest @AutoConfigureMockMvc public class StudentApiTest { @Autowired MockMvc mockMvc; @Test public void testStudentApiTest() throws Exception { mockMvc.perform(MockMvcRequestBuilders.get("/students")) .andExpect(MockMvcResultMatchers.status().isOk()) .andExpect(MockMvcResultMatchers.content().string("[{\"id\":16,\"name\":\"alex\",\"age\":10,\"sex\":\"boy\",\"email\":\"[email protected]\"},{\"id\":857,\"name\":\"tester\",\"age\":15,\"sex\":\"boy\",\"email\":\"[email protected]\"}]")); } } ``` 程式碼2,示例如下: ``` package com.rongrong.springboot.demo.controller; import com.rongrong.springboot.demo.domain.Student; import com.rongrong.springboot.demo.responstory.StudentResponstory; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; /** * @description: 對service進行單元測試 * @author rongrong * @version 1.0 * @date 2021/1/03 14:52 */ @RunWith(SpringRunner.class) @SpringBootTest public class StudentControllerTest { @Autowired StudentResponstory studentResponstory; @Test public void sudentFindOne() { Student student = studentResponstory.findOne(16); Assert.assertEquals(new Integer(10), student.getAge()); } } ``` ### 3、配置本地 maven 配置檔案 conf/settings.xml 新增如下內容: ```xml org.sonarsource.scanner.maven
sonar true http://192.168.1.106:9000 ``` ### 4、在pom.xml中引入JaCoCo外掛 新增如下內容: ```xml org.jacoco jacoco-maven-plugin 0.8.2 prepare-agent report test
report
``` ## 三、配置掃描資料 ### 1、新增檔案 在專案下:新增 sonar-project.properties 檔案 ### 2、複製以下檔案內容 ``` # 指定SonarQube instance必須是唯一的 sonar.projectKey=springboot_demo # 設定SonarQube UI顯示的名稱 # PS:有人會問這裡的名稱是否可以是中文名稱,我在網上搜索了好多資料都說是不可以的(至少我看到的資 #料都是)後來自己嘗試了一下,答案是可以寫成中文的,但是要換一種方式,比如你想把專案名稱命名為“測 #試”,那麼在這裡就要寫成“\u6d4b\u8bd5”,那麼下面這個引數就應該這樣寫“sonar.projectName= #\u6d4b\u8bd5”,說白了就是將中文轉成Unicode sonar.projectName=springboot_demo sonar.projectVersion=1.0 sonar.language=java # 指定src和classes資料夾位置,當然也可以是全路徑,如果是當前工程根目錄下用“.”表示也可以,比如“sonar.sources=.” sonar.sources=src/main sonar.test=src/test sonar.java.binaries=target # 下面的這兩個引數作用是相同的,因為有時我們需要指定某個資料夾或者忽略某個資料夾 # sonar.inclusions=src1/**,src3/** # sonar.exclusions=src2/**,src4/** # 原始碼編碼,預設是系統編碼 sonar.sourceEncoding=UTF-8 # Set jacoco Configuration # 指定程式碼覆蓋率工具 sonar.core.codeCoveragePlugin=jacoco # 指定exec二進位制檔案存放路徑 #sonar.jacoco.reportPaths=[yourPath/]jacoco.exec #本demo之前設定的exec檔案是在工程根目錄下的target/coverage-reports下: sonar.jacoco.reportPaths=target/jacoco.exec # 以下屬性可選擇性加,當然也可以不加 sonar.dynamicAnalysis=reuseReports sonar.jacoco.reportMissing.force.zero=false ``` ### 3、執行 在專案根目錄下,執行** mvn package**. ![](https://img2020.cnblogs.com/blog/718867/202101/718867-20210103195537018-1892645442.png) 當build成功的時候Jacoco的結果就會產生在target/site/jacoco資料夾下。 ![](https://img2020.cnblogs.com/blog/718867/202101/718867-20210103195651617-1798781698.png) 接著,在專案根目錄下執行命令 sonar-scanner,如果看到以下結果證明已經覆蓋率已經可以在SonarQube上查閱。 ![](https://img2020.cnblogs.com/blog/718867/202101/718867-20210103195926685-85367944.png) ## 四、在SonarQube檢視掃描結果 重新整理下系統頁面,如下顯示 ![](https://img2020.cnblogs.com/blog/718867/202101/718867-20210103200156906-800786133.png) **知識點:** 借用風總說的話就是,你要**先進行測試才有覆蓋率**。 ## 五、結束語 下一篇就是收尾了,Jenkins整合JaCoCo和SonarQube和檢查程式碼測試覆蓋率。 來個互動,powermock用這個能做覆蓋率嗎,有興趣的同學可以嘗試下,此處埋下伏筆了,