热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

后台自动化测试与持续部署实践

后台自动化测试与持续部署实践https:mp.weixin.qq.comslqwGUCKZM0AvEw_xh-7BDA后台自动化测试与持续部署实践原创 腾讯程序员 腾讯技术工程 2

后台自动化测试与持续部署实践 https://mp.weixin.qq.com/s/lqwGUCKZM0AvEw_xh-7BDA


后台自动化测试与持续部署实践

图片

4) 接入全链路追踪系统

状态码和状态消息是面向客户的,拿着它们去找失败点可能会定位精度不足。全链路追踪非常有价值,任何现代的后端系统都应该接入一套 OpenTelemetry 的实现,使用 OpenTelemetry 的好处是其协议具有通用性,可以很好地被各种工具支持。每一个严肃的业务开发都有必要了解这一块的知识,当你需要排查一个线上问题而无从下手时就会深有体会。

腾讯内部天机阁工具可以作为 OpenTelemetry 的后端,我们将所有的服务接入了天机阁。接入全链路追踪后,在接口测试和端到端测试时,使用统一的格式将 Trace ID 打印到 test log 中,一旦测试失败,就可以拿着 Trace ID 去快速定位失败点。


1.2.2. 提升可理解性

可理解性是指被测系统的信息获取是否容易,信息本身是否完备,并且易于理解。比如被测对象是否有说明文档,并且文档本身可读性以及及时性都有保证。常见的可理解性包含以下这些方面:



  • 提供用户文档(使用手册等)、工程师文档(设计文档等)、程序资源(源代码、代码注释等)以及质量信息(测试报告等)

  • 文档、流程、代码、注释、提示信息易于理解

  • 被测对象是否有单一且清楚定义的任务,体现出关注点分离

  • 被测对象的行为是否可以进行具有确定性的推导与预测

  • 被测对象的设计模式能够被很好地理解,并且遵循行业通用规范


我们在可理解性上的实践目前并不多,后面有更多经验时再进行分享。


1.2.3. 提升可控制性

可控制性是指能否容易地控制程序的行为、输入和输出,是否可以将被测系统的状态控制到测试条件的要求。一般来讲,可控制性好的系统一定更容易被测试,也更容易实现自动化测试。可控制性一般体现在以下各个方面:



  • 在业务层面,业务流程和业务场景应该易分解,尽可能实现分段控制与验证。对于复杂的业务流程需合理设定分解点,在测试时能够对其进行分解。

  • 在架构层面,应采用模块化设计,各模块之间支持独立部署与测试,具有良好的可隔离性,便于构造 Mock 环境来模拟依赖。

  • 在数据层面,测试数据也需要可控制性,能够低成本构建多样性的测试数据,以满足不同测试场景的要求。

  • 在技术实现层面,可控制性的实现手段涉及很多方面,比如提供适当的手段在系统外部直接或间接的控制系统的状态及变量、在系统外部实现方便的接口调用、私有函数以及内部变量的外部访问能力、运行时的可注入能力、轻量级的插桩能力、使用 AOP(Aspect Oriented Programming)、trpc-filter(trpc 服务的插件特性)等实现更好的可控制性等。

为了提升中间件的可隔离性及更好的构建测试数据,我们对中间件做了下述几项治理工作:

1) 统一使用名字服务进行寻址

微服务架构下,如果还是使用固定的 ip:port 访问中间件,将难以灵活应对中间件扩缩容,也很难使用集群式管理。因此,寻址方式应该统一使用名字服务,统一通过 namespace+env 方式进行寻址,无需再为各个环境单独配置 ip:port。

以 db 为例,目前 db 可支持通过域名或名字服务寻址:

a. 通过域名寻址,需要为 Production 和 Development 分别配置不同的域名,如下面的 tap1.com 和 tap2.com;

b. 通过名字服务寻址,不同环境用同一个名字 tap.db,再通过 namespace/env 到北极星(腾讯内部的统一服务发现和治理平台)寻址不同环境的地址,即可访问;

图片
运行结束后自动显示测试报告:图片

通过持续优化秒级监控发现的问题,我们将系统的稳定性提升到 99.99% 以上并能够一直保持。


3.1.2. 提升测试稳定性

单元测试的稳定性提升方式,主要有:



  • 避免使用 sleep

  • 减少 mock 的使用

  • 不要在用例中修改或依赖系统环境,如时钟

  • 不使用随机数作为输入

  • 单测中不能访问数据库、网络,不要跨进程调用

  • ……

接口测试的稳定性提升方式,主要有:



  • 下游服务及外部 http 依赖,尽量使用 mock

  • 依赖的数据,应该在 setup 时初始化,不要依赖库中现有的数据

  • 对测试数据的修改,测试结束后需要还原

  • 运行时使用独立的隔离测试环境,避免冲突

  • ……

接口测试和端到端测试实践的过程中,我们经常会遇到不稳定的用例( Flaky Test ):相同的测试用例,有时测试通过,有时又测试不通过。这样的测试用例可以理解为是不稳定、可靠度低的测试用例。造成用例不稳定的原因有很多种,比如测试代码本身的问题、测试框架的问题、被测系统及其依赖的软件库的问题等。如果有很多这种测试用例,我们将会对测试失去信心。

在 LogReplay 项目的自动化实践中,我们使用 TestOne Flakiness 缓解方案提升端到端测试可靠性的运行方案:监控并记录测试用例的可靠性数值(flakiness 值),如果达到某个阈值,则认为这个用例不可靠,并自动移除该测试用例(不在关键路径中运行、或测试结果不作为关键路径是否成功的标志)。如下图所示:
图片

当然,我们的微服务中,不止有代码变更,还有配置、数据库等变更,接下来我们也需要继续探索并实现配置、数据库等变更的持续、自动化部署。

不同类型的业务场景和需求差别较大,自动化测试与持续部署的方式及思路也不尽相同,本文只是我们的“一家之言”,并不一定适用于其他的业务场景。但,我们追求的目标,应该是类似的,都是希望能“质量更高”、“速度更快”,而实现这两个目标,都离不开自动化测试、自动化部署。回到本文的标题,希望有越来越多的业务一起探索实践、及分享后台自动化测试与持续部署实践,也随时欢迎一起交流。

用到的测试工具:

文中描述的工具绝大部分皆为腾讯内部自研产品。

TestOne : 腾讯自主研发的一站式测试平台, 能给用户一站式浸入式的测试体验。

术语:




    1. CI: 持续集成(Continuous Integration)

    2. CD: 持续部署(Continuous Deployment)

    3. mockserver : 实现 mock 功能的服务,可以对服务进行 mock

    4. Sandbox/Test/Staging/Canary/Production 环境:沙箱测试环境,基线测试环境,预发布环境,金丝雀环境,正式环境,统称为线上环境

    5. Flaky Test : 片状测试,不稳定测试,是一种具有不确定性结果的测试:对于相同的代码,运行相同的测试,它有时会通过,而有时会失败。


 



推荐阅读
  • 熟练掌握Spring Cloud,终于成为Java工程师的面试门槛 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • [翻译]微服务设计模式5. 服务发现服务端服务发现
    服务之间需要互相调用,在单体架构中,服务之间的互相调用直接通过编程语言层面的方法调用就搞定了。在传统的分布式应用的部署中,服务地 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 使用Docker安装和运行Nexus
    本文介绍了使用Docker安装和运行Nexus的方法,包括docker-compose.yml配置和启动时可能出现的权限问题解决方法。同时提供了登录控制台验证安装的地址和登录信息。 ... [详细]
  • BPM是什么软件?1、BPM是BusinessProcessManagement的简称,译为业务流程管理,它是一种以规范化的构造端到端的卓越业务流程为中心以持续的提高组织业务绩效为 ... [详细]
  • 说出来你可能不信,我用三天做了一个完整的项目
    Java在人工智能中能起到什么作用?作为编程语言中的扛把子,Java20多年稳定不倒,就在于它的稳定性,维护成本极低。这使得 ... [详细]
  • 本文介绍了如何将CIM_DateTime解析为.Net DateTime,并分享了解析过程中可能遇到的问题和解决方法。通过使用DateTime.ParseExact方法和适当的格式字符串,可以成功解析CIM_DateTime字符串。同时还提供了关于WMI和字符串格式的相关信息。 ... [详细]
  • 众筹商城与传统商城的区别及php众筹网站的程序源码
    本文介绍了众筹商城与传统商城的区别,包括所售产品和玩法不同以及运营方式不同。同时还提到了php众筹网站的程序源码和方维众筹的安装和环境问题。 ... [详细]
  • 企业数据应用挑战及元数据管理的重要性
    本文主要介绍了企业在日常经营管理过程中面临的数据应用挑战,包括数据找不到、数据读不懂、数据不可信等问题。针对这些挑战,通过元数据管理可以实现数据的可见、可懂、可用,帮助业务快速获取所需数据。文章提出了“灵魂”三问——元数据是什么、有什么用、又该怎么管,强调了元数据管理在企业数据治理中的基础和前提作用。 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
  • VSCode快速查看函数定义和代码追踪方法详解
    本文详细介绍了在VSCode中快速查看函数定义和代码追踪的方法,包括跳转到定义位置的三种方式和返回跳转前的位置的快捷键。同时,还介绍了代码追踪插件的使用以及对符号跳转的不足之处。文章指出,直接跳转到定义和实现的位置对于程序员来说非常重要,但需要语言本身的支持。以TypeScript为例,按下F12即可跳转到函数的定义处。 ... [详细]
  • 面试经验分享:华为面试四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试
    最近有朋友去华为面试,面试经历包括四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试。80%的人都在第一轮电话面试中失败,因为缺乏基础知识。面试问题涉及 ... [详细]
  • 本文详细介绍了在Linux虚拟化部署中进行VLAN配置的方法。首先要确认Linux系统内核是否已经支持VLAN功能,然后配置物理网卡、子网卡和虚拟VLAN网卡的关系。接着介绍了在Linux配置VLAN Trunk的步骤,包括将物理网卡添加到VLAN、检查添加的VLAN虚拟网卡信息以及重启网络服务等。最后,通过验证连通性来确认配置是否成功。 ... [详细]
  • 随着我司的应用都开始容器化,相应的ETL流程也需要迁移到容器中。常规的SQL和shell脚本迁移之后执行基本没有问题,主要的问题在于数据接入使用kettle的场景下,kettle启 ... [详细]
author-avatar
小Q理性的激情农_885
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有