• 15
  • 14
分享
  • 突破DevOps瓶颈:自动化测试平台建设实践——软件测试圈
  • 恬恬圈 2021-01-27 17:34:13 字数 3147 阅读 5410 收藏 14

一、了解什么是DevOps

       DevOps的目标是实现软件系统的快速交付、并且提升系统稳定性和获得用户良好的反馈。不知道是不是有些同学和我一样,仅仅靠单纯概念性的描述比较难以理解什么是DevOps。

       就好像我们常常说要养成“良好的生活习惯”,那这个“良好的生活习惯”可能会包含:早睡早起、健康饮食和合理锻炼锻炼等等具体的行为。其实DevOps这个有点抽象的概念也是由一系列具体的行为和软件工程实践组成的。包含:基础设施即代码、CI/CD、自动化测试、容器化、服务编排、自动化部署和软件度量等。

       CI/CD流水线是决定系统能否实现快速交付的关键所在,也是DevOps实践中关键的一环。

11.png

图1:DevOps模式

二、自动化测试的困境

       而在研发团队的实践过程中,自动化测试往往是一个比较难啃的硬骨头。我列出其中两个困难点:

       (1)自动化测试需要持续不断投入,自动化测试脚本和代码的开发工作量不小于实际业务代码的开发工作量;

       (2)构建CI/CD流水线系统的团队往往是独立于业务研发团队而存在的,而其中自动化测试环节却需要业务研发团队的配合才能够良好实施。

       在众多的研发团队中,有一些负责质量效能的团队是自动化测试的先行者。他们能够抽出专门的资源来编写自动化测试用例;并通过自己搭建Jenkins来实现自动化测试用例的夜间定时执行;还有些团队自己开发了测试平台实现自动化测试用例管理、执行和度量等功能。但是这种各自独立的自动化测试平台又存在以下问题:

       (1)按照各自平台标准开发的自动化测试用例,由于技术框架不同等原因,并不能实现资源共享和重用。

       (2)自动化测试相关数据都是存在各自的平台中,当需要在更大范围内对不同应用或系统的自动化测试程序进行度量和评估时,由于标准不统一和数据不互通而导致难以实现。

       (3)自动化测试的机器资源有限,常常由于执行资源受限而影响自动化测试的运行效率。而且不时会由于执行机器的偶发性故障影响自动化测试执行的稳定性。

       (4)自动化测试常常通过手动触发或者定时触发执行,并没有与实际的研发流程结合起来。研发在进行日常特性功能开发、变更的提测、合并主干和发布上线等操作的时候,并没有实现实时触发自动化测试的执行,

三、破局之道

       笔者所在的团队已经为公司内部提供了一套完整的DevOps工具方案,从迭代管理、代码仓库、分支策略、编译构建、静态代码分析、单元测试、测试环境部署、自动化测试到线上发布,贯穿了整个研发过程。

       下面重点介绍下自动化测试子系统如何结合实际业务场景来解决研发过程中的痛点。说起自动化测试的实现方式,笔者以目前通用的实现方案为例,从是否需要写代码的角度来分析下其优劣:

       1、需要写代码的自动化测试

  • 优点:灵活性强,可以基于不同的XUnit测试框架(例如基于Java语言的Junit、TestNG;基于Python的Pytest、Unittest等)来实现自动化测试代码的编写。对于测试开发工程师来说,使用原生的框架来通过写代码的方式实现自动化测试,有利于自身的技能提升,能够学到更多的东西。

  • 缺点:有一定门槛,有些测试同学缺乏编码能力,要想写自动化测试代码,需要首先学习基本的编程语言语法,还需要学习测试框架的基本使用。

       2、不需要写代码的自动化测试

  • 优点:上手简单,成本低;测试工程师不需要掌握编程技能,便可以通过页面配置的方式来编写一个自动化测试用例(参考Postman等工具)。

  • 缺点:扩展能力较差,操作步骤和配置项较繁琐。不像基于代码来实现自动化测试有强大的扩展能力,而且一般有较多的配置项,需要通过较多的步骤和配置来实现复杂业务场景。

       另外还有智能化的自动化测试,既不需要写测试代码/脚本,又不需要繁琐配置,一般可基于线上流量或者业务代码自动生成自动化测试;不过目前来看,智能化测试和基于流量录制的Diff测试等等覆盖的场景有限,仍然不能完全替代传统的自动化测试。

       而笔者目前所在团队开发的JAT自动化测试子系统,支持以上两种方式来实现自动化测试。用户既可以通过编写Java代码的方式,也可以通过页面配置化的方式来实现自动化测试。

       JAT自动化测试平台致力于解决研发过程的测试痛点,其目标是为各业务研发团队提供自动化测试的基础能力,包含测试生成、测试执行和测试度量等。通过与持续集成流水线的集成和在研发过程中的内嵌,在保障系统高质量的前提下,使用自动化的手段逐步提升研发团队的交付效率,从而实现DevOps的落地。

       3、针对基于TestNG框架编写的自动化的功能特性

       (1)实现测试工程的规范化

       通过一键生成测试工程脚手架来规范工程的结构目录和相关配置:

22.jpg

图2:生成测试工程脚手架

       对于外部导入的测试工程会首先进行目录结构和配置的规范检查:

33.jpg

图3:导入测试工程规范检查

       (2)实现测试方法的平台可视化展示和数据统一度量

       将测试方法在平台上可视化展示出来:

44.jpg

图4:测试方法可视化展示

       实现产品级测试数据的统一汇总和展示:

66.png

图5:测试数据展示

       (3)实现测试工程打包和执行的分离

       由原来直接拉取测试工程代码通过Maven命令执行,改为打包服务和执行服务分离,采用先构建测试包,再发到测试区执行的方式。这种把测试代码管理和执行服务分开的方式,能够满足对测试代码管理比较严格的诉求,可以避免把测试代码直接拉到测试执行环境,从而一定程度上控制测试代码的扩散和外漏风险。

7.png

图6:测试工程打包与执行分离

       (4)实现与CI/CD流水线系统(JCI)的对接

       如果是手动触发或者定时执行的自动化测试计划,那么只需要在JAT平台上创建相应的测试计划就可以了。

       而想要实现一个持续集成流水线,也就是当代码变更时,能触发拉取代码、编译构建、环境部署和自动化测试执行一连串的操作。就需要在JCI系统里配置一个自定义流水线来实现。

8.png

       图7:CI流水线中的自动化测试

       目前是通过测试套件(TestNG测试套件)的方式与流水线集成,后续还会支持通过测试计划的方式与流水线集成,也就是在流水线中可以选择该产品/应用下属的自动化测试计划。

四、未来展望

       为了更好的支持研发团队的DevOps实践落地,JAT自动化测试平台后续计划在以下几点继续丰富功能:

       (1)接口自动化测试用例的自动生成:能够进一步简化编写自动化用例的成本;基于被测应用服务的源码和配置等信息,自动生成门槛覆盖率的自动化测试用例,并一键创建测试计划,从而满足最基本的基本功能回归测试需求。

       (2)自动化测试的精准度量:在目前接口覆盖率和代码覆盖率的基础上,实现产品/应用代码覆盖率及变更代码覆盖多维度的度量。给研发提测、部署和发布等操作提供更加精确和可参考的自动化测试数据 。

       (3)进一步丰富持续测试功能:在目前对接自定义流水线的基础上,进一步增加流水线触发自动化测试执行的场景;并且能够实现自动化测试结果数据与CI/CD流水线系统(JCI)上的其他研发过程数据的深度整合,比如自动化测试覆盖率与功能测试覆盖率的数据合并计算等。


作者:京东数科技术说

原文链接:https://blog.csdn.net/JDDTechTalk/article/details/110184635#comments_14694874

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 黑盒测试(black—box testing)又称功能测试、数据驱动测试或基于规范的测试。用这种方法进行测试时,被测程序被当作看不见内部的黑盒。在完全不考虑程序内部结构和内部特性的情况下,测试者仅依据程序功能的需求规范考虑确定测试用例和推断测试结果的正确性。因此黑盒测试是从用户观点出发的测试,黑盒测试直观的想法就是既然程序被规定做某些事,那我们就看看它是不是在任何情况下都做的对。完整的“任何情况”是无法验证的,为此黑盒测试也有一套产生测试用例的方法,以产生有限的测试用例而覆盖足够多的“任何情况”。由于黑盒测试不需要了解程序内部结构,所以许多高层的测试如确认测试、系统测试、验收测试都采用黑盒测试...
            15 15 3681
            分享
          • 当面对大量用户模拟和性能测量需求时,单台计算机运行 JMeter 往往显得力不从心。因此,构建一个多节点的JMeter集群成为了一种提升测试性能的有效途径。接下来,本文将详细介绍如何组建和配置一个JMeter测试集群。一、准备工作:服务器搭建首先,我们需要数台性能相匹配的服务器,每台服务器都需装备如下:Java运行环境必须预装好。各服务器间应保持通信畅通,可通过SSH或RDP等手段实现。二、安装环节:搞定JMeter接下来,在每台机器上部署JMeter。可从JMeter的官方网站下载最新版本的安装包并顺利安装。安装后务必配置 环境变量,操作如下:在服务器的 ~/.bashrc&nbs...
            0 0 828
            分享
          • 1、概述(1)无线网络性能测试分类DT车载测试 开着车在路上测试,在室外进行。CQT通信质量测试定点测试(2)测试主要工具硬件工具:笔记本USB接口、硬板读写速率。GPS外用USB的GSP。测试终端分析工具:LMT:本地维护终端LMT是一个逻辑概念。LMT连接到RNC外网,提供NODE B操作维护的用户界面。在NODE B操作维护子系统中,是用户对NODE B进行操作维护的终端。LMT 提供图形化用户界面,使用户可以通过Web 页面对BSC6900 进行操作和维护,实现MML 命令的输入、命令执行结果的显示、告警显示、消息跟踪、性能监测和设备维护等功能。OMC:操作维护中心ATP:自...
            13 13 2371
            分享
          • 软件测试:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。一、软件的分类1、按照功能划分:【系统软件】:如操作系统、数据库管理系统,各种驱动软件等;【应用软件】:如Office、有道翻译、QQ等;2、按照技术结构划分:【单机版本】:如Office,画图工具等;【C/S结构软件】:如QQ、微信等;【B/S结构软件】:如新浪、搜狐、google等;3、按照使用终端划分:【PC端】:电脑版QQ等安装在电脑端的软件;【移动端】:如手机版QQ、微信等安装在移动端的软件;4、按照用户划分:【产品软件】:Office、财务处理软件、360卫士等;【项目软件...
            1 1 1943
            分享
          • 读者提问:阿常,我想请教一下,测试点等同于测试用例吗,需求分析得到的测试点是否可以直接拿过来当测试用例执行呢 ?阿常回答:测试点并不等同于测试用例,不能直接拿来指导测试。1、测试点在内容上可能会存在冗余,测试输入不明确,测试颗粒度太粗,操作环境类似等等一系列的问题。2、测试点需要经过 “ 加工 ” 之后,才能成为测试用例。3、我们需要对测试点进行 “ 去重 ”、“ 合并 ”、“ 细化 ”,再确定各个测试点的测试条件、输入数据和输出结果。4、测试点是一些零散的测试思路的集合。5、测试用例是一份正确指导测试的使用说明书。阿常碎碎念:那如何将测试点加工成为测试用例呢,我们将在下一问中继续讨...
            0 0 1062
            分享
      • 51testing软件测试圈微信