【全】.net core平台单元/集成测试结果、覆盖率、圈复杂度到可视化HTML报告之路...

.net core 平台的测试框架有好几个可供选择,内置的MSTest框架、NUnit框架以及强大好用的xUnit框架,依托宇宙最强的编辑器Visual Studio,可以开展非常友好的测试以及快乐的展示测试的结果。如果仅限于此,那么这篇文章对你来说就是多余的,不妨看看其他的东东;但如果你想脱离VisualStudio的舒服圈,独立产生可以自由发布和查看的HTML报告,那么也许本篇文章能够帮你节约大量的尝试时间和彻底摆脱沮丧的心理,而体验一场快乐的旅程。

  • 📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!

  • 📢本文作者:由webmote 原创,首发于 【CSDN】

  • 📢作者格言:生活在于折腾,当你不折腾生活时,生活就开始折腾你,让我们一起加油!💪💪💪

1. 上手xUnit测试

利用向导,来生成一个新的xUnit测试项目即可。
9c8458760fd89a24d47249e2b96a729c.png
当然,你也可以改造一个类库文件,只需要在Project文件内引用这些类库即可。

<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><TargetFramework>net5.0</TargetFramework><IsPackable>false</IsPackable></PropertyGroup><ItemGroup><PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0" /><PackageReference Include="xunit" Version="2.4.1" /><PackageReference Include="xunit.runner.visualstudio" Version="2.4.3"><IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets><PrivateAssets>all</PrivateAssets></PackageReference><PackageReference Include="coverlet.collector" Version="3.1.0"><IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets><PrivateAssets>all</PrivateAssets></PackageReference></ItemGroup></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工具,我们就可以产生测试覆盖率和圈复杂度的报告了。
a1c17f70f9bb028296bcd91e5d730194.png

reportgenerator -reports:coverage.cobertura.xml -targetdir:report

命令执行后产生一堆的html、css、js文件,看到这么多文件不要慌,让我们找到index.html,打开它就可以了。

酷炫的报告就这么赤果果的呈现在你的面前。
d326e5427cf97987a4233f602da56966.png

3.测试结果报告(Test Result)

测试结果报告说容易也容易,说复杂,那就非常的复杂了。

为什么这么说呢?

主要是因为dotnet-cli已经自带了报告结果的输出。

例如,下面命令(在项目目录下),就输出了简单的统计结果:

dotnet test

Starting 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安装的同事了。
命令:

dotnet test --logger trx

883263b3f098e3160cf1f4eafb57926b.png

这个结果文件有一点值得称赞,它不需要企业版的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了。

3e1cbf56916970e6fb9c1e339ea1dcd7.png
嗯嗯,大功告成,一切都已经搞定了。

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.Testing

4. 小结

.net core 测试的报告节讲完了,你应该可以拿给领导一份满意的答卷了吧?

👓都看到这了,还在乎点个赞吗?

👓都点赞了,还在乎一个收藏吗?

👓都收藏了,还在乎一个评论吗?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295880.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

哪种HTML列表会自动编号,HTML列表的种类

HTML 支持有序、无序和定义列表无序列表无序列表是一个项目的列表&#xff0c;此列项目使用粗体圆点(典型的小黑圆圈)进行标记。无序列表始于 标签。每个列表项始于 。(推荐学习&#xff1a;HTML入门教程)CoffeeMilk浏览器显示如下&#xff1a;CoffeeMilk列表项内部可以使用段落…

Android之AsyncTask异步任务详解总结

Android 多线程----AsyncTask异步任务详解 【正文】 本文将讲解一下Android的多线程的知识&#xff0c;以及如何通过AsyncTask机制来实现线程之间的通信。 一、Android当中的多线程&#xff1a; 在Android当中&#xff0c;当一个应用程序的组件启动的时候&#xff0c;并且没有其…

docker源码_使用docker、Jenkins、gitlee、springboot、搭建个人博客网站 并实现CI/CD 外加机器人提醒...

看朱成碧思纷纷&#xff0c;憔悴支离为忆君。--- barcke前言:服务器用的是云服务器买的阿里的linux、jdk1.8、docker服务端使用的为阿里的docker镜像仓库、mysql使用5.7版本的、redis使用最新版即可、文件服务使用的阿里的oss.项目采用jib推送docker镜像.附录: git源码地址—-h…

初次见面,如何令人永远难忘

1 初次见面&#xff0c;如何令人永远难忘2 见到熟人和见到偶像的区别3 真正的好朋友是在最紧急的时刻帮你一把的那个人4 当你正在减肥时&#xff0c;你朋友约你出去吃饭5 被这样的友谊感动到了6 等我老了也要和大爷一样做一个时尚的人不说别的大爷好酷↓ ↓ ↓

号称迄今为止最快,.NET6带来了什么?

北京时间11月8号午夜&#xff0c;.NET6正式发布。该版本经历了一万多次Git提交&#xff0c;号称迄今为止最快的.NET&#xff0c;究竟有哪些亮点呢&#xff1f;1LTS版本&#xff0c;发布前经过了长期的线上生产压力测试&#xff1b;2性能提升&#xff0c;包括文件I/O&#xff0c…

linux 文件系统的管理 (硬盘)

RH133—Unit4 文件系统的管理 一、系统在初始化时如何识别硬盘 1、系统初始时根据MBR的信息来识别硬盘&#xff0c;其中包括了一些执行文件就来载入系统&#xff0c;这些执行文件就是MBR里前面446bytes里的boot loader 程式&#xff0c;而后面的16X4的空间就是存储分区表信息的…

Android之多线程----异步消息处理机制之Handler详解

一、handler的引入&#xff1a; 我们都知道&#xff0c;Android UI是线程不安全的&#xff0c;如果在子线程中尝试进行UI操作&#xff0c;程序就有可能会崩溃。相信大家在日常的工作当中都会经常遇到这个问题&#xff0c;解决的方案应该也是早已烂熟于心&#xff0c;即创建一个…

colorkey唇釉是否安全_colorkey空气唇釉,19/支

国货之光来喽 !!!!超火的colorkey空气唇釉给你们安排上 !!!R601 酒酿梅子超酷超性感的一支 !!这个颜色是偏调但是不显老的深草莓红 一点都不挑皮 谁涂谁白一个度&#xff5e;厚厚的涂一层气场值upup !R608 焦糖红棕偏橘棕调的红棕板栗 !!薄涂厚涂都显白、显气质&#xff01;味道…

初识Ildasm.exe——IL反编译的实用工具(转自Youngman)

Ildasm.exe 概要&#xff1a; 一.前言&#xff1a; 微软的IL反编译实用程序——Ildasm.exe&#xff0c;可以对可执行文件&#xff08;ex&#xff0c;经典的控制台Hello World 的 exe 可执行文件&#xff09;抽取出 IL 代码&#xff0c;并且给出命名空间以及类的视图。在讲述如何…

就想问问你们,这种女朋友从哪里来的?

1 女朋友从哪里来的2 能养好这宠物的对女朋友包容心肯定不赖3 墙都不扶就服这些停车的人4 成功避过所有的球&#xff0c;将白球打入底袋5 谁知道我六年级经历了什么6 这设计&#xff0c;做到了真正意义上的防盗7 这就是我想要的生活面朝大海、春暖花开我也想梦想成真↓ …

基于事件驱动架构构建微服务第10部分:在docker容器内运行单元测试

原文链接&#xff1a;https://logcorner.com/building-microservices-through-event-driven-architecture-part11-run-unit-tests-inside-a-docker-container/在本教程中&#xff0c;我将展示如何在docker容器中运行单元测试。因为我将使用kubernetes在容器中运行微服务&#x…

【iOS-Cocos2d游戏开发之二十】精灵的基础知识点总汇(位图操作/贴图更换/重排z轴等)以及利用CCSprite与CCLayerColor制作简单遮盖层!...

为什么80%的码农都做不了架构师&#xff1f;>>> 李华明Himi 原创,转载务必在明显处注明&#xff1a; 转载自 【黑米GameDev街区】 原文链接: http://www.himigame.com/iphone-cocos2d/516.html 最近写了不少Cocos2d的博文了&#xff0c;那么由于Himi介绍的一般都是…

中柏平板u盘启动_大冶深圳东莞平板硫化机推选得新科技自动化

大冶深圳东莞平板硫化机推选得新科技自动化东莞市得新科技有限公司, 在国内外的销售机器公司。公司位于广东省东莞市。企业致力于点胶设备&#xff0c;硅胶设备&#xff0c;纺织品涂层的先进技术、检测经验发展国外&#xff0c;全面提升国外产品质量&#xff0c;推动国内行业健…

Console-算法-递归算法示例

ylbtech-Arithmetic:Console-算法-递归算法示例1.A&#xff0c;案例-- -- ylb&#xff1a;算法-- type&#xff1a;递归算法-- thankyou:sunshine, 谢谢你的默默付出-- 10:50 2012-04-06-- 1.B&#xff0c;解决方案1.B.1,阶乘 using System;namespace ConsoleApplication1 {cla…

如何才能避免聚会尬聊

全世界只有3.14 % 的人关注了爆炸吧知识如何丰富空闲时光&#xff1f;如何在短时间内获取最最专业的文化、艺术&#xff1f;小编给大家推荐几个公众号它们有趣有颜有料长按二维码&#xff0c;选择“识别图中二维码”关注印客美学id&#xff1a;inkbetter△长按二维码“识别”关…

Excel快速改变行列的次序

改变行列次序是在Excel中常常需要进行的操作&#xff0c;多数用户的方法是先剪切要调整的行或列&#xff0c;然后选定目标位置&#xff0c;单击菜单“插入”→“剪切单元格”。事实上&#xff0c;使用键盘来配合的话&#xff0c;改变行列的次序可以更快捷。比如&#xff0c;在图…

.NET6 如期⽽⾄

.NET6大家好&#xff0c;经过多个月的迭代&#xff0c;.NET 6正式版如期和大家见面了&#xff01;你安装好了吗&#xff1f;还是等等党&#xff1f;希望看完这篇文章你会对.NET 6有更多了解。自2014年11月12日宣布开源后&#xff0c;.NET就成为了一个跨平台、面向多场景的技术。…

Wordpress 提速之 Gzip 压缩

今天来聊下 wordpress 提速&#xff0c;其实关于这方面的话题网上其实蛮多的&#xff0c;速度对一个网站来说无疑是非常重要的&#xff0c;对于速度的追求也是无止境的&#xff0c;在这方面的表率无疑就是 shawn 了&#xff0c;看他博客的很多技巧都是针对速度来的……不过话说…

忍“乳”负重,身材好的女孩子究竟有多不容易?我从科学的角度算出来了……...

全世界只有3.14 % 的人关注了爆炸吧知识大家好&#xff0c;满肚子奇怪知识&#xff0c;用科学眼光看世界的小编又来了。先问大家一个问题&#xff1a;你最喜欢看女孩子的哪里&#xff1f;相信不少人&#xff0c;不论男女都想到了一个地方。不论男女&#xff0c;都希望自己能“大…

getchar()到底怎么用_怎样才能真正发挥肥效,腐植酸水溶肥到底怎么用

施肥是农业生产中的重要环节&#xff0c;不管是大田作物还是花草苗木&#xff0c;水肥充足才能健康生长。而施肥不是看用了多少&#xff0c;而是看转化率&#xff0c;有多少真正被植物所吸收利用。许多化肥看着一大袋一大袋的用&#xff0c;结果都浪费了或者造成徒长一点用处都…