单元测试与端到端测试——主要区别

news2024/11/26 8:51:22

目录

前言:

什么是单元测试?

单元测试生命周期

单元测试的好处

那么它有什么好处呢?

单元测试示例

单元测试的类型

单元测试工具

什么是端到端测试?

端到端测试

端到端测试的主要好处是什么?

端到端测试示例

端到端测试的类型

横向端到端测试

垂直端到端测试

端到端测试工具

单元测试和端到端测试之间的差异

测试范围

测试类型

测试方法

测试环境

执行者

并行运行

访问数据库和其他资源

时间

单元测试和端到端测试哪个更好?

总结


前言:

       单元测试和端到端测试是软件测试中两种常见的测试方法,它们在测试的范围和目的上有一些主要区别。

  在为应用程序设计整体测试策略之前,首先想到的问题是使用哪种测试策略。 两个最重要和广泛使用的测试策略是单元测试和端到端测试。 要决定使用哪一个,重要的是要了解它们的主要区别。单元测试是一种测试策略,我们在其中测试应用程序代码的各个单元。 在端到端测试中,测试人员从用户的角度测试整个应用程序。 我们可以通过模拟用户执行的常见任务来做到这一点。用户可能会遇到不同类型的错误。 有些可能会呈现一些错误,它们可能会返回不正确的数据,而另一些可能会导致功能问题或浏览器问题。 根据错误的类型,我们应该决定是否对应用程序使用单元测试或端到端测试。在本文中,让我们看看单元测试和端到端测试之间的区别以及何时使用它们。

什么是单元测试?

单元测试生命周期

  我们在代码的开发阶段编写单元测试。 它是白盒测试的经典示例。 这是因为要进行任何白盒测试,我们都需要知道代码的内部机制。 但是,单元测试用例的范围是有限的。 它只能测试一个代码单元。 它无法测试不同代码单元之间的交互。

单元测试的好处

  编写单元测试用例背后的主要思想是分离程序的不同逻辑部分并正确测试它们各自的行为。 当我们创建它们时,单元测试可以很容易地检测到大部分错误。 此外,它使我们能够自动化测试过程并减少检测复杂应用程序中的错误所需的工作量。 如果现有代码发生更改,它有助于维护代码覆盖率并检测错误。

那么它有什么好处呢?

1.它使整个过程变得敏捷。 重构现有代码是有风险的,并且可能会在系统中引入错误。 如果你有适当的单元测试,那么重构就会变得更容易。
2.它提高了代码的整体质量。 它允许识别所有可能的边缘情况并在将错误发送给集成测试之前检测错误。
3.可以在开发的早期阶段发现错误。 之所以如此,是因为单元测试通常是在开发阶段编写的,并且可以在不影响其他代码段的情况下解决。
4.单元测试简化了集成并促进了更改。 它允许在将来重构或更新代码并确保模块正常工作。
5.它们充当代码单元的文档。 希望了解代码功能的新团队成员可以轻松参考这些测试用例,以获得对 API 的基本了解。
6.它们有助于使调试变得非常容易。 万一测试失败,你知道要查找哪一段代码,并且只考虑该段代码中的最新更改。
7.单元测试有助于改进代码的设计。 如果先编写测试,它可以让你仔细考虑代码的设计并帮助你发现不一致之处。
8.它们可以帮助您减少体力劳动成本和所需时间。 如果我们以后发现一个错误,比如在系统或验收测试期间,就会产生巨大的成本。

单元测试示例

  假设有一个用于预订机票的 Web 应用程序。然后这个应用程序内部会有几个模块,每个模块都有几个类和函数。 这些函数中的每一个都有自己的用法。假设有查找给定价格范围内所有航班详细信息的功能。 在这种情况下,根据输入的价格范围,该方法应返回在特定日期和航线上价格落在该范围内的所有航班的列表。 我们可以使用单元测试用例将此功能作为单个代码单元进行测试。因此,无论何时 CI/CD 管道构建代码 ,都必须运行这些单元测试以验证底层代码。 此外,如果我们对该功能进行任何更改并且它不遵循预期的逻辑,测试用例将无法指示新更改中的错误。

单元测试的类型

主要有两种类型的单元测试。 这意味着有两种方法可以创建和执行单元测试用例。
●手工测试
●自动化测试
  在手工测试的情况下,可能会有一个说明文档,其中包含用于测试每个功能的分步方法。 然而,手工测试在复杂的应用程序中几乎已经过时。大多数应用程序现在都依赖自动化测试来测试每个代码单元。 有几种测试框架允许创建测试用例,例如 JUnit、PHPUnit 等。使用这些框架创建单元测试后,可以模拟外部依赖项并执行这些用例以确定逻辑是否按预期工作。这些框架可帮助你记录运行并创建详细的堆栈跟踪和失败/成功报告。 在 CI/CD 管道中,每次创建新的拉取请求时,都会构建代码,并且与代码一起,现有的单元测试用例也会运行。 因此,可以确定新更改是否存在错误。

单元测试工具

对于每种编程语言,都有多个测试框架和库可用于创建和执行单元测试。 一些受欢迎的工具有:
1.JUnit – 它是 Java 编程语言最流行的测试库之一。 它允许创建断言来测试实际输出与预期输出。 可以模拟依赖项并使用模拟数据。
2.NUnit – 它是 .NET 语言的单元测试库。 它是开源的,支持并行数据驱动测试。
3.JMockit – 这是另一个流行的开源单元测试框架。 它具有带有路径和线路指标的代码覆盖率功能。 它具有API模拟、验证和记录语法、行覆盖率和数据覆盖率等功能。
4.EMMA – 它允许分析和报告 Java 代码。 它还支持行代码和块代码覆盖功能。
5.PHPUnit – 我们可以使用它为 PHP 语言创建单元测试并定义断言。

什么是端到端测试?

端到端测试

  端到端测试是从头到尾测试整个应用程序功能的过程。 它涉及模拟最常执行的用户操作并测试是否需要输出。 我们在单元和集成测试结束后执行端到端 (E2E) 测试。E2E 测试涉及测试应用程序的所有方面,从技术功能到用户界面。 我们可以进行自动化和手动 E2E 测试。 它涉及根据预期要求找出应用程序中的错误和错误。E2E 测试是黑盒测试,这意味着测试人员不知道功能是如何编程的。 如果端到端测试成功,则意味着用户已经验证了业务需求。

端到端测试的主要好处是什么?

  现代应用程序非常复杂,并且建立在内部和外部子系统之上。 我们需要将这些产品作为一个整体进行验证,而不仅仅是作为单个单元进行验证。 尽管每个子系统都可能通过测试,但当它们与整个系统交互时,它们可能会失败。 因此,进行端到端测试将帮助你确保应用程序已做好生产准备。
端到端测试的主要好处是:
1.它确认应用程序的整体健康状况。 它从整体上验证应用程序,并提供有关应用程序在不同用户环境中的性能的观点。
2.E2E 测试通过考虑子系统和服务之间的交互来扩展测试范围。
3.如果我们以敏捷的方式进行端到端测试,它们会在每次迭代中执行。 这将有助于更频繁地捕获更多错误。 这减少了将错误深埋在软件的生产版本中的可能性,这些错误变得难以修复。
4.这些是从用户的角度进行的测试。 他们发现单元测试中不明显的错误和违规行为。 它验证应用程序的业务逻辑。
5.由于现在可以在较早的阶段识别错误,因此可以减少修复错误所需的时间和人工成本。 因此,我们可以缩短上市时间。
6.它通过验证系统流程来避免与底层子系统相关的风险。

端到端测试示例

  让我们回到前面的例子。 早些时候,测试了应用程序代码的各个逻辑单元。 在端到端测试的情况下,我们将从用户的角度对应用程序进行整体测试。 可以在测试环境中部署功能后执行此操作。测试人员将模拟用户对应用程序的操作并监控输出。 如果得到预期的输出,则从用户的角度来看,新版本得到验证。 用户操作的一些示例包括单击按钮、填写表单、过滤或排序信息等。有几种测试框架允许您创建自动化测试用例来模拟此类用户操作。

端到端测试的类型

基于端到端测试流程的适用性,有两种类型:

横向端到端测试

  横向 E2E 测试方法非常普遍,它横向分布在应用程序的上下文中。 我们主要在单个企业资源规划应用程序中使用它。例如,考虑一个基于 Web 的电子商务购物应用程序。 它具有库存状态、运输明细、帐户、产品详细信息等组件。同时测试所有这些组件属于水平测试。在示例中,应用程序不仅需要从 UI 的角度工作,还需要与电子邮件、支付系统和网络基础设施正确集成。这就是为什么通常在发布周期结束时与所有子系统相关的更改完成时进行横向 E2E 测试。 因此,需要在进入测试部分之前进行环境设置。

垂直端到端测试

  在这里,测试是分层进行的。 为了达到质量,我们从头到尾测试每个组件层。 使用垂直 E2E 测试来测试应用程序的复杂和关键组件。 E2E 测试策略明确针对不涉及用户界面的昂贵计算系统等组件。在上面的示例中,可以借助单元测试来测试核心系统。 然后将在测试网络和数据库基础设施、API 和 UI 之前测试支付处理和电子邮件子系统。 由于垂直 E2E 测试是细粒度的,它通常遵循行为驱动、测试驱动或持续测试。

端到端测试工具

一些最流行的端到端测试框架是:
1.Selenium – 它支持所有主要的编程语言,包括 Java、JavaScript、C#、Ruby、Python 等。可以使用 Selenium 轻松模拟几乎所有用户操作。 它是一个开源工具,Selenium IDE 还具有录制和回放功能。 它消耗的资源少得多,可以选择允许并行执行,我们也可以将它与其他框架集成。
2.Cypress——它是一种流行的多功能测试框架,可以有效地与使用 React、Angular 等框架构建的软件一起工作。与 Selenium 不同,Cypress 不使用任何驱动程序或远程代码。 Cypress 测试在 Web 浏览器中以 JavaScript 运行。 它支持测试驱动开发(TDD)。 此外,它支持动态或热插拔更改,从而使您可以更快地创建或执行测试用例。
3.Cucumber – 它使用 Gherkin,它允许使用简单的自然语言编写测试用例。 它使你能够避免为简单的测试用例编写复杂的代码,从而使非技术人员的生活更加轻松。 与 Cypress 不同,Cucumber 主要支持行为驱动开发 (BDD)。 这使您可以在编写测试用例时考虑利益相关者的观点。

单元测试和端到端测试之间的差异

  单元测试和端到端测试之间的区别在于,单元测试确保生成数据、数值、文本字符串的函数或计算按要求工作。 端到端测试确保按钮、表单、更新、链接和完整的工作流程正常工作。单元测试和端到端测试都有自己的目的和用途。 但是,让我们看看它们之间的主要区别。

测试范围

  如前所述,单元测试主要关注单个代码单元,而端到端测试则从用户的角度将应用程序作为一个整体进行测试。 运行单元测试很容易,我们可以在每个构建中执行它们。 然而,对应用程序运行完整的端到端测试需要时间。

测试类型

  单元测试是白盒测试。 之所以如此,是因为如果要编写单元测试来覆盖特定功能,则需要了解该功能的内部实现。 另一方面,端到端测试是黑盒测试。 这些测试旨在模拟用户对应用程序的操作并测试功能,这不需要任何实现知识。

测试方法

  单元测试主要是我们可以与 CI/CD 管道集成的自动化测试。 一旦我们推送新的代码提交,就会构建整个代码,并运行测试用例以检查是否存在新更改引起的任何错误。 而端到端测试可以是手动的,也可以是自动的。 我们可以使用多个框架使此类测试自动化或通过模拟用户操作手动测试它们。

测试环境

  开发人员主要创建单元测试; 因此,他们在开发人员机器上运行它们。 另一方面,我们在构建子系统后,在专用测试环境中进行端到端测试。

执行者

  单元测试由编写它们的开发人员执行。 然而,一组测试人员或 QA 在专用环境中执行端到端测试。

并行运行

  可以并行运行单元测试用例,因为它们专注于单个代码单元并且彼此不依赖。 相比之下,端到端测试必须按顺序执行。

访问数据库和其他资源

  通常在单元测试中模拟依赖关系; 因此,他们不需要访问任何资源。 端到端测试通常需要更多资源,因为此测试的全部目的是检查整个系统是否按预期工作。

时间

  与端到端测试相比,我们需要更少的时间和成本来创建单元测试用例。 性能测试比较复杂,涉及的子系统很多。

单元测试和端到端测试哪个更好?

  单元测试和端到端测试相辅相成。 它们是针对不同用例的不同测试策略。 根据要求,可以为您的应用程序确定正确的测试策略。 但是最好将这两种策略都放在包里。我们在早期开发阶段使用单元测试用例来查找错误,并检查各个代码单元是否按预期工作。 每次在 CI 管道中触发构建时,我们都会运行这些测试套件。 但是,这并不意味着必须为所有子系统编写单元测试。 例如,如果 API 缺乏逻辑,最好进行集成测试,而不是编写不必要的单元测试。另一方面,使用端到端测试来验证应用程序的业务需求。 在投入生产之前检查应用程序的功能是否符合预期。 对具有多个子系统的大型复杂应用程序使用 E2E 测试。因此,要确定最适合您项目的方法,需要分析你的需求,比较这些策略,然后选择最佳方法。

总结

  总而言之,单元测试和端到端测试都有其独特的用途。 在测试策略中同时使用它们总是更好。编写、维护和理解单元测试用例非常容易。 但由于它是一种白盒测试技术,必须了解代码才能正确创建单元测试用例。 此外,我们无法通过单元测试用例涵盖软件的所有功能。因此,为了验证应用程序的每个部分是否按预期工作并且协同良好,必须在发布之前进行端到端测试。 尽管它们执行起来非常耗时,但它们可以帮助你在产品发布之前发现问题和性能影响。

  作为一位过来人也是希望大家少走一些弯路

在这里我给大家分享一些自动化测试前进之路的必须品,希望能对你带来帮助。

(WEB自动化测试、app自动化测试、接口自动化测试、持续集成、自动化测试开发、大厂面试真题、简历模板等等)

相信能使你更好的进步!

点击下方小卡片

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

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

相关文章

Tauri 应用中发送 http 请求

最近基于 Tauri 和 React 开发一个用于 http/https 接口测试的工具 Get Tools,其中使用了 tauri 提供的 fetch API,在开发调试过程中遇到了一些权限和参数问题,在此记录下来。 权限配置 在 tauri 应用中,如果想要使用 http 或 fe…

小白到运维工程师自学之路 第四十九集 (正则表达式之grep)

一、概述 1、正则表达式(Regular Expression,简称为RegExp或Regex)是一种用于描述、匹配和操作文本的字符串模式的表达式。它提供了一种强大而灵活的方式来进行字符串的搜索、替换、提取和验证操作。 2、正则表达式可以用于各种编程语言和应…

SpringBoot第25讲:SpringBoot对TypeHandler的使用

SpringBoot第25讲:SpringBoot对TypeHandler的使用 本文是SpringBoot第25讲,SpringBoot对TypeHandler的使用,TypeHandler就是当SpringBoot 实体类中字段类型和数据库中字段类型不一致时进行使用。 文章目录 SpringBoot第25讲:Sprin…

基环树学习笔记

0.前言 只因环树学习笔只因。 如有错误欢迎指出。 1.基本概念 这名字读起来感觉有点矛盾,怎么可能树上面有一个环呢? 我们把它放到百度翻译里面看看。 顾名思义,基环树不是一棵树,而是一颗假树,他的定义是&#…

Acwing.861 二分图的最大匹配(匈牙利算法)

题目 给定一个二分图,其中左半部包含nq个点(编号1n1),右半部包含ng个点(编号1n2),二分图共包含m条边。 数据保证任意—条边的两个端点都不可能在同一部分中。请你求出二分图的最大匹配数。 给定一个二分图G,在G的一个子图M中&…

软件测试基础认知

日升时奋斗,日落时自省 目录 1、测试需求 2、测试用例 3、软件测试BUG 4、开发模型 4.1、软件的生命周期 4.2、瀑布模型(waterFall Model) 4.3、螺旋模型 4.4、 增量模型 4.4.1、增量开发 4.4.2、迭代开发 4.5、敏捷开发&#xf…

【PDFBox】PDFBox操作PDF文档之创建PDF文档、加载PDF文档、添加空白页面、删除页面、获取总页数、添加文本内容、PDFBox坐标系

这篇文章,主要介绍PDFBox操作PDF文档之创建PDF文档、加载PDF文档、添加空白页面、删除页面、获取总页数、添加文本内容、PDFBox坐标系。 目录 一、PDFBox组件 1.1、什么是PDFBox 1.2、创建PDF文档 1.3、加载PDF文档 1.4、添加空白页面 1.5、删除某个页面 1.6…

三分钟了解 SpringBoot 的启动流程

一、前言 背景:最近有位开发同学说面试被问到Spring Boot 的启动流程,以及被问到Spring Boot 的嵌入式Web容器是什么时候加载的。如何加载的。是怎么无缝切换的。 这些问题,其实回答起来也是比较复杂的。我们今天就从 SpringApplication.ru…

3D设计建模软件The Foundry Modo 16对Mac和Windows的系统要求

Foundry MODO是一款功能强大的三维建模、动画和渲染软件。它为艺术家和设计师提供了一套全面的工具,可以用来创建令人惊叹的视觉效果。无论是制作电影、电视节目、游戏还是其他数字媒体内容,MODO都可以满足您的需求。 MODO具有直观的用户界面&#xff0…

redis主从配置

从redis配置:redis6386.conf include /data/redis/redis6380.conf #主redis配置文件路径(这里是引用主配置文件里的配置在修改从配置) daemonize yes #在后台启动 protected-mode no #加密保护关闭 bind 192.168.3.*** requirepas…

云主机安全-私有密钥安全认证

场景描述 云主机凭借其性价比高、生配扩容便利、运维便捷、稳定性高等优势深受用户青睐,越来越多的企业开始租用云主机,将自己的服务器、业务系统等搭建或存储到云主机上。 用户痛点 用户租用或托管的云主机,运维端口(远程桌面&…

SSM框架最新整合保姆级教程(IDEA版)

SSM框架最新整合保姆级教程(IDEA版) 一、环境要求 ​ 环境: IDEAMySQL 5.7.19Tomcat 9Maven 3.6 要求: 需要熟练掌握MySQL数据库,Spring,JavaWeb及MyBatis知识,简单的前端知识; 完整代码:…

Openlayers实战:绘制带箭头的线

Openlayers地图中有的时候会用到这样的场景,连续画几段线段,但是要知道绘制的方向,给人以指引的提示作用。 怎么绘制呢? 在本实战中,主要的是处理线段的显示方式,在线段的拐点处附加上箭头图片,具体看实际的源代码。 效果图 源代码 /* * @Author: 大剑师兰特(xiaozhu…

4 生成全排列

4 生成全排列 作者: 赵晓鹏时间限制: 1S章节: 递归与分治 输入范例 : 无 输出范例 : Perm1(1):123 Perm1(2):123 Perm1(2):213 Perm1(2):321 Perm1(3):123 Perm1(3):132 Perm1(3):213 Perm1(3):231 Perm1(3):321 Perm1(3):312 Online Judge 1.0 #include<iostream> …

【全栈开发指南】数据权限使用配置

数据权限配置有两种方式&#xff1a; 通过系统配置界面&#xff0c;实时配置生效。 通过代码注解配置。 一、通过系统配置界面配置数据权限 系统配置的数据权限是通过系统配置界面将配置信息保存在数据库&#xff0c;然后系统启动时&#xff0c;将配置信息保存到Redis缓存来…

SpringCloud分布式搜索引擎、数据聚合、ES和MQ的结合使用、ES集群的问题

目录 数据聚合 聚合的分类 ​编辑 DSL实现Bucket聚合 ​编辑 DSL实现Metrics聚合​编辑 RestAPI实现聚合 对接前端接口​编辑 自定义分词器​编辑 Completion suggester查询 Completion suggester查询 酒店数据自动补全 实现酒店搜索框界面输入框的自动补全 数据同步问…

Codeforces Round 875 (Div. 1) A. Copil Copac Draws Trees

题意 Copil Copac 给定了一个由 n−1 条边组成的列表&#xff0c;该列表描述了一棵由 n 个顶点组成的树。他决定用下面的算法来绘制它&#xff1a; 步骤 0&#xff1a;绘制第一个顶点&#xff08;顶点1&#xff09;。转到步骤1。 步骤 1&#xff1a;对于输入中的每一条边&#…

Window10 系统 RabbitMQ的安装和简单使用

1、下载 & 安装 Erlang 因为RabbitMQ的服务端是基于 Erlang编写的&#xff0c;所以&#xff0c;首先需要安装Erlang。 1&#xff09;下载 下载地址如下&#xff1a; https://www.erlang.org/downloads此处下载比较慢&#xff0c;可以参考如下百度网盘&#xff1a; 链接…

常用的缓存工具有ehcache、memcache和redis,这里介绍spring中ehcache的配置。

常用的缓存工具有ehcache、memcache和redis&#xff0c;这里介绍spring中ehcache的配置。 1.在pom添加依赖&#xff1a; <!-- ehcache 相关依赖 --><dependency><groupId>net.sf.ehcache</groupId><artifactId>ehcache</artifactId><ve…

正则表达式测试(二)

一、中括号的语法 匹配所有的字符&#xff0c;返回一个数组,包含匹配的所有字符内容&#xff0c;按顺序展开&#xff1b; 注意&#xff1a;空格也会被匹配到 匹配所有符合的字符&#xff0c;返回一个数组。 匹配空白字符 匹配非空白字符 匹配 空白字符 非空白字符 如上所示&am…