当前位置:首页 > 测试测量 > 测试测量
[导读]单元测试是防止错误的第一道防线。这种级别的保护至关重要,因为它为以下测试过程奠定了基础:集成测试、验收测试以及最后的手动测试,包括探索性测试。

单元测试是防止错误的第一道防线。这种级别的保护至关重要,因为它为以下测试过程奠定了基础:集成测试、验收测试以及最后的手动测试,包括探索性测试。

在本文中,我将阐明单元测试与其他方法的区别,并举例说明何时可以或不可以没有单元测试。我们还将讨论自动化测试,它在确保代码可靠性和质量方面发挥着重要作用。

单元测试

单元测试的想法是为每个重要的函数或方法编写测试。这使得它能够快速检查最近的代码更改是否导致了回归,这意味着已经测试过的程序部分中存在错误,并且还可以更轻松地检测和修复此类错误。

当单元测试过多时

任何没有适当测试覆盖率的长期项目注定迟早要从头开始重写。单元测试是大多数项目的必备步骤,但在某些情况下可能会忽略此步骤。例如,您正在创建一个用于演示目的的项目。时间表非常艰难。您的系统是硬件和软件的组合,在项目开始时,并不完全清楚最终产品会是什么样子。该软件将在展览或演示期间运行1-2天。在这种情况下,就没有必要进行单元测试。

另一种情况是当您在制作广告网站,或者简单的Flash游戏,或者横幅时,其中涉及复杂的布局、动画和大量的静态内容。以上都是为演示服务的。

如果您正在构建一个包含一组静态 HTML 页面和一个电子邮件提交表单的简单名片网站,则不需要进行单元测试。客户很可能对此感到满意,并且不再需要任何东西。手动检查和测试所有内容很可能会更快。

单元测试实施

在规划单元测试时,请记住您的目标是确保单元测试代码覆盖率超过 80%。这意味着在运行单元测试时至少执行了 80% 的代码库。出于这些目的,我推荐使用JaCoCo for Java或 Istanbul for JavaScript 等工具。因此,要开始将单元测试合并到您的开发过程中,请尝试执行以下步骤。

1.选择合适的测试框架

选择一个适合您需求的框架,而不是重新发明轮子。例如,许多.NET开发人员使用 MsTest,因为它随 Visual Studio 一起提供,但 NUnit 或 xUnit 可能会为您的项目提供更好的功能。

2. 决定测试什么

并非所有代码都需要测试。简单、无依赖项的代码可能不需要测试,而具有许多依赖项的复杂代码可能会从测试前的重构中受益。专注于测试复杂的算法代码和相互依赖的组件,以确保清晰的交互和集成。

3. 保持一致的测试结构

使用排列、执行、断言 (AAA) 模式以获得清晰性和可维护性。

4. 一次测试一件事

每个测试应该仅验证代码的一个方面。对于复杂的流程,将其分解为较小的部分并单独进行测试。

5. 处理假货的依赖关系

用假实现替换真正的依赖项,以避免测试不必要的组件。使用存根进行预定义响应,使用模拟来验证交互。

6.使用隔离框架

使用 Moq 或 Rhino Mocks 等现有框架来创建模拟和存根,而不是编写自己的框架。这减少了错误和维护开销。

7. 可测试性设计

最初编写代码时要考虑到可测试性。使用依赖注入,避免在方法内直接实例化对象,并尽量减少使用带有逻辑的静态方法和构造函数。

8. 重构遗留代码

如果处理无法测试的遗留代码,请从重构小的、可管理的部分开始,并在编写单元测试之前用集成和验收测试覆盖它们。逐渐将此过程扩展到代码库的更大部分。

自动化测试

该方法的名称是不言自明的:在自动化测试中,测试用例是自动执行的。它比手动测试发生得快得多,甚至可以在夜间进行,因为整个过程需要最少的人为干扰。当您需要获得快速反馈时,这种方法绝对会改变游戏规则。然而,与任何自动化一样,在初始设置阶段可能需要大量时间和财务资源。即便如此,它还是完全值得使用的,因为它会让整个过程更加高效,代码更加可靠。

自动化测试实施

这里的第一步是了解项目是否包含测试自动化。您需要确保项目拥有强大的测试自动化框架。反过来,自动化工程师应该精通工具堆栈(例如,Selenium、Appium、Cypress)并遵循既定的自动化指南。

1. 自动化覆盖率与手动测试的比较

努力实现高比例的测试用例自动化,最好超过 90%,以最大限度地提高效率并减少对手动测试的依赖。

2. 项目概述及自动化实施

自动化测试始终是一个大型项目,涉及多个团队开发共享产品,每个团队中都有手动 QA 测试人员。测试侧重于前端和后端两个方面。

3. 了解项目

首先,我们需要了解产品的用途及其用户。这有助于优先考虑自动化工作。例如,如果产品为企业服务,则重点测试法律合规性和支付交易。对于面向消费者的产品,优先考虑卡间转账和服务支付等关键操作。自动化应该全面应用于整个产品,而不仅仅是单个团队。

4. 识别关键利益相关者

熟悉所有利益相关者至关重要,因为与他们的互动是必要的。关键人物包括:

· 产品所有者:他们是自动化的客户并定义其要求。

· QA 工程师:他们是自动化工具的最终用户,他们的满意度是衡量成功的标准。

· 手动测试主管:他们帮助组织流程并与手动测试进行协调。

· 前端开发领导:他们影响自动化测试的稳定性和质量。

· 采购专家:他们负责硬件分配,主要是服务器设备。

5.了解团队

收集有关每个团队的项目范围的信息,无论是涵盖前端、后端还是两者。了解 QA 团队如何测试他们的部分以及他们对自动化的熟悉程度。确定测试挑战并优先考虑自动化领域。

6. 制定自动化要求

在大多数情况下,我们的目标是采用经典方法,而不采用创新解决方案:

· 编程语言:Java,方便招聘专员

· 前端测试:使用 Selenium。

· 后端测试:使用REST-assured进行 REST 交互。

· 数据库测试:选择标准 Java 库

· 自动化测试:选择 Cucumber 既可以培训手动 QA 测试人员,又可以降低成本。

· 报告:最后但并非最不重要的一点是,使用 Allure 生成有吸引力且内容丰富的报告。

7. 演示和入门

为所有利益相关者(包括产品负责人、QA 工程师、开发人员和分析师)进行演示,重点是清晰度。从前端团队开始创建可见的结果。开发 5-10 个自动化测试,记录它们,并使用 Allure 的图形报告显示结果。说明自动化基础设施、主要目标和效果,并比较手动和自动化测试。

8. 为自动化准备 UI

为了保证自动化测试可靠稳定,data-test-id在前端负责人和产品负责人的配合下,集中为UI元素添加“ ”属性。这种做法通过将测试与 UI 元素位置或内容的变化隔离开来,极大地提高了测试的可靠性。

9. 开发自动化测试

在自动化测试人员之间分配任务。使用模板创建自动化项目框架。准备用于前端测试的 Cucumber 步骤,使这些步骤可跨项目重复使用,并设置 Selenoid 和 Jenkins。通过设置存储库、创建 Jenkins 作业以及在 Cucumber、Git 和开发环境中培训 QA,将团队集成到自动化中。

然后,QA 手动测试人员将编写自动化测试,并由自动化工程师进行审查和集成。最终的 Cucumber 步骤开发将在冲刺的空闲时间进行。在每个冲刺结束时,在产品演示中展示结果并宣布新功能。

结论

正如您所看到的,单元测试和自动化测试是互补的方法。通过每天使用它们来识别缺陷,您可以减少每个阶段的回归测试时间。此外,这将逐渐导致产品更快地投入生产,从而节省时间和资源。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭