在我們的 Jenkins 管道中,我們使用 SonarQube 來報告我們的代碼覆寫率。在運行所有單元/集成測驗以生成 .coverage 檔案后,我們需要分析此檔案以創建“.coverage.coveragexml”,SonarQube 最終使用它來解釋代碼覆寫率。我們通過使用 CodeCoverage.exe 來做到這一點:
"C:\Program Files (x86)\Microsoft Visual Studio\2022\TestAgent\Team Tools\Dynamic Code Coverage Tools\CodeCoverage.exe" analyze /output:"{somePath}\{someName}.coverage.coveragexml" "{somePath}\{someName}.coverage"
此命令似乎正在運行,但是當您運行dir /s *.coveragexml(在目錄中)時,它會顯示如下內容:
Directory of C:\jenkins\path\to\TestResults\coverageFile
03/22/2022 04:59 PM 64 ContainerAdministrator_DC420D3FA0BA_2022-03-22.16_46_43.coverage.coveragexml
1 File(s) 64 bytes
64 位元組實際上不算什么——我相信這就是我們的 SonarQube 指標顯示我們現在覆寫率為 0 的原因。
我添加了相同的dir命令,只是這次檢查.coverage檔案,而那些回傳的檔案中只有 10 個位元組 - 讓我認為這些檔案基本上是空的。我看到這個帖子似乎是一個類似的問題。接受的答案說將平臺型別從 x86 更改為 x64,但這在我的情況下不起作用。
用于運行我們測驗的 vstest.console 命令是:
vstest.console /Parallel /EnableCodeCoverage /Logger:trx /Platform:x86 ".\somePath\Test.dll"
這個問題最初是在我們對 Jenkinsfile 進行更改以在啟動 CodeCoverage 可執行檔案的命令中使用 Visual Studio 2022 而不是 2019(基礎映像已更新)時開始出現的。
什么可能導致覆寫檔案幾乎/完全為空,我該如何解決?
uj5u.com熱心網友回復:
看來我們使用的基本映像必須具有代碼覆寫工具的非企業版(這是一項要求)。我們使用企業版工具(我的機器上安裝了 Visual Studio 2022 Enterprise)在本地測驗了我們的 SonarQube 專案命令,生成的覆寫檔案包含正確的資料。但是,當我們使用 Visual Studio Professional 安裝時,檔案是空的,就像我們的 Jenkins 管道一樣。
如前所述,這在基礎映像更新時開始發生 - 特別是在2021 年 11 月 8 日左右。我們使用的基礎 Docker 映像(mcr.microsoft.com/dotnet/framework/sdk:4.8-20220210-windowsservercore-ltsc2019)似乎具有最新的 2022 工具,但它不能是企業版 - 因此是空檔案。
我們將管道切換為使用dotCover來執行分析,它按預期作業,我們的 SonarQube 覆寫恢復正常。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/451976.html
