【全】.net core平台单元/集成测试结果、覆盖率、圈复杂度到可视化HTML报告之路...
.net core 平臺的測試框架有好幾個可供選擇,內置的MSTest框架、NUnit框架以及強大好用的xUnit框架,依托宇宙最強的編輯器Visual Studio,可以開展非常友好的測試以及快樂的展示測試的結果。如果僅限于此,那么這篇文章對你來說就是多余的,不妨看看其他的東東;但如果你想脫離VisualStudio的舒服圈,獨立產生可以自由發布和查看的HTML報告,那么也許本篇文章能夠幫你節約大量的嘗試時間和徹底擺脫沮喪的心理,而體驗一場快樂的旅程。
📢歡迎點贊 :👍 收藏 ?留言 📝 如有錯誤敬請指正,賜人玫瑰,手留余香!
📢本文作者:由webmote 原創,首發于 【CSDN】
📢作者格言:生活在于折騰,當你不折騰生活時,生活就開始折騰你,讓我們一起加油!💪💪💪
1. 上手xUnit測試
利用向導,來生成一個新的xUnit測試項目即可。
當然,你也可以改造一個類庫文件,只需要在Project文件內引用這些類庫即可。
編寫xUnit的測試用例超級簡單,只需要在類函數增加聲明[Fact]即可。
有關怎么編寫單元測試,可以參考《[關于單元測試,你不知道的那些事]。(https://blog.csdn.net/codeex/article/details/120476609)》
好了,一切就緒,開始我們的生成報告之旅。
2. 代碼覆蓋率(Code Coverage)
據微軟的文檔記載,數據采集功能是在測試平臺的15.3增加支持的,其被集成在VS 2017 15.3+ 和dotnet-cli 2.0.0+ 上,而有了數據采集擴展后,就可以對會話和測試用例的一些事件就行分析了,在之上進行擴展就有了覆蓋率、圈復雜度等其他指標的度量了。
使用如下命令收集覆蓋率等的測試:
dotnet test --collect "Code Coverage"在 Windows 上,可以使用 --collect “Code Coverage” 選項收集代碼覆蓋率。此選項將生成“.coverage”文件,該文件可在?Visual Studio 2019 Enterprise中打開。
當然在Linux平臺,這個命令的響應是:
數據收集器“Code Coverage”消息: 沒有可用的代碼覆蓋率數據。代碼覆蓋率目前僅在 Windows 上受支持。。
若要在 .NET Core 支持的任何平臺上收集代碼覆蓋率,請安裝 Coverlet 并使用 --collect:“XPlat Code Coverage” 選項。
第一小節給出的例子中已經安裝了Coverlet包支持。
因此我們可以執行下列命令,產生Coverage.cobertura.xml
dotnet test --collect:"XPlat Code Coverage"正在啟動測試執行,請稍候…
總共 1 個測試文件與指定模式相匹配。
附件:
/root/dotnet/TestResults/93b42aca-c0e7-4e39-9253-c176506b3be0/coverage.cobertura.xml
已通過! - 失敗: 0,通過: 1,已跳過: 0,總計: 1,持續時間: < 1 ms
產生的結果存放在 TestResults文件夾的隨機產生的GUID文件夾內。
此處應該是?dotnet-cli?的限制,收集的結果并不能指定為確切的文件夾,因此不要費勁巴拉的找參數了。
注意: 如果需要集成到自動化工具內,需要考慮怎么從這個隨機的文件夾把文件拷貝出來,一種方式是利用shell的find/grep等命令搜索命令輸出的文本,找到完整的輸出路徑。
有了這個xml文件以及ReportGenerator工具,我們就可以產生測試覆蓋率和圈復雜度的報告了。
命令執行后產生一堆的html、css、js文件,看到這么多文件不要慌,讓我們找到index.html,打開它就可以了。
酷炫的報告就這么赤果果的呈現在你的面前。
3.測試結果報告(Test Result)
測試結果報告說容易也容易,說復雜,那就非常的復雜了。
為什么這么說呢?
主要是因為dotnet-cli已經自帶了報告結果的輸出。
例如,下面命令(在項目目錄下),就輸出了簡單的統計結果:
dotnet testStarting test execution, please wait…
A total of 1 test files matched the specified pattern.
Passed! - Failed: 0, Passed: 3, Skipped: 0, Total: 3, Duration: 3 ms - MyXunitTest.dll (net5.0)
是的,如果這樣就夠了,那么就非常簡單,是不是?
當然如果你還想要稍微詳細點的輸出,也是支持的,我們利用console來收集信息,命令如下:
dotnet test -l "console;verbosity=detailed"輸出內容如下:
Starting test execution, please wait…
A total of 1 test files matched the specified pattern.
D:\github\xunit-xml2html\MyXunitTest\bin\Debug\net5.0\MyXunitTest.dll
[xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v2.4.3+1b45f5407b (64-bit .NET 5.0.11)
[xUnit.net 00:00:00.24] Discovering: MyXunitTest
[xUnit.net 00:00:00.27] Discovered: MyXunitTest
[xUnit.net 00:00:00.27] Starting: MyXunitTest
[xUnit.net 00:00:00.32] Finished: MyXunitTest
Passed MyXunitTest.UnitTest1.Test2 [1 ms]
Passed MyXunitTest.UnitTest1.Test1 [< 1 ms]
Passed MyXunitTest.UnitTest1.Test3 [< 1 ms]
Test Run Successful.
Total tests: 3
Passed: 3
Total time: 1.1061 Seconds
嗯,到此為止,仍然是利用dotnet-cli就可以完成的,那如果非要一個html的報告,那么問題就來了。
3.1 TRX格式的價值
TRX測試結果,估計只有微軟能看懂吧,因此輸出的結果可以通過VisualStudio打開。
嗯,是的,可以分享給有VS安裝的同事了。
命令:
這個結果文件有一點值得稱贊,它不需要企業版的VS。
GitHub網絡上還有很多Trx轉到html的工具,由于年老失修,都是殘廢之身了。
例如 TrxerConsole 和?trx2html,如果有喜歡折騰的朋友,可以下來瞧瞧,?trx2html 還是可以生成半截html的,界面也很美觀,只可惜兼容性已經非常差了,如果有達人維護下,應該仍是個好工具。
其他還有一些非主流,幾乎都是無用的。
3.2 輸出到xml文件
既然TRX的路已經是斷頭路了,那么我們只有重回xml這條大路上。
關鍵的一刻來了。
這里需要引入一個包?XunitXml.TestLogger?,可以去github地址。
它支持NUnit和Junit,是非常好的xml生成工具。
Xunit logger 產生的xml是xunit v2 format?.
命令如下:
dotnet test --logger:"xunit;LogFilePath=result.xml"輸出的路徑是指哪打哪。
由xml生成到html不是一個難事了,你可以自己寫個轉換工具。
當然了,這里有個現成的轉換工具:?xunit-xml2html。
利用工具,可以方便的把xml生成為html了。
嗯嗯,大功告成,一切都已經搞定了。
3.3 .net core 測試web時缺少 deps.json文件
有時候,項目會提示 threw exception: System.InvalidOperationException: Can’t find’[path removed]\TestRepro.Tests\bin\Debug\TestRepro.deps.json’.
這時候可能是缺少引用這個包導致的,這個錯誤很隱晦,CI的時候出現率極高。
Microsoft.AspNetCore.Mvc.Testing4. 小結
.net core 測試的報告節講完了,你應該可以拿給領導一份滿意的答卷了吧?
👓都看到這了,還在乎點個贊嗎?
👓都點贊了,還在乎一個收藏嗎?
👓都收藏了,還在乎一個評論嗎?
總結
以上是生活随笔為你收集整理的【全】.net core平台单元/集成测试结果、覆盖率、圈复杂度到可视化HTML报告之路...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何判断当前请求的是健康检查API
- 下一篇: 让前端与后端异步起来