ช่วงนี้เป็นการ Re-Cap งาน Migrate จาก .NET4.7.2 > .NET6 ตัว Blog ช่วงนี้ จะมาแนวๆนี้เยอะหน่อยครับ ^__^
การเตรียมข้อมูล
- Test Report
- Test Report ใช้รูปแบบของ mstest ไม่ได้ sonar.cs.mstest.reportsPaths ยังไม่ได้พัฒนา ตามอ้างอิง Remove `sonar.cs.mstest.reportsPaths` from plugin coverage documentation · Issue #2529 · SonarSource/sonar-dotnet (github.com)
ดังนั้นต้องใช้ไฟล์ .trx แทน แต่ถ้าต้องการ html report เพิ่ม logger เข้าไป "--logger "trx;logfilename=${TESTREPORTPATH}\\${sub}.trx"
dotnet test --logger "trx;logfilename=${TESTREPORTPATH}\\\${sub}.trx" #NOTE sub ชื่อ test report พอดีของผมจะมีให้มัน custom ชื่อ ถ้าเอาตาม default มันไม่เหมาะกันคนอ่านครับ
- Test Coverage
- ถ้าอ้างอิงจาก Official Document Use code coverage for unit testing - .NET
- ตอนเรา New MS Test Project มา มันจะ Default Add Nuget coverlet.collector มาให้
- ตอน Generate Test Coverage เพิ่มคำสั่ง ดังนี้ //เพิ่ม --collect:"XPlat Code Coverage"
dotnet test --collect:"XPlat Code Coverage" --logger "trx;logfilename=${TESTREPORTPATH}\\\${sub}.trx"--logger "html;logfilename=${TESTREPORTPATH}\\\${sub}.html"
- แต่ทว่า Output ที่ได้ จะไม่สามารถเอาเข้า SonarQube ตรงๆได้
- ใช้ Tool ReportGenerator มาช่วย ใน Scenario
- รวมไฟล์ .trx ให้ได้ไฟล์เดียว โดยเจ้าไฟล์ .trx (Microsoft Visual Studio Test Results File) ที่เก็บ Test Report / Test Coverage ในแบบ xml ตอน Run dotnet test มันจะ Generate มาตาม Test Project ครับ
- แล้วให้ ReportGenerator แปลง Format สำหรับตัว SonarQube
- สำหรับการรวมไฟล์ .trx + แปลงไฟล์ของ SonarQube สามารถใช้คำสั่งด้านล่างนี้เลย
reportgenerator -reports:"$COVERAGEPATH\\**.xml" -targetdir:"$COVERAGEPATH\\sonarqubecoverage" -reporttypes:SonarQube
- Sonar Scanner .NET
- อันนี้สะดวกหน่อย ลง Tool จาก NuGet ได้เลย ถ้าเป็น .NET Framework เดิม ต้องเอา .zip มาแตตกเอาครับ โดยตัว Tools ติดตั้ง ดังนี้
dotnet tool install --global dotnet-sonarscanner
- ตัวอย่างการใช้งาน
dotnet sonarscanner begin /k:"project-key" /d:sonar.login="<token>" dotnet build <path to project file or .sln file> dotnet sonarscanner end /d:sonar.login="<token>"
- Import Test Report เพิ่ม Param sonar.cs.vstest.reportsPaths
/d:sonar.cs.vstest.reportsPaths="$TESTREPORTPATH\\*.trx"
- Import Test Coverage เพิ่ม Param sonar.coverageReportPaths
/d:sonar.coverageReportPaths="$COVERAGEPATH\\sonarqubecoverage\\SonarQube.xml"
- สำหรับ Parameter อื่นๆ ดูได้จาก
- SonarScanner for .NET (sonarqube.org)
- Test execution parameters (sonarqube.org)
คำสั่งทั้งหมด
- ถ้าใช้ Jenkins ประมาณนี้ครับ ตัว withSonarQubeEnv มันจะช่วยไม่ให้ตัว Credential ของ Sonar ฝั่งไปกับ Pipeline ครับ
withSonarQubeEnv(installationName: 'ds-sonarqube', credentialsId: 'sonarqube-jenkins') { powershell(script: """ dotnet sonarscanner begin /k:"com.ds.invest:invest-ui" /v:$BUILDVERSION /d:sonar.dotnet.excludeTestProjects=true /d:sonar.coverageReportPaths="$COVERAGEPATH\\sonarqubecoverage\\SonarQube.xml" /d:sonar.cs.vstest.reportsPaths="$TESTREPORTPATH\\*.trx" dotnet build WebAPI.Standard.sln -p:Configuration='${params.MODE}' -p:Platform="x64" -p:AssemblyVersion='$BUILDVERSION' -p:Version='$BUILDVERSION' -nodeReuse:false --maxcpucount:8 reportgenerator -reports:"$COVERAGEPATH\\**.xml" -targetdir:"$COVERAGEPATH\\sonarqubecoverage" -reporttypes:SonarQube dotnet sonarscanner end """) }
Reference
- Remove `sonar.cs.mstest.reportsPaths` from plugin coverage documentation · Issue #2529 · SonarSource/sonar-dotnet (github.com)
- c# - SonarQube test coverage .NET 5 - Stack Overflow
- SonarScanner for .NET (sonarqube.org)
- Test execution parameters (sonarqube.org)
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.