CI(Continuous integration,持续集成)

CI(Continuous integration,中文意思是持续集成)是一种软件开发时间。持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。借用网络图片对CI加以理解。

持续构建一直是比较热门的话题,通过持续集成可以自动编译、打包、签名项目,配合单元测试可以实现持续集成+自动化测试。本文在结合CI的基础上,通过fir-cli的发布命令,完成了持续集成+自动化部署。让工程师从重复而又枯燥的手动打包完全解放出来,让工程师能更加专注于代码本身,最大限度的减少误操作风险,降低修复错误代码的成本,大幅提高工作效率。

CD(Continuous Delivery, 持续交付)

CD(Continuous Delivery, 中文意思持续交付)是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的Staging环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境。下图反应的是CI/CD 的大概工作模式。

CT(continus testing,持续测试)

完成 CI 中构建及单元测试和集成测试的自动化流程后,持续交付可自动将已验证的代码发布到存储库。为了实现高效的持续交付流程,务必要确保 CI已内置于开发管道。持续交付的目标是拥有一个可随时部署到生产环境的代码库。

相互联系


单元测试、集成测试、回归测试、冒烟测试、验收测试、性能测试、负载测试

前几天,在站立时,我的团队的DBA正在谈论为他最近的项目运行烟雾测试。我以前听过人们谈论烟雾测试,但是由于某种原因,它从未真正使我不知道烟雾测试是什么。它与单元测试有何不同?集成测试?回归测试?

在这一点上,我无法表达这些东西之间的区别让我感到有些尴尬,因此,我决定进行一些研究,并写一个解释器,以便将来我可以参考它,而不会觉得自己是无知的橡皮筋。我认为,由于我已经从事开发工作了将近5年,并且遇到了这个问题,所以可能还有其他一些人同样也不太愿意提出这样的问题。

阅读了许多不同的博客文章,堆栈溢出问题和随机资源后,我为几种不同类别的测试构建了共识的弗兰肯斯坦近似。在花了一些时间进行谷歌搜索之后,我认为要理解各种测试需要考虑三件事。

1.)他们测试什么样的东西?
2.)这些测试什么时候编写和运行?
3.)测试失败会提供哪些信息?
不同的人有不同的定义,一个测试套件可能包含多种类型的测试。例如,您可能要运行一组将集成测试和回归测试组合到一个套件中的测试。没关系。有灰色地带,团队有养成自己的,特定于团队的词汇的习惯。您不需要为每个类别都提供全面的套件。您应该在以下方面进行测试:

您的应用程序的复杂性;
您的应用看到的流量;
您的团队规模。

单元测试
1 他们测试什么?

单元测试评估代码的每个原子单元都按照预期的方式执行。理想情况下,在计划和编写单元测试时,应隔离无法进一步分解的功能,然后进行测试。单元测试应该没有测试外部依赖或相互作用。您绝对应该模拟出api调用。单元测试纯粹主义者还可以让您模拟数据库调用,并且仅在外部源提供正确输入的情况下,才能确保代码正确运行。根据您现有的代码库或经理的偏好,这可能无法实现。如果您无法从单元测试套件中排除数据库功能,请确保对性能有所了解并寻找潜在的优化方法。我可以从经验中告诉您,长时间运行的单元测试套件非常令人不快,并且会大大减慢开发速度。

2 我什么时候运行它们?

您应该与代码并行编写和运行单元测试。当人们指的是测试驱动开发时,他们指的是单元测试,并使用测试作为代码应完成的规范。

3 他们失败了怎么办?

单元测试失败使您知道特定的代码段已被破坏。如果您已将其分解得足够远,则故障应该放大无法正常工作的确切代码段。

故障可以帮助您快速发现并解决问题,并在需要更新规格时通知您。对于何时更新代码文档,它们也可能是一个很好的指南。

集成测试

1 他们测试什么?

集成测试检查两个或多个原子代码单元之间的交互。您的应用程序由执行特定小功能的各个单元组成,并且这些小功能中的每一个可能都是孤立运行的,但是当您将它们编织在一起时会中断。集成测试还测试代码与外部依赖项(例如数据库连接或第三方API)的集成。

2 我什么时候运行它们?

集成测试应该是单元测试之后的下一步。

3 他们失败了怎么办?

集成测试失败时,它会告诉您应用程序的两个或多个核心功能无法协同工作。这可能是您编写的两个模块,它们在某些复杂的业务逻辑中发生冲突,或者是第三方API更改响应结构而导致的失败。如果数据库连接失败,它可能会提醒您错误处理错误。

故障可能很容易识别,或者可能需要一些手动验证和试验才能识别。难以解决集成测试故障表明您可以在哪里改进日志记录和错误处理。

回归测试
1 他们测试什么?

回归测试将检查一组过去有效且应该相对稳定的方案。

2 我什么时候运行它们?

您的集成测试通过后,您应该运行回归测试。在现有回归测试通过之前,请勿将新功能添加到回归测试套件中。

3 他们失败了怎么办?

回归测试失败意味着新功能破坏了一些现有功能,从而导致了回归。

故障应该让您知道哪些旧功能已损坏,并指示您需要在新功能和旧的,已损坏的功能之间编写其他集成测试。

回归测试失败还可能表明您无意中引入了过去修复的错误。

冒烟测试
1 他们测试什么?

冒烟测试是高级的,精心策划的一组自动化测试,位于集成测试和回归测试之间的某个位置。他们在那里的目的是为了确保您网站的核心功能没有损坏。这个词smoke test似乎是对管道的影响。如果您看到烟气或蒸汽从管道中逸出,则表明它有泄漏,需要进行修复。

2 我什么时候运行它们?

冒烟测试应同时对整个系统进行测试,以确保核心功能保持完整。这些不应该是全面的。这些是您重大的,全面的,不合格的测试失败。您应该在登台环境和生产环境中尽早且经常(最好是每天)运行它们。

3 他们失败了怎么办?

如果冒烟测试失败,则说明您网站的功能存在重大问题。在解决这些故障之前,您不应部署新更改。如果它们的生产失败,则应优先解决这些问题。

验收测试
(我也听说过这称为QA / BV /手动测试等)

1 他们测试什么?

验收测试通常是在端到端开发完成之后执行的一组手动测试。他们检查以确保所编写的功能实际上符合所有初始规格或接受标准。

2 他们失败了怎么办?

看起来您在编写代码时错过了一些功能。您将需要重新进行开发并修复该问题。:(

如果验收测试失败,您可能需要在下一次计划过程中更早地决定验收标准。

3 我什么时候运行它们?

由于这些是手动测试,而不是作为代码运行的测试,因此时间安排略有不同。您和您的项目所有者应在项目开始工作之前起草一套验收标准。发现或添加到项目中的任何其他范围都应反映在验收标准中。

在完成开发后,应很快进行验收测试,以便您可以返回并在不正确的地方快速进行迭代。在单元或集成测试之后立即进行这些操作是很有意义的,在您尚未进行太多测试之前就没有必要进行重大更改。

性能测试

1 他们测试什么?
性能测试检查产品和基础架构的稳定性,可伸缩性和可用性。您可能会检查每秒的错误数或加载页面需要多长时间。性能测试不一定有通过/失败标准。这个阶段更多地是关于数据收集和寻找需要改进的地方。

2 他们失败了怎么办?
性能测试不会完全以单元测试套件失败的方式失败。取而代之的是,您收集一组基准,并根据您希望这些数字的位置对其进行评估。如果性能测试失败,则可能表明您需要更多地关注基础结构扩展,数据库查询时间等。

3 我什么时候运行它们?
在主要版本和重构之后,性能测试是一个好主意。

负载测试
1 他们测试什么?
负载测试是一种专门的性能测试,可以专门检查您的产品在预定时间内承受巨大压力的性能。

2 他们失败了怎么办?
负载测试可评估您为流量的显着增长做好准备的情况。如果负载测试失败,这并不意味着您的站点已损坏,但这并不意味着您没有为病毒击中或DDOS攻击做好准备。对于刚开始的小型产品来说,这可能不是什么大问题,但是随着用户群的扩大,失败应该成为一个问题。

3 我什么时候写的?
负载测试不应立即成为您首先要解决的问题,但是随着您的产品变得越来越大和越来越成熟,您可能应该对新功能进行负载测试,以查看它们是否会影响站点的整体性能,以及是否可以优化。



Jenkins - 最流行的开源免费持续集成工具

Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。

Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。

Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、Gradle。

Jenkins的安装和使用参考:CI/CD之jenkins_Tuki_a的博客-CSDN博客_ci/cd jenkins

Jenkins实现CI/CD自动构建和发布步骤:Jenkins实现CI/CD自动构建和发布步骤 - 走看看



DevOps

Development和Operations的组合词:

DevOps 看作开发(软件工程)、技术运营和质量保障(QA)三者的交集。
突出重视软件开发人员和运维人员的沟通合作,通过自动化流程来使得软件构建、测试、 发布更加快捷、频繁和可靠。
DevOps 希望做到的是软件产品交付过程中 IT 工具链的打通,使得各个团队减少时间损 耗,更加高效地协同工作。专家们总结出了下面这个 DevOps 能力图,良好的闭环可以大大 增加整体的产出。

  • 构建/构造:主要指开发阶段,包括设计和实现。
  • 编译:把开发的程序源码编译成可执行文件。
  • 打包:将你开发后的可执行文件和必要的文档(如使用说明等)使用打包工具(如InstallShield)制作成软件包,就是我们通常用来安装软件的那个东西。
  • 发布:把你的软件包公布出来,或者交给客户。

参考文献

Different types of testing explained

测试开发工程师成长日记010 - Jenkins中的CI/CD/CT(持续集成构建/持续交付/持续测试)相关推荐

  1. 测试开发工程师成长日记018 - 测试面试必备题记录(持续更新)

    技术模块 一.在搜索引擎中输入汉字就可以解析到对应的域名,请问如何用LoadRunner进行测试? 建立测试计划,确定测试标准和测试范围 设计典型场景的测试用例,覆盖常用业务流程和不常用的业务流程等 ...

  2. 测试开发工程师成长日记009 - 环境排排站:开发环境、测试环境、生产环境、UAT环境、仿真环境

    一.五种环境 项目部署环境一般可分为三种:开发环境,测试环境.生产环境,对应过程为:开发->测试->上线: 细分生成环境又分为生产环境和仿真环境,具体概念如下: 而UAT环境指的是用户接受 ...

  3. 测试开发工程师成长日记016 - 关于提测的那些事

    1.提测预演 背景:前期存在提测质量低,提测后bug量较多,需求遗漏等情况,现增加并规范落实,提测预演环节,增加预演是否通过的相关标准. 目标:提高项目/迭代提测质量. 预演流程: 提测标准: 完成并 ...

  4. 测试开发工程师成长日记014 - linux常用命令day06

    一.其他命令 1.tar 作用:tar命令是Unix/Linux系统中备份文件的可靠方法,几乎可以工作于任何环境中,它的使用权限是所有用户. tar [主选项+辅选项] 文件或目录 主要参数 使用该命 ...

  5. 测试开发工程师成长日记011 - linux常用命令day03

    一.系统管理命令 对于Linux系统来说,无论是中央处理器.内存.磁盘驱动器.键盘.鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心.熟悉了Linux常用的文件处理命令以后,这一讲 ...

  6. 测试开发工程师成长日记004 - linux常用命令day01

    Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作.文件存取.目录操作.进程管理.文件权限设定等.所以,在Linux系统上工作离不开使用系统提供的命令.要想真正理解Linux系统, ...

  7. 测试开发工程师成长心路

    入行测开,马上就要4年了.创业公司待过,大公司也待过,工作这一路走来,一些心得,转变,职场体会,早就想写出来分享一下.这个历程包含了技术的提升,工程师的素养和对这个行业的点滴感悟. 自动化测试vs测试 ...

  8. 5年测试开发工程师感悟——写给还在迷茫中的朋友

    自从走出校园,从事软件测试岗位,一转眼5年过去了.这5年,我从一个软件测试0基础的小白成长为懂测试又熟悉开发的测试开发工程师:回顾这些年发展历程,感概万千!!! 第一次听说软件测试这个词,还是在大学最 ...

  9. 重磅干货 | 带你深入解读:全栈测试开发工程师

    篇符较长,深度好文,请耐心看完! 1. 测试人员生存的窘境 在移动互联网飞速发展和行业新需求的推动下,软件测试行业在不知不觉中发生着非常大的转变,如果说早期软件测试行业还是一个风口,随着转行人员以及毕 ...

最新文章

  1. win10 安装字体且不占用系统盘资源
  2. Python的安装 || python介绍
  3. python3模拟登陆人人网(requests)
  4. 免费课程 | 云脑机器学习实战训练营,中美大咖携手带你飞!
  5. php开发微信图灵机器人
  6. IDEA和mysql的连接
  7. 【JUC】第一章 JUC概述、Lock 接口
  8. xstatic图形连接linux,RHCE认证考试模拟题深入讲解:linux配置静态IP地址为:192.168.0.X!...
  9. ruby rails
  10. paip.php调试脱离IDE VC59
  11. 谷歌地球到底有多厉害?附查看高清卫星影像方法
  12. mysql进销存表设计_数据库设计:数据库进销存管理系统(包含有仓库出库入库触发器)...
  13. ORA-01830: date format picture ends before converting entire input string
  14. s2 安恒 漏洞验证工具_Struts2漏洞检查工具2018版本V2.1.exe
  15. 适合前端Vue开发童鞋的跨平台Weex
  16. Oracle日志挖掘技术logminer
  17. 用php计算身体质量指数,BMI计算器,身体质量指数BMI在线计算
  18. 九龙证券|通信巨头火了!地产板块异动拉升,龙头获主力资金追捧
  19. H265摄像头如何实现网页直播
  20. 照片合成动态图片的方法

热门文章

  1. ElementUI选择时间组件年月日时分秒
  2. php程序员怎么样,浅谈PHP程序员如何修炼?
  3. 【python】2048缺陷版
  4. C# flaote double 精度、范围
  5. html怎么实现画布中的清屏,卡通片-画布清屏效果 - 程序中掩藏状态栏 - 平添子菜单_169IT.COM...
  6. python元组和列表都支持的方法_(3)python 列表和元组
  7. PHP代码被加密解决方法
  8. 工程师职称评审学历不同准备的材料也不同
  9. 【问题思考总结】什么是行通选,列通选?他们又和片选线是什么关系?
  10. 问题描述:执行*.sh命令出现问题