云原生引擎单元测试实践

京东云开发者
• 阅读 371

作者:京东零售 王雷

单元测试

概念

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

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

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

单元测试的目的

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

(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触发预发部署流水线执行单元测试和部署

上线前检查

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

云原生引擎单元测试实践 云原生引擎单元测试实践 云原生引擎单元测试实践 云原生引擎单元测试实践 云原生引擎单元测试实践

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
java单元测试工具
前言随着DevOp的不断流行,自动化测试慢慢成为Java开发者的关注点。因此,本文将分享10款优秀的单元测试框架和库,它们可以帮助Java开发人员在其Java项目上编写单元测试和集成测试。1\.JUnit我绝对JUnit不需要太多的介绍了。即使您是Java初学者,也可能听说过它。它可以帮助您为Java代码编写单元测试。几
万木春 万木春
1年前
高效易用的C++单元测试框架:轻松构建高质量代码
单元测试是构建稳定、高质量的程序、服务或系统的必不可少的一环。通过单元测试,我们可以在开发过程中及时发现和修复代码中的问题,提高代码的质量和可维护性。同时,单元测试也可以帮助我们更好地理解代码的功能和实现细节,从而更好地进行代码重构和优化。
Stella981 Stella981
3年前
Android Studio单元测试
啄木鸟软件测试培训网:www.3testing.com今天简单介绍下Android Studio使用代码进行单元测试。  AndroidStudio默认是支持JUnit和Android单元测试的,市面上大多主要讲解的是JUnit的单元测试,而没有侧重的讲解AndroidStudio针对Android的测试,今天主要介绍A
Wesley13 Wesley13
3年前
Jacoco在eclipse上的集成使用
随着敏捷开发的流行,编写单元测试已经成为业界共识。但如何来衡量单元测试的质量呢?有些管理者片面追求单元测试的数量,导致底下的开发人员投机取巧,编写出大量的重复测试,数量上去了,质量却依然原地踏步。相比单纯追求单元测试的数量,分析单元测试的代码覆盖率是一种更为可行的方式。JaCoCo(JavaCodeCoverage)就是一种分析单元测试覆盖率的工具,使
Stella981 Stella981
3年前
Code Review最佳实践
  我一直认为CodeReview(代码审查)是软件开发中的最佳实践之一,可以有效提高整体代码质量,及时发现代码中可能存在的问题。包括像Google、微软这些公司,CodeReview都是基本要求,代码合并之前必须要有人审查通过才行。  然而对于我观察到的大部分软件开发团队来说,认真做CodeReview的很少,有的流于形式,有的可能根本就没有Co
Stella981 Stella981
3年前
Parasoft cpptestcli 指令行参数配置
ParasoftCtest  是款功能非常强大的自动化测试工具,能有效提高软件开发效率和代码质量。功能特点如下:    静态代码分析和编码策略实施;  自动代码审查的图形界面和进度跟踪;  自动化的单元测试和回归测试;  代码覆盖率分析,集成通过应用层覆盖跟踪从单元级测试;  结合静态分析、单元测试、代码评审和其他
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Stella981 Stella981
3年前
OAuth 2.0 单元测试解决方案
为什么需要单元测试单元测试拥有保证代码质量、尽早发现软件Bug、简化调试过程、促进变化并简化集成、使流程更灵活等优势。单元测试是针对代码单元的独立测试,核心是“独立”,优势来源也是这种独立性,而所面临的不足也正是因为其独立性:既然是“独立”,就难以测试与其他代码和依赖环境的相互关系。单元测试与系统测试是互补而非代替关系。单元测试的优
贾敦 贾敦
7个月前
免费在线代码生成云平台
代码生成云平台是一种为开发人员提供便捷、高效的代码生成工具和服务的云服务平台。平台的目标是通过自动化和模板化的方式,帮助开发团队加速应用程序的开发过程,减少重复性劳动,提高代码质量,并降低维护成本。以下是一个代码生成云平台可能包含的产品和功能介绍:模板引擎
京东云开发者 京东云开发者
5个月前
一种极简单的SpringBoot单元测试方法| 京东零售技术团队
前言本文主要提供了一种单元测试方法,力求0基础人员可以从本文中受到启发,可以搭建一套好用的单元测试环境,并能切实的提高交付代码的质量。极简体现在除了POM依赖和单元测试类之外,其他什么都不需要引入,只需要一个本地能启动的springboot项目。目录1.P