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