TA的每日心情 | 擦汗 3 小时前 |
---|
签到天数: 1046 天 连续签到: 4 天 [LV.10]测试总司令
|
引言
DevOps是一种实践方法,旨在保证高质量的前提下实现研发运维一体化,从而大幅缩短系统变更从提交到部署生产环境的时间。其中,持续集成是DevOps中非常重要的一环,它涉及集成多个开发人员的代码,并不断编译和测试,以便尽可能早的识别缺陷。自动化是持续集成的核心,工具链整合是实现自动化的手段和方法。本文主要讲述DevOps工具链整合中如何实现单元测试工具的集成。
单元测试工具集成的方法
单元测试概述
单元测试是指对软件中的最小可测试单元进行检查和测试,对于单元测试中单元的含义,一般来说,可根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java和C#里单元指一个类等等。单元测试是在软件开发过程中进行的最低级别的测试活动,可以在与程序其他部分相隔离的情况下进行测试。
集成条件
持续集成流水线包含单元测试,首先要求研发人员在完成功能开发后,编写对应的功能测试方法或者函数测试方法(单元测试方法),对于规模较大的项目,可以随着功能开发进度逐步编写单元测试方法或者按照功能的优先级和重要程度有选择的编写单元测试方法。
对于Java开发项目,建议使用Junit工具进行单元测试编写,C#开发项目使用Nunit工具进行单元测试编写。目前这两个单元测试工具TFS平台都有较好的支持,故可以方便的纳入TFS持续集成流水线中。
核心价值
通过在持续集成流水线中纳入单元测试活动,可以在开发阶段更快的发现BUG,并且修复他们的成本很低。在软件开发的后期阶段,Bug的发现和修复将变得更加困难,成本会指数级增长;因此应用系统尽可能早的编写单元测试方法和集成对于提高软件质量具有非常重要的意义。
单元测试工具集成的实践
工具链整合框架
为做好数字化转型,着力构建研发运维一体化流程,企业正在打造高效完整的DevOps工具链,贯穿开发、测试、运维各环节,搭建支撑持续集成、自动化测试、持续交付的工具链,实现研发-运维生命周期全流程的自动化:
单元测试集成的两种场景
云下集成
基于TFS平台实现了两大主流开发语言(C#、Java)的单元测试工具(Nunit、Junit)持续集成,只要项目组完成首个单元测试方法编写并本地运行通过后,即可在持续集成流程中加入单元测试过程:
在TFS工具中创建持续集成流水线(生成定义),并通过添加编译、单元测试等步骤,即可实现代码拉取、下载、编译、执行单元测试方法的自动化:
目前,包含单元测试过程的流水线支持多种方式自动化执行:代码提交时自动触发、定时触发、拉取请求(代码归并)时自动触发:
单元测试结果以及代码覆盖率情况(支持Cobertura、Jacoco)可以通过邮件以及页面展示的方式快速直观的反馈给开发人员:
云上集成
云计算在企业应用逐步广泛,使用云进行构建、测试、部署一体化,具备高效、快捷、一致等优势。DevOps持续集成流水线可以采用TFS为入口平台,由TFS触发Jenkins在云上进行编译、单元测试,并将单元测试结果、代码覆盖率结果回传至TFS发布:
注意:云上单元测试集成,需要在云上流水线脚本中加入调用单元测试工具的语句,例如:
- stage('Unit Test') {
- steps {
- sh "${mvnCmd} clean test cobertura:cobertura"
- //请依据实际情况修改pom文件的路径
- step([$class: 'JUnitResultArchiver', testResults: '**/target/surefire-reports/TEST-*.xml'])
- //请提前在代码的pom文件中加上maven-surefire-plugin
- }
复制代码 结束语
经验表明具备完整单元测试方法的研发项目有更高的软件质量,无论什么时候对代码进行修改都可以进行单元回归测试,单元测试集成自动化大大节省了研发人员的宝贵时间,从而把精力集中在单元测试之间的交互作用以及全局的功能实现上。
|
|