2023年软件测试工具总结 —— 单元测试工具

news2024/11/19 19:37:21

在应用程序中,单元是具有一个或多个输入和单个输出的软件中最小可测试部分。单元测试是一种测试软件代码单元的方法,通常包括一个或两个输入,产生一个输出。单元测试主要关注独立模块的功能正确性,目的是确保每个单元都按照预期的方式运行。

要进行单元测试,开发人员需要编写测试代码。单元测试有手动和自动化测试两种类型,自动化通常是首选的方法,可以为开发人员节省大量的时间和精力。

单元测试是自动化测试金字塔模型中占比最大的测试类型,做好单元测试对于保证软件产品的质量非常重要,单元测试可以:

  • 及早发现软件中的缺陷并及早修复
  • 修复单元测试发现的缺陷时,代码更改不会影响其他模块
  • 模块集成变得更容易
  • 减少缺陷率和时间成本

现在让我们来总结一下针对Java、C++和Python语言的单元测试中,受欢迎的测试工具,它们不仅包括单元测试框架,还包括了Mock工具、代码覆盖率工具,以及两个智能化的单元测试用例自动生成工具:

  1. Junit
  2. TestNG
  3. GoogleTest
  4. pytest
  5. unittest
  6. Jmockit
  7. JaCoCo
  8. gcov、lcov、gcovr
  9. Coverage.py
  10. EvoSuite
  11. Diffblue Cover

单元测试框架

当前成熟的单元测试框架包括:JUnit、TestNG、gtest、pytest、unittest。

1)JUnit

JUnit是一个为Java编程语言设计的开源单元测试框架,由 Kent Beck 和 Erich Gamma建立,它是单元测试框架家族中的一个,这些框架被统称为xUnit,JUnit是xUnit 家族中最为成功的一个。JUnit 有它自己的 Junit 扩展生态圈,多数 Java 的开发环境都已经集成了 JUnit 作为单元测试的工具。JUnit 的最新版本是JUnit 5,它不再是一个单一的JAR 包,而是由JUnit platform(平台)、JUnit Jupiter 和JUnit Vintage 这3 部分组成。

官网地址:JUnit 5

2)TestNG

TestNG 是另一个为Java编程语言设计的开源单元测试框架,是一个受JUnit和NUnit启发而来的测试框架,但它引入了一些新功能,使其更强大、更容易使用,例如:

  • 核心特性是多线程测试执行,测试代码是否是多线程安全的;
  • 提供注释支持;
  • 支持数据驱动测试(使用@DataProvider);
  • 支持参数化测试;
  • 强大的执行模型(不再有TestSuite);
  • 支持各种工具和插件(Eclipse, IDEA, Maven等…);
  • 嵌入BeanShell以获得更多的灵活性;
  • 用于运行时和日志记录的默认JDK函数(没有依赖关系)。

官网地址:https://testng.org/

3)GoogleTest

GoogleTest是一个跨平台的(Liunx、Mac OS X、Windows 、Cygwin 、Windows CE and Symbian ) C++单元测试框架,由google公司发布,为在不同平台上为编写C++测试而开发的。它提供了丰富的断言、致命和非致命判断、参数化、”死亡测试”等等。例如:

  • 测试用例本身就是一个exe工程,编译之后可以直接运行,非常的方便。
  • 编写测试案例变的非常简单(使用一些简单的宏如TEST),让我们将更多精力花在测试用例设计上。
  • 提供了强大丰富的断言的宏,用于对各种不同检查点的检查。
  • 提高了丰富的命令行参数对脚本运行进行一系列的设置。

代码开源地址:GitHub - google/googletest: GoogleTest - Google Testing and Mocking Framework

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036

4)pytest

pytest是一个非常成熟的全功能的支持Python语言的单元自动化测试框架。简单灵活,容易上手,支持参数化;能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试,以及接口自动化测试(pytest集成requests)。

官网地址:pytest: helps you write better programs — pytest documentation

5)unittest

unittest 是 Python 自带的一个单元测试框架,无需安装,使用简便,引入包 import unittest 即可使用。unittest单元测试框架作为python的标准库,是其他单元测试框架的基础。

官网地址:unittest --- 单元测试框架 — Python 3.10.1 文档

单元测试Mock工具

在进行单元测试时,需要测试的类有很多依赖,这些依赖的类或者资源又会有依赖,导致在单元测试代码里无法完成构建。因此,我们需要采用Mock 技术隔离依赖对象,即模拟这些需要构建的类或者资源,提供给需要测试的对象使用。

6)JMockit

JMockit是一个用于Java语言单元测试的开源Mock工具,包含了工具和API集合。Jmockit可以和junit和TestNG配合使用编写单元测试。

JMockit支持类级别整体mock和部分方法重写,以及实例级别整体mock和部分mock,可以mock静态方法、私有变量及局部方法。

这个工具还具有统计单元测试代码覆盖率的功能,提供了三种类型的代码覆盖率,如行覆盖率、路径覆盖率和数据覆盖率。

官网地址:Home - Guaranteed Penis Size in 3 Weeks

单元测试覆盖率工具

单元测试中还需要用到代码覆盖率工具。代码覆盖率是用来度量在单元测试过程中被覆盖代码的指标。代码覆盖率统计工具用来发现没有被测试覆盖的代码,完善单元测试的覆盖率。另外,这类工具还可以用来构建代码调用关系,精准的确定回归测试范围,避免全量回归造成测试资源的浪费。

7)JCoCo

Jacoco是一个开源的免费Java代码覆盖工具,由EclEmma创建,其使用方法很灵活,可以嵌入到Ant、Maven中;可以作为Eclipse插件,可以使用其Java Agent技术监控Java程序等等。很多第三方的工具提供了对JaCoCo的集成,如sonar、Jenkins等。

JaCoCo包含了多种尺度的覆盖率计数器:

  • 指令级覆盖(Instructions,C0coverage)
  • 分支(Branches,C1coverage)
  • 圈复杂度(CyclomaticComplexity)
  • 行覆盖(Lines)
  • 方法覆盖(non-abstract methods)
  • 类覆盖(classes)

官网地址:EclEmma - JaCoCo Java Code Coverage Library

8)gcov、lcov、gcovr

gcov、lcov、gcovr都是支持C/C++语言代码覆盖率的工具。

gcov是由gcc内建的代码覆盖率生成工具,可以很方便的和GCC编译器配合使用,通常情况下,直接安装gcc工具链,也就同时包含了gcov命令行工具。gcov得到的结果是文本形式的,而且不同的源码文件需要一一执行gcov命令,对于大工程是不方便的,这时就需要lcov。

lcov是gcov工具的图形前端,收集多个源文件的gcov数据,生成描述覆盖率的HTML页面。生成的结果中会包含概述页面,方便浏览。

一般场景下使用gcov和lcov能满足代码覆盖率的获取和展示工作,lcov和genhtml配合生成的HTML报告内容详尽,简洁直观,行覆盖率、分支覆盖率都有,但是HTML文件在常用的持续集成工具(比如Jenkins、gitlab-ci)中均无法集成,因此我们需要其他的工具用于覆盖率结果的持续集成展示。gcovr是一款针对C/C++代码覆盖率并支持以多种方式(包括列表方式、XML文件方式、HTML网页方式等)展示出来的工具,而XML文件刚好是可以被持续集成工具解析的。

lcov下载地址:GitHub - linux-test-project/lcov: LCOV

gcovr下载地址:https://github.com/gcovr/gcovr

9)Coverage.py

Coverage.py是一个度量Python语言代码覆盖率的工具。Coverage.py可以指定要通过配置文件分析哪些源文件,通过分析源代码,发现没有被测试覆盖的代码。

官网地址:https://coverage.readthedocs.io

智能化的单元测试用例自动生成工具

单元测试的重要性毋庸置疑,但是在很多企业推行的并不好,一个非常重要的原因是开发人员不愿意把时间花费在编写单元测试代码上。如今,有两个值得推荐的智能化工具可以自动生成单元测试用例,帮助提高单元测试的覆盖率,提高企业的研发效能。

10)EvoSuite

EvoSuite是由英国Sheffield(谢菲尔德)等大学联合开发的一种开源工具,用于自动生成测试用例集,生成的测试用例均符合Junit的标准,可直接在Junit中运行,并得到了Google和Yourkit的支持。通过使用此自动测试工具能够在保证代码覆盖率的前提下极大地提高测试人员的开发效率。但是只能辅助测试,并不能完全取代人工,测试用例的正确与否还需人工判断。

官网地址:EvoSuite | Automatic Test Suite Generation for Java

开源代码地址:GitHub - EvoSuite/evosuite: EvoSuite - automated generation of JUnit test suites for Java classes

11)DiffBlue Cover

Diffblue Cover是一个自动化的单元测试编写工具,通过分析Java应用程序编写反映当前行为的单元测试,提高测试覆盖率,并帮助开发人员在将来的代码更改中发现回归缺陷。

插件开源社区版地址:Diffblue Cover - Community Edition - IntelliJ IDEs Plugin | Marketplace

点赞关注不迷路~~~   

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

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

相关文章

linux(二)

内部命令和外部命令 什么是命令:用来实现某一种功能的指令或程序 命令的执行依赖于解释器(如/bin/bash 用的最多) ,解释器存放于/erc/shells, shells就是解释器统称 管理员的权限 普通用户的权限 命令提示符 查看ls的绝对路径 解释器,存在于…

单体架构 vs 微服务架构的全面比较

软件架构是指软件系统的高层设计和组织方式。它定义了系统的结构、组件、它们之间的交互以及它们如何满足系统的需求。有各种软件架构模式,每种都有其自身的优点和权衡。两种常见的架构模式是微服务架构和单体架构。 单体架构: 单体架构是一种传统的方法…

Pmdarima实现单变量时序预测与交叉验证

目录 1. pmdarima实现单变量时间序列预测 2. 时间序列交叉验证 2.1 滚动交叉验证(RollingForecastCV) 2.2 滑窗交叉验证(SildingWindowForecastCV) 1. pmdarima实现单变量时间序列预测 Pmdarima是以statsmodel和autoarima为基础、封装研发出的Python时序分析库、也是现在市…

【C++代码】分割等和子集,目标和,一和零,零钱兑换,动态规划--代码随想录

题目&#xff1a;分割等和子集 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集&#xff0c;使得两个子集的元素和相等。 初步想法排序后双指针&#xff0c;发现不行 class Solution { public:bool canPartition(vector<int>&…

黑马 小兔鲜儿 uniapp 小程序开发- 商品详情模块- day05

黑马 小兔鲜儿 uniapp 小程序开发- 分类模块- day04-CSDN博客 小兔鲜儿 - 商品详情(登录前)-day05 商品详情页分为两部分讲解&#xff1a; 登录前&#xff1a;展示商品信息&#xff0c;轮播图交互&#xff08;当前模块&#xff09;登录后&#xff1a;加入购物车&#xff0c;立…

玩转硬件之Micro:bit的玩法(一)

写在前面 这么长时间以来一直在玩软件, 好像软件还没有研究明白&#xff0c;因为工作的转变&#xff0c;又开始接触到硬件&#xff0c;既然开始触碰到硬件了&#xff0c;也想记录一下。有的时候想想要不要写这段前言&#xff0c;但是不写又觉得比较突兀&#xff0c;好端端的怎…

python函数的定义与调用

python定义函数和函数的使用 函数 函数是对程序逻辑进行结构化或过程化的一种编程方法&#xff0c;将整块代码巧妙地隔离成易于管理的小块。把重复代码放到函数中而不是进行大量的拷贝&#xff0c;这样既能节省空间&#xff0c;也有助于保持一致性&#xff1b;通常函数都是用…

【数据结构】数组和字符串(十三):链式字符串的基本操作(串长统计、查找、复制、插入、删除、串拼接)

文章目录 4.3 字符串4.3.1 字符串的定义与存储4.3.2 字符串的基本操作&#xff08;链式存储&#xff09;1. 结构体2. 初始化3. 判空4. 串尾添加5. 打印6. 串长统计7. 查找8. 复制9. 插入10. 删除11. 串拼接12. 销毁13. 主函数14. 代码整合 4.3 字符串 字符串(String)是由零个或…

CodeGeeX:对标GitHub Copilot,国产免费可用的代码补全助手

大家好&#xff0c;我是豆小匠。 本期介绍的插件CodeGeeX&#xff0c;是一款免费的智能编程助手。 主要功能是代码生成和补全&#xff0c;但不止于此&#xff01; CodeGeeX介绍 CodeGeeX是清华大学和智谱AI联合打造的多语言代码生成模型。 第一代是完全在华为昇腾芯片平台训练…

华为OD机考算法题:生日礼物

题目部分 题目生日礼物难度易题目说明小牛的孩子生日快要到了&#xff0c;他打算给孩子买蛋糕和小礼物&#xff0c;蛋糕和小礼物各买一个&#xff0c;他的预算不超过x元。蛋糕 cake 和小礼物 gift 都有多种价位的可供选择。输入描述第一行表示cake的单价&#xff0c;以逗号分隔…

③ 软件工程CMM、CMMI模型【软考中级-软件设计师 考点】

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ ③ 软件工程CMM、CMMI模型【软考中级-软件设计…

SpringCloud Alibaba Demo(Nacos,OpenFeign,Gatway,Sentinel)

开源地址&#xff1a; ma/springcloud-alibaba-demo 简介 参考&#xff1a;https://www.cnblogs.com/zys2019/p/12682628.html SpringBoot、SpringCloud 、SpringCloud Alibaba 以及各种组件存在版本对应关系。可参考下面 版本对应 项目前期准备 启动nacos. ./startup.c…

营收净利双降、股价下跌四成,敷尔佳带伤闯关“双11”

今年双11预售已经开启&#xff0c;敷尔佳在天猫、抖音等电商平台火热营销&#xff1b;营销热业绩冷&#xff0c;敷尔佳的三季报不及预期。 10月23日&#xff0c;哈尔滨敷尔佳科技发展有限公司(下称“敷尔佳”&#xff0c;301371SZ)公布2023年三季报&#xff0c;其三季度营收净…

【C++ 系列文章 -- 程序员考试 下午场 C++ 专题 201805 】

文章目录 1.1 C 题目六1.1.1 填空&#xff08;1&#xff09;详解1.1.1.1 C 纯虚函数介绍 1.1.2 填空&#xff08;2&#xff09;详解1.1.2.1 父类声明了带参构造函数1.1.2.2 子类中构造函数的构造原则 1.1.3 填空&#xff08;3&#xff09;详解1.1.4 填空&#xff08;4&#xff…

Python小试牛刀:GUI(图形界面)实现计算器界面

Python GUI 是指 Python 图形用户界面库&#xff0c;它们可以帮助开发者创建在计算机上运行的图形用户界面&#xff08;GUI&#xff09;。下面是一些常用的 Python GUI 库&#xff1a; Tkinter&#xff1a; Tkinter 是 Python 的标准 GUI 库&#xff0c;它是一个开源的、跨平台…

LeetCode刷题之 存在重复元素(题目分析➕源代码)

题目链接&#x1f517;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 1. 题目分析 本题是要找到数组中的重复元素&#xff0c;所以我们分析出一下几点&#xff1a; 1. bool是一种数据类型&#xff0c;true是非0值&#xff0c;false是0.。 2. 数组…

绘制教材P68页产品的层次方框图。

层次方框图&#xff1a; 用树形结构的一系列多层次的矩形框绘制数据的层次结构&#xff0c;树形结构的顶层是一个单独的矩形框&#xff0c;它代表完整的数据结构&#xff0c;下面的各层矩形框代表这个数据的子集&#xff0c;最底层的各个框代表组成这个数据的实际数据元素&…

verilog语言学习

1. 时延 2. 一位全加器设计&#xff1a;三种建模方式 实际的设计中往往是这三种设计模式的混合 3. 4. 5. 6. 7. 建立模型时信号的连接&#xff08;重点&#xff09; 8. initial语句 9. always语句 在always中不能同时判断同一个信号的上升沿&#xff08;posedge&#xff0…

网工内推 | IDC网工、运维,上市公司,主流厂商认证优先,六险一金

01 软通动力 招聘岗位&#xff1a;ICD机房运维工程师 职责描述&#xff1a; 1.维护及管理数据中心内各类服务器及网络设备。 2.处理数据中心各类服务器和网络相关故障和告警。 3.负责数据中心内项目交付管理&#xff0c;包括LLD评审、硬装工艺验收、ASP施工管理等。 4.负责数据…

什么是互动广告

随着数字技术的迅速发展和消费者行为的转变&#xff0c;互动广告已成为现代广告行业的重要组成部分。互动广告以其独特的优势和形式&#xff0c;不断刷新人们对广告的认知&#xff0c;为广告行业带来新的机遇和挑战&#xff0c;那么就来一起了解互动广告吧。 一、互动广告的定义…