测试人进阶技能:单元测试报告应用指南

news2024/11/24 22:55:43

为什么需要单元测试

从产品角度而言,常规的功能测试、系统测试都是站在产品局部或全局功能进行测试,能够很好地与用户的需要相结合,但是缺乏了对产品研发细节(特别是代码细节的理解)。

从测试人员角度而言,功能测试和系统测试以及其他性能测试等等对测试人员的全局特性理解能力要求较高,只要测试人员能够掌握一两种自动化测试框架基本能够开展功能、性能自动化测试,但是借助于测试框架进行研发降低了测试人员对代码的掌握、理解要求。

从开发人员角度而言,用户需求往往并不是具体的、全面的,因此基于用户需求转换成开发文档或着针对某个功能编写开发代码往往也存在着局限性(也即我们常说的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-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下某个类中某个方法的单元测试覆盖率报告。在这里插入图片描述

如上图所示,绿色钻石表示全部覆盖,黄色钻石表示部分覆盖,红色钻石表示没有覆盖。

通过上图测试报告我们可以看出缺少覆盖红色部分的单元测试用例,因此可以重新设计、补全对应红色分支部分的测试用例。

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

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

相关文章

Python程序设计基础:函数(二)

文章目录 一、lambda()函数二、递归函数三、变量的作用域 一、lambda()函数 lambda()函数是一种简便的,将函数定义在同一行的函数方法。lambda()实际上生成了一个函数对象(匿名函数),它主要用于需要函数对象作为参数或函数比较简…

实时安全分析监控加强网络安全

网络犯罪分子只需几分钟,有时甚至几秒钟即可泄露敏感数据。但是,IT 团队可能无法在数周内发现这些违规行为。通常,这些违规行为是由外部方或客户发现的,到那时为时已晚。随着网络漏洞的激增,对安全分析的需求空前高涨。…

运行python安装包没找到

一、错误信息 ImportError: dlopen(/Users/menghuiding/Library/Python/3.8/lib/python/site-packages/PIL/_imaging.cpython-38-darwin.so, 0x0002): tried: /Users/menghuiding/Library/Python/3.8/lib/python/site-packages/PIL/_imaging.cpython-38-darwin.so (mach-o fil…

less基本使用

1 less中的变量 //对值进行声明 link-color: #ccc//定义变量名称 .{sleName} {}bg: background-color; //定义属性名称 .container {{bg}: red; }2 继承(复用重复样式) //继承必须位于选择器最后 //继承选择器名不能为变量 .a:hover:extend(.b) {}.a {…

使用ggplot2绘制热图(1)

#使用ggplot2绘制热图 library(ggplot2) #清空 rm(listls()) gc() # 创建数据集 data <- mtcars # 计算相关系数矩阵 cor_matrix <- cor(data) # 将相关系数矩阵转换为长格式&#xff08;用于绘制热图&#xff09; cor_data <- reshape2::melt(cor_matrix) str(cor_da…

揭秘国产chatGPT大语言模型能力PK之001:ChatGLM1-2

一、问题清单: 1.我女朋友的老公应该叫我什么&#xff1f; 2.为什么我的女朋友还有老公&#xff1f; 3.你觉得我应该怎么做&#xff1f; 4.我想要获得爱情&#xff0c;我女朋友也爱我&#xff0c;我女朋友也爱她的老公&#xff0c;但他的老公恨我&#xff0c;我该怎么办&am…

基于微服务+Java+Spring Cloud +Vue+UniApp +MySql实现的智慧工地云平台源码

基于微服务JavaSpring Cloud VueUniApp MySql开发的智慧工地云平台源码 智慧工地概念&#xff1a; 智慧工地就是互联网建筑工地&#xff0c;是将互联网的理念和技术引入建筑工地&#xff0c;然后以物联网、移动互联网技术为基础&#xff0c;充分应用BIM、大数据、人工智能、移…

【深度学习】NLP中的对抗训练

在NLP中&#xff0c;对抗训练往往都是针对嵌入层&#xff08;包括词嵌入&#xff0c;位置嵌入&#xff0c;segment嵌入等等&#xff09;开展的&#xff0c;思想很简单&#xff0c;即针对嵌入层添加干扰&#xff0c;从而提高模型的鲁棒性和泛化能力&#xff0c;下面结合具体代码…

剑指offer(C++)-JZ56:数组中只出现一次的两个数字(算法-位运算)

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 题目描述&#xff1a; 一个整型数组里除了两个数字只出现一次&#xff0c;其他的数字都出现了两次。请写程序找出这两个只出现一…

DoIP学习笔记系列:(五)“安全认证”的.dll从何而来?

文章目录 1. “安全认证”的.dll从何而来?1.1 .dll文件base1.2 增加客户需求算法传送门 DoIP学习笔记系列:导航篇 1. “安全认证”的.dll从何而来? 无论是用CANoe还是VFlash,亦或是编辑cdd文件,都需要加载一个与$27服务相关的.dll(Windows的动态库文件),这个文件是从哪…

ES踩坑记录之UNASSIGNED分片无法恢复

问题背景 换节点 我们线上有一套ES集群&#xff0c;三台机器&#xff0c;共运行了6个节点。一直在线上跑了几个月也一直没出什么问题。然而好巧不巧&#xff0c;就在昨天&#xff0c;集群中的3号节点磁盘出现故障&#xff0c;导致机器直接瘫痪。本来大家觉得问题不大&#xf…

Lua学习记录

Lua基础了解 Lua的注释通过 (-- 单行注释&#xff0c;--[[ ]] 多行注释)可以不加&#xff1b; 多个变量赋值&#xff0c;按顺序赋值&#xff0c;没有则为nil&#xff1b; function的简单用法&#xff0c;多个返回值配合多重赋值&#xff0c;以end为结束标志 Lua下标从1开始&…

R语言生存分析(机器学习)(1)——GBM(梯度提升机)

GBM是一种集成学习算法&#xff0c;它结合了多个弱学习器&#xff08;通常是决策树&#xff09;来构建一个强大的预测模型。GBM使用“Boosting”的技术来训练弱学习器&#xff0c;这种技术是一个迭代的过程&#xff0c;每一轮都会关注之前轮次中预测效果较差的样本&#xff0c;…

二叉树题目:二叉树的直径

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;二叉树的直径 出处&#xff1a;543. 二叉树的直径 难度 3 级 题目描述 要求 给定二叉树的根结点 root \texttt{root} root&#xff0c;返回其直径…

Docker 基本管理(一)

目录 一、虚拟化简介 1.1.虚拟化概述 1.2.cpu的时间分片&#xff08;cpu虚拟化&#xff09; 1.3.cpu虚拟化性性能瓶颈 1.4.虚拟化工作原理 1.5 虚拟化类型 1.6 虚拟化功能 ​二、Docker容器概述 2.1 docker是什么&#xff1f; 2.2 使用docker有什么意义&#xff…

nginx上web服务的基本安全优化、服务性能优化、访问日志优化、目录资源优化和防盗链配置简介

一.基本安全优化 1.隐藏nginx软件版本信息 2.更改源码来隐藏软件名和版本 &#xff08;1&#xff09;修改第一个文件&#xff08;核心头文件&#xff09;&#xff0c;在nginx安装目录下找到这个文件并修改 &#xff08;2&#xff09;第二个文件 &#xff08;3&#xff09;…

算法通过村第三关-数组青铜笔记|单调数组

文章目录 前言单调数组问题搜索插入位置&#xff1a;数组合并问题&#xff1a;总结 前言 提示&#xff1a;本份真诚面对自己、坦然无碍面对他人&#xff0c;就是优雅。 数组中的比较经典性问题: 单调数组问题数组合并问题 单调数组问题 参考例子&#xff1a;896. 单调数列…

【BEV Review】论文 Delving into the Devils of Bird’s-eye-view 2022-9 笔记

背景 一般来说&#xff0c;自动驾驶车辆的视觉传感器&#xff08;比如摄像头&#xff09;安装在车身上方或者车内后视镜上。无论哪个位置&#xff0c;摄像头所得到的都是真实世界在透视视图&#xff08;Perspective View&#xff09;下的投影&#xff08;世界坐标系到图像坐标系…

Docker数据卷容器

1.数据卷容器介绍 即使数据卷容器c3挂掉也不会影响c1和c2通信。 2.配置数据卷容器 创建启动c3数据卷容器&#xff0c;使用-v参数设置数据卷。volume为目录&#xff0c;这种方式数据卷目录就不用写了&#xff0c;直接写宿主机目录。 创建c1、c2容器&#xff0c;使用–volum…

MapStruct 中 Java Bean 映射代码生成器的基本使用

文章目录 一、简介&#xff1a;二、背景&#xff1a;三、相关概念&#xff1a;1、映射器&#xff08;Mapper&#xff09;&#xff1a;2、映射方法&#xff08;Mapping Method&#xff09;&#xff1a;3、常规映射方法&#xff08;Regular Mapping Method&#xff09;&#xff1…