为什么我们需要自动化回归?

码林珊瑚
• 阅读 1756

本文是《微服务治理实践》系列篇的第六篇文章,为大家介绍微服务测试中的自动化回归:基于微服务契约信息快速编排被测服务、管理自动化测试用例。可视化用例编辑界面,丰富的预置检查点、内置变量,支持自定义变量、参数传递、持续自动化测试,帮助您高效管理、回归业务测试场景,帮助业务快速验证、快速交付。该系列文章基于阿里云商业化产品 MSE 的微服务实践,如果您的团队具备较强的微服务治理+测试能力,那么希望我们在微服务治理+测试方面的实践和背后的思考,可以为您提供一些参考。

第一篇:《微服务治理解密》

第二篇:《微服务治理实践:服务查询》

第三篇:《微服务治理实践:金丝雀发布》

第四篇:《微服务治理实践:服务契约》

第五篇:《微服务治理实践:如何降低微服务测试成本》

前言


当前微服务迭代周期短、版本多,服务需要具备独立测试和快速验证能力,支撑服务测试耗时缩短以及测试活动前移。面临多方面的挑战:

  • 服务不具备独立验证能力;
  • 自动化用例开发效率很低;
  • 在高并发的使用场景下健壮性如何保证;
  • 如何及时发现现网服务出现异常。

本文旨在讲述“自动化用例开发效率很低”的主要解决方案,在详细讲述微服务测试—自动化回归之前,先给大家讲一个场景。

为什么我们需要自动化回归?

在这个典型的企业微服务应用架构图中,Product Service 应用提供查询商品列表和通过 ID 查询商品详情的功能,Business Service 应用提供添加商品到购车的功能。如果想验证用户操作的从查询商品列表→通过ID查询商品详情→将商品添加至购物车这个业务场景,现在我们一般怎么做呢?

  1. 进入 Product Service 应用部署所在的机器(ECS)或者容器(Pod),通过 curl 命令调用查询商品列表,验证返回的商品列表是否不为空。
  2. 把查询商品列表返回值中的 ID 拼接到 curl 命令的入参中,调用通过 ID 查询商品详情,验证详情中的字段是否符合预期。
  3. 进入 Business Service 应用部署所在的机器(ECS)或者容器(Pod),把 ID 拼接到 curl 命令入参中调用添加该商品至购物车,验证添加是否成功。

如果以上场景一次验证不通过,还要反复重复以上操作,至此我们可以总结出云上微服务测试的几点问题:

  • 云上网络拓扑复杂
  • 业务链路场景验证难
  • 重复繁琐操作验证效率低

为什么我们需要自动化回归


微服务测试自动化回归,结合我们的研发实践和研发理念,测试用例免代码编写、一键选取被测服务、快速组装编排、低成本管理自动化测试用例。

为什么我们需要自动化回归?

MSE 自动化回归实践


前提条件:微服务应用已接入 MSE。
下面围绕前言中描述的场景如何使用微服务测试的自动化回归,从用例设计,用例生成,用例执行,打造简单、高效、专业的微服务测试能力,为微服务上线保驾护航。

用例设计

首先我们设计被测服务的加购物车业务场景,包括查询商品列表、查询商品详情、添加商品至购物车三步,设定每步的入参和预期。

为什么我们需要自动化回归?

用例生成

  1. 登录 MSE 控制台,在页面左上角选择地域;
  2. 左侧导航栏选择:微服务治理 -> 微服务测试 -> 自动化回归 -> 创建用例;
  3. 第1测试步骤查询商品列表,选择 productservice 应用 -> 选择 Spring Cloud 框架 -> 选择/ products 服务 -> (默认)选择 GET 方法;第 1 测试步骤无需入参,直接点击“访问一次”查看返回值,再点击“出参提取助手”获取需要校验的检查对象:

为什么我们需要自动化回归?

  1. 第 1 测试步骤在“断言(选填)”中粘贴刚选取的检查对象,检查条件选择不是空;在“出参提取(选填)”的出参提取表达式中粘贴需要提取的id字段,并定义出参名为id:

为什么我们需要自动化回归?

为什么我们需要自动化回归?

  1. 点击“添加下一步骤”增加第2测试步骤查询商品详情,选择 productservice 应用 -> 选择 Spring Cloud 框架 -> 选择/ product/{id} 服务 -> (默认)选择 GET 方法;Path 切换自定义输入,将/ product/{id}修改为/product/${id},即把第 1  测试步骤中提取的id传入第 2 步骤:

为什么我们需要自动化回归?

  1. 同时也对第 2 测试步骤设置断言和出参提取:

为什么我们需要自动化回归?

  1. 点击“添加下一步骤”增加第 3 测试步骤查询商品详情,选择 cartservice 应用 -> 选择 Dubbo 框架 -> 选择 CartService 服务 -> 选择 addItemToCart 方法;在基本信息中编辑入参数据,传入第 1 和第 2 测试步骤提取的入参,并在断言中设置预期返回值为 true:

为什么我们需要自动化回归?

  1. 点击“保存配置”。至此已成功将用例设计的业务场景转化成一个俱备上下文传参、丰富断言的能力的自动化测试用例。

为什么我们需要自动化回归?

用例执行

触发立即执行测试用例,在执行历史查看验证业务的正确性和编排用例的正确性。
为什么我们需要自动化回归?
查看验证不通过测试步骤的具体失败信息,比如预期价格为 900 ,实际为 800 ,校验等于(数字)比较失败。

为什么我们需要自动化回归?

我们还有什么能力


本文介绍了微服务治理下微服务测试-自动化回归的能力,补齐了微服务生态测试的能力,但我们不止于此,我们即将夯实自动化回归能力,提供多样化的入参能力(系统函数、环境变量、集合变量、全局变量、参数化、参数容错自动生成等等),提供测试集管理能力(将测试用例分组、批量执行),丰富的执行能力(串行执行、并行执行、定时执行),甚至与服务测试、服务巡检、服务压测结合,将服务测试一键生成测试用例,将测试用例一键生成巡检任务、生成压测场景。
除了MSE(微服务引擎),微服务测试能力还将被 EDAS、SAE 等云产品集成。将微服务测试能力作为一个基础能力被更多云产品集成,另外,将跟更多微服务产品 ARMS (应用实时监控服务)、ACM(应用配置管理)、CSB(网关)形成联动,助力保障云上业务稳定性,让业务永远在线。

如果您在微服务引擎 MSE 使用微服务测试过程中有任何疑问,欢迎您添加钉钉群号:31180380  加入钉钉群进行反馈。

【阿里巴巴中间件】专注于微服务、容器服务、Serverless……等云原生热门话题,关注同名公众号获取更多精彩内容和福利!
tips:公众号后台回复【抽奖】有惊喜,活动最后一天~

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
4年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
4年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
4年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
4年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Stella981 Stella981
4年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
API 小达人 API 小达人
2年前
如何进行自动化测试,提高测试效率?
作为测试人员,在进行比较大的项目时,使用自动化测试能帮助我们事半功倍地完成测试工作,提高测试效率,缩短开发周期。EolinkApikit为测试工程师提供API文档管理、快速接口调试、测试用例管理、及自动化测试等功能。协作测试工程师快速查看API文档及变更,以及更快的进行接口测试和自动化测试工作,降低测试用例编辑成本,提升自动化测试效率。
Python进阶者 Python进阶者
2年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
研发视角浅谈R2流量回放测试
一、背景测试小伙伴们在2023年保障了团队线上系统0问题,这简直就是一项了不起的壮举!这得益于咱们测试组同事对工作的细致投入、风险把控、以及严格遵循流程规范进行测试用例评审、自动化建设、联调推动、回归验证、常态化压测、大促高保真压测、引流回放等多重保险策略