本文分享自华为云社区 《云化测试七种武器》,作者: 敏捷小智。
本文首先介绍了云化测试基本概念。之后,解释了测试左移、测试右移、高度自动化和智能化、数据驱动四项基本原则。最后,结合华为云的优秀实践,重点讲解了服务接口测试、在线全链路压测、服务、全自动化测试、现网导流测试、现网拨测和辅助质量评估,七种云化测试常见方法。对于测试人员了解并熟悉云化全流程持续测试,具有指导意义。
1云化持续测试基础知识
1.1什么是云化持续测试
云化持续测试,是指基于云平台和测试自动化、智能化技术,对云原生应用进行持续、高效测试。
图1:基于云和AI 技术的云化持续测试
云化测试和传统测试的区别,主要体现在测试对象、测试架构和测试效能的不同。
图2:云化测试与传统测试的区别
1.2云化测试四项基本原则
目前业界和华为公司的云化测试基础理念,可以总结成四项原则,水平维度,在测试生命周期上,推荐测试左移和右移。垂直维度上,在测试方法和基础数据上,推荐自动化、智能化与数据驱动。
1、测试左移:尽早开展测试,加强开发者测试。
2、测试右移:线上测试,覆盖发布和线上运行阶段。
3、高度自动化:测试设计、执行、分析自动化,减少全流程人力投入
4、数据驱动:利用数据对产品质量进行自动的反馈评估并持续改进
图3:云化测试四项基本原则
1.2.1 原则一:测试左移
测试左移,鼓励尽早开展测试、加强开发自测试、加强接口测试。通过契约测试,解耦前后端和服务间开发依赖
图4:测试左移
1.2.2 原则二:测试右移
测试右移,开展线上测试。在真实环境中进行测试,有效补充研发环境无法开展的测试场景。以业界在线测试开展较好的微软公司为例,在线测试可以进行如下维度的划分:
被动
- 被动监控:观察目标系统
-数据挖掘
-性能监控
-环境验证 - 试验:观察用户行为
-A/B 设计
-新版本质量验证
-狗粮/Beta
主动
- 主动监控: 基于用例
-API 测试
-用户场景测试 - 系统可靠性
-压力测试
-破坏性测试
图5:在线测试分类
1.2.3测试左移右移之后的金字塔模型
理论上,测试金字塔模型中,单元测试比重最大,然后依次是集成测、端到端测试和UI 测试。但是,多个测试团队在实践中发现,单元测试开展的难度和代价较大,需要有充分的预留时间和专业的单元测试知识,才能高质量开展单元测试。在实际测试中,很多团队正在探索由金字塔模型向纺锤模型的演进,即减少单元测试,增强接口测试、契约测试、在线测试。
图6:由金字塔模型向纺锤模型的演进
1.2.4 原则三:高度自动化与智能化
尽量减少手工测试和手工操作。测试自动化不仅仅包括自动化测试执行,还包括其他所有可以减少人力投入的活动,例如自动化环境创建,自动化部署,自动化监控等。通过AI 辅助用例自动生成、结果智能分析等能力,提升测试效率,助力高度自动化的达成。
图7:高度自动化
1.2.5 原则四:数据驱动质量提升
利用内部研发数据和外部用户数据对产品质量进行自动的反馈评估
被测对象多层次的打点设计、各种方式采集用户的反馈数据、基于业务的指标模型设计
图8:数据驱动质量提升
接下来,将结合华为云优秀实践,重点讲解服务接口测试、在线全链路压测、Mock 服务、Web 全自动化测试、现网导流测试、现网拨测和AI 辅助质量评估,七种云化测试常见方法。对于测试人员了解并熟悉云化全流程持续测试,具有指导意义。
2云化测试七种武器
2.1云化测试全景图
基于云化测试基础理论和云化测试的原则,可以发展出很多实用的云化测试方法和实践。结合研发模式和角色,形成云化测试全景图。
图9:云化测试全景图
2.2云化测试七种武器
以服务接口测试能力为核心,构建七种云化测试核心能力。导流测试导入现网真实接口场景,解决研发环境测试场景覆盖问题。通过Web 自动化测试记录接口调用链。全链路压测可以复用功能测试用例,Mock服务实现接口依赖替换,现网拨测复用研发用例,有效看护现网质量,接口测试为AI 复制质量评估提供原始数据,并从质量评估获得持续反馈。
图10:云化测试七种武器
2.2.1 云化测试七种武器之一:服务接口测试
接口测试,主要负责测试系统间的交互接口的测试。主要测试后端、微服务接口和API,和界面测试相比,稳定性、效率高。测试测试又可进一步划分成单接口测试和多接口组合测试。
单接口测试,制定接口测试覆盖策略,全部 or 部分覆盖,使用等价类划分、边界值分析等方法设计单个接口的测试用例。
图11:单接口测试
多接口组合测试,先后调用多个关联的接口,测试接口组合起来可以正确完成一个用户场景
图12:多接口组合测试
API接口测试有三个指导原则,即同源、独立测试和100%自动化测试。
1.同源:就是设计、开发、测试三个活动基于同一源头开展
2.独立测试:DevOps模式下,50%+服务涉及服务依赖,服务自测试前移到开发自测试阶段开展,创建Mock服务使环境解耦,否则微服务独立测试难以开展
100%自动化测试:在开发自测试阶段,开发人员时间有限,为了提高转测效率应该尽量高效使用自动化,也就是说能自动化解决的工作尽量自动化解决,就是我们倡议的100%自动化
实践:DevCloud接口自动化测试
使用DevCloud测试工具APITest进行接口和接口级场景功能自动化测试,结合华为优先研发实践和研发理念,测试用例免代码编写、一键导入swagger接口定义自动生成脚本模板,基于脚本模板组装编排、管理接口自动化测试用例。
图13:DevCloud接口自动化测试
DevCloud 接口自动化测试的主要优势:
1、简单
0编码开发成本
0环境搭建成本
2步接口测试
1步性能测试性能
2、高效
可视化编排测试用例
测试关键字批量复用
云端弹性资源池
实时反馈测试结果
3、专业
HTTP等4种API协议
高级测试场景编排
X类XX+预置检查点
多环境测试参数管理
流水线持续自动化测试
2.2.2 云化测试七种武器之二:在线全链路压测
在线全链路压测目前在业界的主流互联网公司均在开展,主要目的是使用真实的现网环境,模拟流量突发时,识别整个调用链路中的性能瓶颈。
在线全链路压测的核心是如何做好测试流量识别和隔离,避免对生产环境用户正常使用造成影响。需要解决以下关键问题:
流量标记
数据隔离
外部服务隔离
资源/KPI监控
压测流量调整
调用链辅助分析
业务低峰执行
数据清理
图14:在线全链路压测
在线全链路压测需要对被测系统进行调整。上图中,蓝色部分为测试组件,压测平台控制中心发起压力,经过压测负载均衡,进入被测云服务环境,外围依赖服务采用Mock 方式固定返回值。橙色部分为压测辅助系统,收集调用链,并对系统的资源进行监控。
下图为华为公司终端云某产品为应对春节抢红包活动进行的50倍压测,压测过程共发行带宽瓶颈、内存Full GC,服务挂死等20+问题,达到了预期效果,有效保障了当年春节抢红包活动的顺利进行。
图15:华为终端云某产品在线全链路压测效果
2.2.3云化测试七种武器之三:Mock 服务
Mock服务可以模拟接口的响应,解决在微服务系统开发及测试过程中依赖的服务未开发、第三方服务不稳定等问题。同时支持性能测试、异常测试等场景,还可以将Mock实例替代真实服务,支持系统级的联调及混沌测试等场景。
下图展示了Mock 服务的工作原理:用户访问Mock 门户,Mock 服务启动Mock 实例,根据需要决定是否要转发给真实服务,然后根据规则,匹配返回消息。
图16:Mock 服务工作原理
Mock 服务在开发、测试、部署阶段, 均有应用场景:
- 开发阶段,实现并行开发,提升开发效率。
- 测试阶段,提升测试的效率和覆盖率,以及自动化测试执行的成功率
- 部署阶段,在微服务系统中部署mock服务替代真实服务,便于进行系统级测试及混沌测试
以下是华为云Devcloud Mock 服务的核心能力:
图17:Mock 服务核心能力
2.2.4云化测试七种武器之四: Web全自动化测试
Web自动化测试,目前业界比较流行的开展方式是Selenium+TestNG组合。但这种方式需要基本的编程经验,而且需要查阅大量的API说明,不利于手工测试人员快速上手。
华为公司Web 自动化能力,满足了手工测试人员期望“不用编码就能实现Web自动化测试”。通过图元驱动+控件驱动测试技术的全自动化测试框架,通过AI算法能力和图像识别技术,实现全GUI界面的自动化测试能力,解决HTML5等无法获取控件ID的自动难题。具体方案如下:
图18:一站式Web 全自动化能力
实践: 华为公司进行WebUI场景功能自动化测试
使用华为测试工具ARTBot进行WebUI场景功能自动化测试,结合华为优先研发实践和研发理念,测试用例免代码编写、录制回放机制生成脚本,基于脚本模板组装编排、管理WebUI自动化测试用例。
图19:WebUI 自动化测试能力
WebUI 自动化测试具有如下优势:
简单
- 0编码开发成本
- 0环境搭建成本
- 3步生成WebUI脚本
- 1步WebUI自动化执行性能
高效
- 可视化编排测试用例
- 测试关键字批量复用
- 云端弹性资源池
- 实时反馈测试结果
专业
- 高级测试场景编排
- 定制化用户数据配置
- 固化常用步骤
- 流水线持续自动化测试
2.2.5 云化测试七种武器之五:现网导流测试
导流测试工作原理:将生产环境用户真实数据引流至研发区验证环境,通过对比研发区的验证结果与生产环境真实结果是否一致判断新版本是否存在
导流测试实施要点:
1.请求收集:收集生产环境用户真实请求
2.数据同步:生产环境冷备DB数据,同步至A/B两套环境
3.流量回放:将真实流量回放至A/B两套环境
4.结果对比:比对A/B两套环境流量执行结果
图20:导流测试工作原理图
实践:云测导流测试
关键效果: 基于调用链的导流回放能力,通过http、mysql、redis三种类型的MOCK能力的构建,解决回放中的数据依赖问题,实现导流回放技术上新的突破,引流现网蓝环境(灰度环境)流量进行例行回放,完成1XXX个接口回放设计,现网灰度流量覆盖XXX+接口,共发现版本问题XX个。
图21:导流测试效果
2.2.6 云化测试七种武器之六:在线拨测
在线拨测,又称为在线持续测试,是指产品/服务发布后,在生产环境对产品/服务重要功能进行7*24小时持续拨测以便尽早或先于用户发现问题并协助研发人员快速修复上线
在线持续测试要点:
1.筛选用例:筛选版本重要功能对应的测试用例
2.定时拨测:定时(每隔5分钟)对重要功能进行拨测
3.现网告警:拨测用例执行失败并发送告警短信,提示告警等级
4.处理上线:研发人员根据告警快速处理并快速修复上线
图22:在线拨测
实践:云测在线持续测试
关键技术:
1、用例共享:研发、在线测试用例资源共享,提升研发效率
2、执行方式灵活:用例按节点区域、并行串行、定时执行等多种执行策略,满足不同测试需求
3、模拟全球用户持续发起在线测试:全球部署测试客户端,模拟全球用户,跨区域持续测试被测服务,实现分布式部署,实时发起线上真实请求并收集数据
图23:在线拨测实践
2.2.7 云化测试七种武器之七:AI 辅助质量评估
测试有效性是测试设计和质量监控管理的核心目标
- 基于时间维度的AI可靠性模型、基于空间维度的易失效模块分析辅助测试有效性预测和评估
- 基于E2E追溯一张图(测试资产知识网络)&图挖掘/搜索算法,实现从过程全程质量跟踪
以上就是本文的全部内容。