当前位置:网站首页>测试人进阶技能:单元测试报告应用指南
测试人进阶技能:单元测试报告应用指南
2022-07-02 00:36:00 【二 黑】
为什么需要单元测试
从产品角度而言,常规的功能测试、系统测试都是站在产品局部或全局功能进行测试,能够很好地与用户的需要相结合,但是缺乏了对产品研发细节(特别是代码细节的理解)。
从测试人员角度而言,功能测试和系统测试以及其他性能测试等等对测试人员的全局特性理解能力要求较高,只要测试人员能够掌握一两种自动化测试框架基本能够开展功能、性能自动化测试,但是借助于测试框架进行研发降低了测试人员对代码的掌握、理解要求。
从开发人员角度而言,用户需求往往并不是具体的、全面的,因此基于用户需求转换成开发文档或着针对某个功能编写开发代码往往也存在着局限性(也即我们常说的bug)。
因此,编写单元测试可以帮助测试人员更好地理解代码细节、提高代码开发能力,也能帮助开发人员提前辨识代码中可能存在的bug,提高代码的容错能力。
如何制定单元测试报告
良好的单元测试报告能够帮助测试人员更好地分析、挖掘潜藏的问题。那么,如何制定单元测试报告呢,从哪些维度出发呢?在这里我们主要从测试人员角度出发来思考这个问题。
首先,我们需要报告中能够呈现我们的测试用例数量和测试结果(pass或者fail),以及错误细节。
其次,从单元测试本身特点出发,我们需要报告中能够呈现出针对单元代码分支、单元方法等的覆盖率,更好地帮助我们梳理和测试用例设计的优良。
在此,我们使用surefire-report统计测试用例数量和测试结果,使用jacoco统计单元测覆盖率(注:本文默认测试用例的执行方式是mvn test)。
如何配置
surefire-report配置
配置方法:配置maven-surefire-plugin插件,maven-surefire-plugin是maven默认的test执行器,配置方法如下图所示:
上图中testFailureIgnore表示忽略单元测试中的错误继续构建,/*Test.java:表示任何子目录下所有命名以Test结尾的Java类,/Test*.java:表示不执行任何子目录下所有命名以Test开头的Java类。
执行方法:使用mvn test surefire-report:report即可,会生成在/target/site/surefire-report.html测试报告文档。
如下图所示:
Tests显示总用例数;
Errors指的是程序没有考虑到的情况,例如异常未能捕捉;
Failure指的是预期的结果与实际运行单元的结果不同所导致,常出现在断言处;
Skipped表示跳过的测试用例数;
Success Rate表示用例成功率(=成功用例数/总用例数);
Time显示总耗时;
Package List显示详细的package下用例执行结果。
jacoco配置
配置方法:配置jacoco-maven-plugin插件,配置方法如下图所示,phase表示插件运行的生命周期阶段。
执行方法:mvn test执行即可。会在/target/site/jacoco/目录下生成总的覆盖率报告index.html和不同package的单元测试覆盖率报告…/xxx/index.html。此外还有csv和xml格式的单元测试覆盖率报告。
如上图所示为某个package的单元测试覆盖率报告:
红色进度条表未覆盖;
绿色进度条表示已覆盖;
Cov 为总体覆盖率;
Missed Instructions表示代码覆盖率;
Missed Branches表示逻辑分支覆盖率;
Missed Cxty表示判断执行数;
Missed Lines表示代码行数;
Methods表示方法个数。
如何利用单元测试报告
至此,我们讲了单元测试的重要性以及如何设置和查看单元测试报告。现在我们来聊聊如何利用单元测试报告。
本文中我们讲述了两种单元测试报告,一种是从测试人员角度出发方便测试人员统计单元测试用例数和分析用例执行结果的surefire-report报告,另一种是可以帮助测试人员和开发人员深入分析单元测试用例覆盖代码率的jacoco报告。
对于surefire-report报告而言,我们主要是用于统计用例数和通过用例执行结果判断用例设计是否合理、测试环境是否存在问题,可以类似于某种更接近于代码层的“功能测试”报告。
对于jacoco单元测试覆盖率报告,我们可以借助单元测试覆盖率判可以断测试用例设计是否缺漏,从而补全遗漏的测试用例。如下图所示为某个Package下某个类中某个方法的单元测试覆盖率报告。
如上图所示,绿色钻石表示全部覆盖,黄色钻石表示部分覆盖,红色钻石表示没有覆盖。
通过上图测试报告我们可以看出缺少覆盖红色部分的单元测试用例,因此可以重新设计、补全对应红色分支部分的测试用例。
小结
对于大多测试人员来说,工作中少有机会接触单元测试。但是,从职业发展路径和个人能力提升方面来看,学习单元测试不仅能够提高测试人员业务能力,对代码的理解程度,还能够在某些程度上提高部分“生存能力”吧,俗话说“技多不压身”正是如此。
学习资源分享
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走
这些资料,对于想进阶【自动化测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助…….
加入下方我的交流群免费获取!
边栏推荐
- SQL数据分析之子查询的综合用法和案例题【耐心整理】
- Friends circle community program source code sharing
- Powerful calendar wechat applet source code - support the main mode of doing more traffic
- Bc35 & bc95 onenet mqtt (old)
- @Valid parameter verification does not take effect
- Leetcode skimming: stack and queue 06 (top k high-frequency elements)
- Practical calculation of the whole process of operational amplifier hysteresis comparator
- Leetcode skimming: stack and queue 03 (valid parentheses)
- Halcon knowledge: an attempt of 3D reconstruction
- JS——图片转base码 、base转File对象
猜你喜欢
King combat power query renamed toolbox applet source code - with traffic main incentive advertisement
Random avatar encyclopedia, multi category wechat applet source code with history_ Support traffic master
Qt5.12.9 migration tutorial based on Quanzhi H3
Common loss function of deep learning
Bc35 & bc95 onenet mqtt (old)
Export default the exported object cannot be deconstructed, and module Differences between exports
sso单点登录的实现。
How do Lenovo computers connect Bluetooth headsets?
Jielizhi, production line assembly link [chapter]
GaussDB(for MySQL) :Partial Result Cache,通过缓存中间结果对算子进行加速
随机推荐
[bottom pop-up selector] uniapp picker component - scroll selector popped up at the bottom
UVM tutorial
Cmake engineering related
基于全志H3的QT5.12.9移植教程
【微信授权登录】uniapp开发小程序,实现获取微信授权登录功能
Jielizhi Bluetooth headset quality control and production skills [chapter]
449 original code, complement code, inverse code
Using multithreaded callable to query Oracle Database
Intelligent operation and maintenance practice: banking business process and single transaction tracking
GaussDB(for MySQL) :Partial Result Cache,通过缓存中间结果对算子进行加速
[wechat authorized login] the small program developed by uniapp realizes the function of obtaining wechat authorized login
Guide d'installation du serveur SQL
export default 导出的对象,不能解构问题,和module.exports的区别
4. Object mapping Mapstercover
js 公共库 cdn 推荐
Graduation season | Huawei experts teach the interview secret: how to get a high paying offer from a large factory?
Qt5.12.9 migration tutorial based on Quanzhi H3
I would like to ask, which securities is better for securities account opening? Is it safe to open a mobile account?
Node——Egg 创建本地文件访问接口
Node——添加压缩文件