Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 国99久9在线|免费,国内精品欧美久久精品,国产日韩精品一区二区在线观看播放

          整合營銷服務(wù)商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          sonar代碼覆蓋率實戰(zhàn)

          onar接入測試結(jié)果

          項目執(zhí)行mvn test指令生成的 測試用例文件在標(biāo)紅位置

          將生成的測試用例導(dǎo)入到sonar中

          按默認(rèn)值設(shè)置sonar.junit.reportPaths

          執(zhí)行命令將測試結(jié)果上傳到sonarqube中

          默認(rèn)

          SONARQUBE_TOKEN=22e813fd70f53cac585ced071058a79fa2a91ff6
          
          #執(zhí)行測試,把默認(rèn)位置的測試結(jié)果上傳
          mvn clean test sonar:sonar \
            -Dmaven.test.failure.ignore=true \  #忽略測試失敗
            -Dsonar.host.url=http://192.168.132.128:9000   \ #sonar 服務(wù)器地址
            -Dsonar.login=$SONARQUBE_TOKEN \
            -Dsonar.ws.timeout=300 \   # 超時時間
            -Dsonar.projectKey=litemall-$USER \  
            -Dsonar.projectName=litemall-$USER

          執(zhí)行成功

          使用自定義位置上傳測試結(jié)果

          find . -name "surefire*" ./litemall-db/target/surefire-reports
          
          mvn clean test sonar:sonar   \
            -Dmaven.test.failure.ignore=true \
            -Dsonar.host.url=http://192.168.132.128:9000   \ #sonar 服務(wù)器地址
            -Dsonar.login=$SONARQUBE_TOKEN   \
            -Dsonar.ws.timeout=300 \
            -Dmaven.test.skip=false \
            -Dsonar.junit.reportPaths='./litemall-db/target/surefire-reports,./litemall-db/target/surefire-reports'

          覆蓋率工具

          jacoco底層技術(shù)

          jacoco底層使用asm框架對代碼所生成的類文件進(jìn)行修改,加入統(tǒng)計指令,從而得知代碼有沒有被覆蓋

          ASM:所有字節(jié)碼插樁框架的底層,性能最高,apm框架的核心基礎(chǔ)

          JavaAssist:簡單易用

          ByteBuddy、BTrace、 JVM- Sandbox

          覆蓋率統(tǒng)計原理 對代碼塊及執(zhí)行路徑進(jìn)行覆蓋

          jacoco mvn插件使用

          https://www.jacoco.org/jacoco/trunk/doc/maven.html

          jacoco 命令行使用

          https://www.jacoco.org/jacoco/trunk/doc/cli.html

          手工統(tǒng)計覆蓋率

          • 對被測應(yīng)用進(jìn)行插樁,然后啟動on the fly模式j(luò)avaagent模式可以在內(nèi)存中動態(tài)修改class字節(jié)碼,不會修改jar包,所以jar包大小不變offline模式,修改jar包中的class文件,文件會變大
          • 執(zhí)行測試行為
          • 導(dǎo)出覆蓋率統(tǒng)計結(jié)果
          • 生成報告
          agent下載地址 https://repo1.maven.org/maven2/org/jacoco/org.jacoco.agent/0.8.6/ 5
          cli工具下載地址 https://repo1.maven.org/maven2/org/jacoco/org.jacoco.cli/0.8.6/ 2

          下載jar到本地服務(wù)器

          #以on the fly模式啟動被測應(yīng)用
          java -javaagent:./org.jacoco.agent-0.8.6-runtime.jar -jar apache-jmeter-5.4.1/bin/ApacheJMeter.jar 
          #執(zhí)行后正常結(jié)束被測程序會得到覆蓋率統(tǒng)計文件,被測應(yīng)用只要得到執(zhí)行就可以統(tǒng)計到覆蓋率,
          可以跟測試用例不在同一個服務(wù)器上。
          ls jacoco.exec 
          #生成無源代碼的報告 
          java -jar org.jacoco.cli-0.8.6-nodeps.jar report jacoco.exec --classfiles apache-jmeter-5.4.1/bin/ApacheJMeter.jar --html jacoco_html 
          #生成有源代碼關(guān)聯(lián)的報告
          java -jar org.jacoco.cli-0.8.6-nodeps.jar report jacoco.exec --classfiles apache-jmeter-5.4.1/bin/ApacheJMeter.jar --html jacoco_html_src --sourcefiles apache-jmeter-5.4.1_src/apache-jmeter-5.4.1/src/launcher/src/main/java/ 
          

          覆蓋率生成位置


          動態(tài)生成覆蓋率

          mvn clean \ 
          org.jacoco:jacoco-maven-plugin:0.8.5:prepare-agent \ 
          test \ 
          org.jacoco:jacoco-maven-plugin:0.8.5:report \ 
           -Dmaven.test.failure.ignore=true \ 
           -Dmaven.test.skip=false

          執(zhí)行會在命令行指向目標(biāo)地址,只要打包運行后就會生成exec文件

          生成exec文件,通過sonar將exec文件傳給服務(wù)器

          覆蓋率導(dǎo)入sonarqube 默認(rèn)路徑

          mvn sonar:sonar \
            -Dsonar.host.url=http://sonarqube.ceshiren.com:9000   \
            -Dsonar.login=$SONARQUBE_TOKEN \
            -Dsonar.ws.timeout=300 \
            -Dsonar.projectKey=litemall-core-$USER \
            -Dsonar.projectName=litemall-core-$USER

          sonar執(zhí)行分析

          生成jacoco的覆蓋率報告

          加載exec文件生成報告

          生成的覆蓋率報告

          上傳報告到sonar

          ### 覆蓋率導(dǎo)入sonarqube
          
          默認(rèn)路徑
          ```
          mvn sonar:sonar \
            -Dsonar.host.url=http://sonarqube.ceshiren.com:9000   \
            -Dsonar.login=$SONARQUBE_TOKEN \
            -Dsonar.ws.timeout=300 \
            -Dsonar.projectKey=litemall-core-$USER \
            -Dsonar.projectName=litemall-core-$USER
          ```
          
          自定義路徑
          ```
          SONARQUBE_HOST=http://sonarqube.ceshiren.com:9000 
          sonar-scanner \
            -Dsonar.host.url=$SONARQUBE_HOST    \
            -Dsonar.login=$SONARQUBE_TOKEN   \
            -Dsonar.projectKey=litemall_$USER \
            -Dsonar.projectName=litemall_$USER \
            -Dsonar.sources=$(echo **/src | sed 's# #,#g')  \
            -Dsonar.java.binaries="**/target" \
            -Dsonar.junit.reportPaths=$(find . -name "surefire-reports"  | xargs  | sed 's# #,#g') \
            -Dsonar.coverage.jacoco.xmlReportPaths="**/jacoco/jacoco.xml"

          pom文件加入jacoco插件


          白盒測試更容易發(fā)現(xiàn)bug

          IPS

          本文基于SonarQube 7.9.1,理論支持6.0及更高版本。

          SonarQube是一個開源的代碼質(zhì)量管理系統(tǒng),可用來快速定位代碼中的Bug、漏洞以及不優(yōu)雅的代碼。它支持幾乎所有的常見編程語言,例如Java、JavaScript、TypeScript、Kotlin、Ruby、Go, Scala等。并且還有插件機制,利用插件,可以讓SonarQube更加強大,例如可以整合Findbugs、PMD、Checkstyle等??梢哉f,SonarQube是一款提升項目代碼質(zhì)量必備的根據(jù)。

          本文手把手搭建、使用SonarQube。

          下載

          前往 https://www.sonarqube.org/downloads/ ,按照如圖說明下載即可。建議下載 LTS 版本,以便獲得長期的維護(hù)與支持。

          系統(tǒng)需求

          ?X64的操作系統(tǒng)

          ?JDK(對于7.9.x,那么需要JDK 11或更高版;對于6.x - 7.8.x,需要JDK 8或更高版本)

          ?2G內(nèi)存

          其他需求詳見:https://docs.sonarqube.org/7.9/requirements/requirements/[1]

          TIPS

          ?《其他需求》建議大家參照一下,里面探討如何修改Linux文件描述符限制等說明;

          ?上面貼的是是7.9版的鏈接,如果你使用的是其他版本,只需將版本名稱改掉即可,例如改為7.8即可查看7.8.x的需求。

          安裝與啟動

          1 解壓壓縮包

          2 將目錄切換到SonarQube的 /bin 目錄,可看到類似如下的目錄結(jié)構(gòu):

          ├── bin
          │ ├── jsw-license
          │ ├── linux-x86-64
          │ ├── macosx-universal-64
          │ └── windows-x86-64
          

          3 根據(jù)你的操作系統(tǒng),切換到響應(yīng)目錄。例如,您的機器是macOS ,則可切換到 macosx-universal-64 目錄。

          4 執(zhí)行如下命令即可啟動SonarQube。

          ./sonar.sh start
          

          當(dāng)然,該shell還有其他命令,可輸入 ./sonar.sh --help 或者 ./sonar.sh 查閱。

          5 稍等片刻,訪問 http://localhost:9000/ 即可看到類似如下的界面,說明安裝成功。

          6 停止SonarQube,只需執(zhí)行 ./sonar.sh stop 即可。

          7 如需重啟,只需執(zhí)行 ./sonar.sh restart 即可。

          管理員登錄

          訪問:http://localhost:9000

          賬號:admin

          密碼:admin

          生產(chǎn)環(huán)境可用

          默認(rèn)情況下,SonarQube使用的是H2數(shù)據(jù)庫,這是一款非常流行的嵌入式數(shù)據(jù)庫。但生產(chǎn)環(huán)境中,SonarQube并不建議使用H2。SonarQube支持多種數(shù)據(jù)庫,例如Qracle、PostgreSQL、SQL Server等。下面,我們以PostgreSQL為例,讓SonarQube使用PostgreSQL存儲數(shù)據(jù)。

          TIPS

          支持的數(shù)據(jù)庫及數(shù)據(jù)庫版本請前往這篇文檔查看,避免SonarQube不支持你的數(shù)據(jù)庫版本以及注意點。

          https://docs.sonarqube.org/7.9/requirements/requirements/[2]

          舉個例子:SonarQube 7.9要求使用PostgreSQL 9.3-9.6或者PostgreSQL 10,并且必須配置使用UTF-8

          搭建PostgreSQL

          簡單起見,我用Docker搭建PostgreSQL。

          version: '3.1'
          services:
           postgres:
           image: postgres:10
           restart: always
           environment:
           - POSTGRES_USER=itmuch
           - POSTGRES_PASSWORD=itmuch
           - POSTGRES_DB=sonar
           ports:
           - "5432:5432"
          

          修改SonarQube配置

          1 修改配置文件:$SONARQUBE_HOME/conf/sonar.properties 。

          2 找到類似如下的內(nèi)容:

          #----- PostgreSQL 9.3 or greater
          # By default the schema named "public" is used. It can be overridden with the parameter "currentSchema".
          #sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube?currentSchema=my_schema
          

          在這行下面,添加如下內(nèi)容:

          sonar.jdbc.url=jdbc:postgresql://localhost/sonar?currentSchema=public
          sonar.jdbc.username=itmuch
          sonar.jdbc.password=itmuch
          

          這里,數(shù)據(jù)庫地址、賬號、密碼根據(jù)你的需求修改。

          3 執(zhí)行 ./sonar.sh restart ,重啟SonarQube。觀察PostgreSQL,可以發(fā)現(xiàn),此時SonarQube會自動在PostgreSQL數(shù)據(jù)庫中建表并插入初始化數(shù)據(jù)。

          4 類似的方式,你也可以為你的SonarQube配置其他數(shù)據(jù)庫。

          整合Maven

          方法一:全局配置

          1 在Maven的全局配置文件: $MAVEN_PATH/conf/settings.xml (也可能是.m2/settings.xml 看你是怎么配置Maven的)中添加如下內(nèi)容:


          <profile>
           <id>sonar</id>
           <activation>
           <activeByDefault>true</activeByDefault>
           </activation>
           <properties>
           <sonar.jdbc.url>jdbc:postgresql://localhost/sonar?currentSchema=public</sonar.jdbc.url>
           <sonar.jdbc.driver>org.postgresql.Driver</sonar.jdbc.driver>
           <sonar.jdbc.username>itmuch</sonar.jdbc.username>
           <sonar.jdbc.password>itmuch</sonar.jdbc.password>
           <sonar.host.url>http://127.0.0.1:9000</sonar.host.url>
           </properties>
          </profile>
          

          2 到Maven項目的根目錄執(zhí)行如下命令,即可使用SonarQube分析項目:

          mvn sonar:sonar -Dsonar.java.binaries=target/sonar
          

          等待片刻后,項目構(gòu)建成功:

          [INFO] Spring Cloud YES ................................... SUCCESS [ 12.431 s]
          [INFO] turbine-stream-server .............................. SKIPPED
          [INFO] zuul-server ........................................ SKIPPED
          [INFO] hystrix-dashboard .................................. SKIPPED
          [INFO] commons ............................................ SKIPPED
          [INFO] ms-content-sample-mybatis .......................... SKIPPED
          [INFO] ms-consumer-sample ................................. SKIPPED
          

          3 此時,再次訪問 http://localhost:9000 ,即可看到類似如下的界面:

          如右上角所示,此時可以看到SonarQube已經(jīng)為我們分析了一個項目,該項目有1個Bug、2個脆弱點、31個代碼味道問題。點擊項目名稱(圖中的 Spring Cloud YES)即可看到詳情,可以根據(jù)SonarQube給我們的提示進(jìn)行修正、重構(gòu)。

          方法二:直接命令行控制

          1 右上角頭像 - My Account - Security頁中,在 Generate New Token 中填入你的Token名稱,并點擊Generate 按鈕。

          2 點擊按鈕后,將會看到生成的Token,例如 62b615f477557f98bc60b396c2b4ca2793afbdea

          3 使用如下命令,即可使用Sonar分析項目。

          mvn sonar:sonar \
           -Dsonar.host.url=http://localhost:9000 \
           -Dsonar.login=62b615f477557f98bc60b396c2b4ca2793afbdea \
           -Dsonar.java.binaries=target/sonar
          

          插件安裝

          SonarQube有一個強大的插件機制。以安裝漢化插件為例——

          1 按照圖示進(jìn)行操作:

          2 點擊 Install 按鈕后,將會彈出重啟SonarQube的提示,點擊即可重啟。重啟后,可看到類似如下的界面

          3 類似的方式,也可為SonarQube安裝其他插件。

          干貨分享

          最近將個人學(xué)習(xí)筆記整理成冊,使用PDF分享。關(guān)注我,回復(fù)如下代碼,即可獲得百度盤地址,無套路領(lǐng)取!

          ?001:《Java并發(fā)與高并發(fā)解決方案》學(xué)習(xí)筆記;

          ?002:《深入JVM內(nèi)核——原理、診斷與優(yōu)化》學(xué)習(xí)筆記;

          ?003:《Java面試寶典》

          ?004:《Docker開源書》

          ?005:《Kubernetes開源書》

          ?006:《DDD速成(領(lǐng)域驅(qū)動設(shè)計速成)》

          過前面章節(jié)我們可以看到,不論怎么構(gòu)建,單元測試覆蓋率一欄總是0%

          這是因為單元測試覆蓋率報告需要額外集成.這一節(jié)我們就講解如何在sonarqube里集成單元測試覆蓋率報告.

          這里需要借助Opencover來生成單元測試覆蓋報告文檔,Opencover前面章節(jié)我們介紹過,不了解的朋友可以查看一下前面相關(guān)部分的章節(jié).

          我在本地有一個包含單元測試項目(大家可以自己建一個包含單元測試的項目,關(guān)于單元測試前面章節(jié)也有詳細(xì)講解,這里不再贅述).進(jìn)入包含項目sln或者csproj的文件,執(zhí)行以下命令.

          MSBuild.SonarQube.Runner.exe begin /k:"mytest" /n:"mytest" /v:"v1.0" /d:sonar.cs.opencover.reportsPaths="%CD%\testcover.xml"
          
          msbuild.exe
          
          "E:\personalproject\newTest2018\ConsoleApp1\packages\OpenCover.4.6.519\tools\OpenCover.Console.exe" -output:"%CD%\testcover.xml" -register:user -target:"C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe" -targetargs:"%CD%\bin\Debug\NunitTest.dll"
          
          MSBuild.SonarQube.Runner.exe end
          

          Begin 和end是固定格式,這里begin部分多了一個/d選項,/d為dynamic properties 動態(tài)屬性.通過動態(tài)屬性指定單元測試報告的位置.%CD%即為當(dāng)前目錄

          第二段 msbuild.exe執(zhí)行構(gòu)建.
          第三段 這里是生成單元測試覆蓋率報告的關(guān)鍵. 首先指定Opencover所在位置,-register user 為注冊當(dāng)前windows用戶以使其有權(quán)限執(zhí)行.-output 指定覆蓋率文件輸出位置,這里必須和上面的 sonar.cs.opencover.reportsPaths保持一致. -target為要指定的單元測試runner,這里使用的是visual studio自帶的vstest.console.exe targetargs指定要進(jìn)行單元測試的目標(biāo)dll.

          執(zhí)行完成以后,我們再打開sonarqube web管理界面就會看到剛剛生成的mytest項目

          通過上圖我們可以看到mytest項目的單元測試覆蓋率為56.7%

          我們進(jìn)入mytest這個項目,然后點擊單元測試覆蓋率數(shù)字下面的鏈接

          點擊后進(jìn)入以下頁面:

          通過這個界面,我們可以看到每一個類的的單元測試覆蓋率和未覆蓋的行數(shù).我們點擊類名,便可以進(jìn)入具體的類.

          這個圖中,藍(lán)杠部分為單元測試覆蓋到的代碼,紅框部分則為未覆蓋到的代碼.

          代碼大視窗顯示.

          對于管理員來說,可能僅僅需要大致瀏覽一下代碼,然后告知具體開發(fā)者需要修改.對于開發(fā)者來說,可能需要詳細(xì)查看代碼.以上截圖只截了主視窗,實際上左側(cè)還有固定的導(dǎo)航欄.這樣對于查看代碼可能不是很友好,詳細(xì)查看代碼的時候我們可能想在更大的視窗里查看.這時候我們可以點擊右上角的"四杠圖標(biāo)"

          選擇open in new window便可以在新窗口中打開代碼.此時整個區(qū)域都是代碼,無關(guān)的內(nèi)容都沒了

          以上代碼雖然在一個單獨的視窗里顯示,但是仍然有藍(lán)杠和紅杠標(biāo)識,有些童鞋可能感覺不是很舒服,想要看到清潔代碼,此時點擊四框圖標(biāo)選擇Show raw source即可顯示原始代碼.


          原文地址:https://www.cnblogs.com/tylerzhou/p/11253855.html


          主站蜘蛛池模板: 日本高清一区二区三区| 日韩电影一区二区| 激情亚洲一区国产精品| 国产一区高清视频| 亚洲熟女乱色一区二区三区| 国产午夜精品免费一区二区三区| 欧洲精品一区二区三区| 国产吧一区在线视频| 日韩精品成人一区二区三区| 日韩精品无码一区二区视频 | 中文字幕日本一区| 成人无号精品一区二区三区| 日韩人妻无码一区二区三区99| 中文无码精品一区二区三区| 人妻无码一区二区三区| 无码人妻一区二区三区免费视频 | 老熟妇仑乱视频一区二区 | 亚洲综合一区二区国产精品| 亚洲一区精品无码| 亚洲国产精品乱码一区二区 | 国产综合视频在线观看一区| 亚洲熟妇成人精品一区| 亚洲一区二区三区在线观看网站| 久久精品黄AA片一区二区三区| 无码人妻精品一区二区三区久久| 无码人妻品一区二区三区精99| 无码精品一区二区三区在线| 久久久老熟女一区二区三区 | 国产精品视频一区二区三区无码| 国产日韩一区二区三免费高清| 日本道免费精品一区二区| 无码视频一区二区三区在线观看| 国产一区二区免费视频| 精品一区二区三区自拍图片区| 色久综合网精品一区二区| 亚洲欧美日韩一区二区三区在线| 精品无码人妻一区二区三区18| 国产熟女一区二区三区五月婷| 亚洲日本中文字幕一区二区三区 | 亚洲国产一区二区三区在线观看 | 欧美激情一区二区三区成人|