云原生引擎单元测试实践

原生,引擎,单元测试,实践 · 浏览次数 : 10

小编点评

**单测概念** 单测是单元测试的一种特殊形式,它只针对一个单元(方法或类等)进行测试。单测可以帮助我们发现代码中的错误,提高代码的质量。 **单测的优点** • 快速反馈速度:单测通常以自动化形式运行,执行速度非常快,可以快速反馈结果,跟持续集成结合起来,形成有效的反馈环。 • 重构的有力保障:系统需要大规模重构时,单测可以确保对已有逻辑的兼容,如果单元测试都通过,基本上可以保证重构没有破坏原来代码逻辑的正确性。 • 使更熟悉代码:写单元测试的过程本身就是一个审视代码的过程,可以发现一些设计上的问题(代码设计的不可测试)、代码编写方面的问题(边界条件的处理不当)等。

正文

作者:京东零售 王雷

单元测试

概念

单元测试是用来对一个模块、一个函数或者一个类来进行正确性检验的测试工作。单元测试是一种白盒测试技术,一般都是由开发人员在编码阶段完成,目的就是验证软件代码中的每个单元(方法或类等)是否符合预期,即尽早在尽量小的范围内暴露问题。

快速迭代的开发工作中如何提高代码质量一直是团队痛点,特别是没有测试支持的开发团队。合理的使用单元测试,并关注单元测试通过率、代码覆盖率可以有效提高代码质量。

云原生引擎服务,实践了单元测试,并在研发自测、预发、上线等阶段实施了相应的策略。在一定程度上提高了代码的质量。

单元测试的目的

单元测试的目的在于发现各模块内部可能存在的各种错误,主要包括以下几个方面:

(1) 验证代码是与设计相符合的。

(2) 发现设计和需求中存在的错误。

(3) 发现在编码过程中引入的错误。

在开发阶段尽可能发现代码中的问题;在预发集成阶段尽可能发现各个业务代码之间的问题;在上线阶段做最后的确认保证上线代码质量。

单元测试除了能够在较早阶段识别软件中的错误,它还有如下价值。

•反馈速度快:单元测试通常以自动化形式运行,执行速度非常快,可以快速反馈结果,跟持续集成结合起来,形成有效的反馈环。

•重构的有力保障:系统需要大规模重构时,单测可以确保对已有逻辑的兼容,如果单元测试都通过,基本上可以保证重构没有破坏原来代码逻辑的正确性。

•使更熟悉代码:写单元测试的过程本身就是一个审视代码的过程,可以发现一些设计上的问题(代码设计的不可测试)、代码编写方面的问题(边界条件的处理不当)等。

云原生引擎单测实践

整体单测率

引擎在进行开发过程中,会重点关注核心模块代码和底层代码,针对重要的业务逻辑代码,通用组件类等,涉及到重要的功能开发,对应的每一个方法我们都要编写对应的单元测试代码。在提交代码之前,在本地进行单测回归,跑通单测之后,提交代码,分支合并。

单元测试重点

引擎的单测重点主要体现在以下五个方面

1、输入输出测试

这里主要是针对数据的输入和输出进行测试。

  1. 调用所测模块时的输入参数与模块的形式参数在个数、属性、顺序上是否匹配。

  2. 所测模块调用子模块时,它输入给子模块的参数与子模块中的形式参数在个数、属性、顺序上是否匹配。

  3. 是否修改了只用作输入的形式参数。

2、路径测试

在单元测试中,最主要的测试是针对路径的测试;测试用例必须能够发现由于计算错误、不正确的判定或不正常的控制流而产生的错误。

常见的错误有:误解的或不正确的算术优先级,混合模式的运算,错误的初始化,精确度不够精确和表达式的不正确符号表示

3、出错处理

比较完善的单元设计要求能预见出错的条件,并设置适当的出错处理,以便在程序出错时,能对出错程序重新做安排,保证其逻辑上的正确性。

4、边界条件

主要测试方法对循环条件,控制条件,数据流等临界值的处理情况

比如针对一个方法中的不同分支进行单测的编写

5、局部数据结构

在模块工作过程中,必须测试模块内部的数据能否保持完整性,包括内部数据的内容、形式及相互关系不发生错误。

对于局部数据结构,应该在单元测试中注意发现以下几类错误:

1)不正确的或不一致的类型说明

2)错误的初始化或默认值

3)错误的变量名,如拼写错误或书写错误

4)下溢、上溢或者地址错误

最佳实践

如何写好单测

1.代码设计:代码设计上要低耦合、可测试

2.度量指标:合理的单元测试用例数量以及合理的覆盖率

3.使用场景:要融入软件开发中,在开发过程中经常运行

4.测试目标:要专注于代码中重要的逻辑

5.保证独立性:使用mock方式放置依赖系统对单元测试结果的影响

6.用例粒度:单元测试用例应该是对单独的功能的有意义的描述,通过用例可以了解改功能的逻辑

持续集成、持续卡点

代码自测通过后提交MR让团队成员进行review,当review通过时我们会通过webhook触发预发部署流水线执行单元测试和部署

上线前检查

当代码验收通过后,进行线上部署时再次跑单元测试确保上线代码质量,不达标将不能部署

与云原生引擎单元测试实践相似的内容:

云原生引擎单元测试实践

快速迭代的开发工作中如何提高代码质量一直是团队痛点,特别是没有测试支持的开发团队。合理的使用单元测试,并关注单元测试通过率、代码覆盖率可以有效提高代码质量。今天就来讲讲云原生引擎单元测试实践。

分布式注册服务中心etcd在云原生引擎中的实践

作者:王雷 etcd是什么 etcd是云原生架构中重要的基础组件,由CNCF孵化托管。ETCD是用于共享配置和服务发现的分布式,一致性的KV存储系统,是CoreOS公司发起的一个开源项目,授权协议为Apache。etcd 基于Go语言实现,主要用于共享配置,服务发现,集群监控,leader选举,分布

云原生批量计算引擎 Volcano社区v1.8.0版本正式发布

北京时间2023年8月17日,Volcano 社区 v1.8.0 版本正式发布。

大模型重塑软件开发,华为云AI原生应用架构设计与实践分享

在ArchSummit全球架构师峰会2024上,华为云aPaaS平台首席架构师马会彬受邀出席,和技术爱好者分享AI原生应用引擎的架构与实践。

RocketMQ 之 IoT 消息解析:物联网需要什么样的消息技术?

前言: 从初代开源消息队列崛起,到 PC 互联网、移动互联网爆发式发展,再到如今 IoT、云计算、云原生引领了新的技术趋势,消息中间件的发展已经走过了 30 多个年头。 目前,消息中间件在国内许多行业的关键应用中扮演着至关重要的角色。随着数字化转型的深入,客户在使用消息技术的过程中往往同时涉及交叉场

[转帖]从性能问题定位,扯到性能模型,再到 TCP - 都微服务云原生了,还学 TCP 干嘛系列 Part 1

https://blog.mygraphql.com/zh/posts/low-tec/network/tcp-flow-control-part1/ 引 本来想直接写理论、和实践分析的,但为了不 “赶客出門” 和不 TL;DR,还是以故事形式展开吧。语言要生动活泼。 故事的开始 话说,一次性能测试

Kurator v0.4.0版本更新4大内容,满足多云环境的复杂需求

摘要:在最新发布的 v0.4.0 版本中,Kurator 进一步丰富了分布式云原生场景下的应用统一管理能力,以便更好地满足多云环境的复杂需求。 本文分享自华为云社区《Kurator v0.4.0:引领分布式云原生管理的全新篇章》,作者:华为云云原生团队。 Kurator 是一款开源的分布式云原生平台

在 Net7.0环境下测试了 Assembly.Load、Assmebly.LoadFile和Assembly.LoadFrom的区别

一、简介 很长时间没有关注一些C#技术细节了,主要在研究微服务、容器、云原生、容器编排等高大上的主题了,最近在写一些框架的时候,遇到了一些和在 Net Framework 框架下不一样的情况,当然了,我今天主要测试的是,在通过【添加项目引用】和【手动拷贝DLL】的情况下,这三个方法加载程序集:Ass

GaussDB SQL查询语句执行过程解析

今天我们就从GaussDB SQL引擎入手,了解一下GaussDB SQL 查询语句的执行过程,包括GaussDB SQL引擎原理和关键技术点。

履约核心引擎低代码化原理与实践

业界,规则引擎是一个非常普遍的技术类工具,也有很多非常优秀的开源工具,例如Drools等,它是一种嵌入在应用程序中的组件,主要解决易变逻辑和业务耦合的问题,把易变的规则从应用程序代码中分离出来,进而提升交付效率,降低应用程序维护和可扩展性成本。