【FCon】聚焦金融行业在数智化的全面革新,一线的金融数智化实践干货 了解详情
写点什么

DevOps 交付模式下的软件测试

  • 2020-03-27
  • 本文字数:3553 字

    阅读完需:约 12 分钟

DevOps交付模式下的软件测试

6 月 17 日,极客时间《企业级 Agents 开发实战营》正式上线,10 周掌握企业级 Agents 从设计、开发到部署全流程。

众所周知,近 10 年 IT 领域有两个关键的风向转变,传统 IT 向云计算转变,传统瀑布和迭代开发模式向敏捷开发模式转变。这两个转变促成了 DevOps 产品交付模式的出现。互联网行业竞争激烈,许多公司专注于产品和商业模式的快速迭代创新,期望通过 DevOps 快速交付产品,缩短产品的上市周期。

华为 DevOps 模式下的软件测试体系的分享主要由 “测试对象的识别、测试组织与流程的演变、测试工具与技术的应用、测试管理和自动化测试”四个领域的关键内容组成。

折现分割线

测试对象的识别

软件测试首先需要关注测试对象,不同种类的测试对象的测试策略和测试技术会有显著区别。测试对象即有传统的 Web 服务、移动 APP,也有新兴的微服务和 IoT 设备。



测试对象的识别


  • 移动 APP

  • Android 和 iOS 手机客户端依然是互联网 toC 创业的首选产品模式。移动 App 可以分为 Web App、混合 App 和本地 App 三种模式,2016 年以 React Native 为代表的技术又带火了移动跨平台开发。跨平台开发可以帮助开发者复用大部分代码,但依然无法解决让开发者头疼的 Android 系统碎片化问题。移动兼容性测试仍然是针对 Android 机型碎片化的主要测试手段。

  • Web 服务

  • B/S 结构的 Web 服务依然是很典型的 IT 产品交付形式,尤其是面向企业客户的产品。同时很多遗留 IT 系统仍然使用 SOA 的架构方式。对新系统而言,前后端分离是 B/S 结构的标配。后端无论采用什么语言和框架,和前端的接口基本都是 RESTful 化的,甚至一些框架可以帮助生成 Swagger 标准的接口描述文档。MVC 和 MVVM 模式的普及使得前端架构模式化,最重要完成了分层化,配合 Jasmine 等 JavaScript 单元测试框架,让前端代码质量不再是焦油坑。

  • 微服务

  • 微服务架构被普遍认为是一种比分布式单体架构更优的架构模式,可以降低服务耦合度,减轻服务器资源浪费,提升交付和运维效率。微服务之间采用 API 的调用方式降低了服务的耦合度,微服务框架如 Spring Boot 对 Swagger 的内置支持也提高了微服务 RESTful 接口的标准化水平,这些都提升了服务的可测性。

  • 微服务数量多,每个微服务职能独立,每个微服务使用独立流水线作快速交付,测试模式和传统单体大服务架构有显著区别,需要的不是

  • 物联网设备

  • 物联网市场发展迅速,特别是智能家居、车联网、可穿戴设备、智慧工厂等领域。共享单车最近非常火热,其车锁和定位装置就是典型的物联网终端。物联网终端内置实时嵌入式系统,收集传感器数据做边缘计算,并通过 Wi-Fi、4G、NB-IoT 等接入方式连接手机设备或者云端服务。物联网设备运行环境苛刻,并且会涉及个人隐私数据甚至生命安全、工厂和基础设施的安全运行等,因此防黑客侵入的安全测试和防意外事故的遍历测试和压力测试等对物联网产品至关重要。

测试组织和流程的演变

公司的业务决定了公司的组织和流程。根据康威定律,开发团队的组织结构决定了产品架构。互联网公司专注于创造市场需要客户满意的产品,同时需要根据市场和政策环境及时调整产品竞争策略。产品的发布周期越来越短,产品需求频繁发生变更,产品架构频繁发生重构。这些都对测试活动和产品质量保证提出了巨大挑战。以上挑战决定了 DevOps 模式的测试组织和流程明显区别于传统敏捷模式:


  • 测试活动的质量目标发生变化

  • 测试活动的质量目标由单纯验证产品功能需求、非功能需求扩展为保证客户满意和产品的业务可续。测试团队会站在用户的角度考察产品的易用性和可用性,同时会监控生产环境的 PV、UV、峰值吞吐量等关键指标,并纳入测试场景设计。

  • DevOps 的闭环敏捷模式

  • 敏捷不仅仅体现在开发和测试活动中,业务面也使用敏捷的流程,形成闭环的敏捷。DevOps 会向前连接市场团队和产品经理,向后连接客服团队,形成 Market-Product-Develop-Operation-Customer 的闭环敏捷价值链。产品信息的透明快速流动对敏捷的成功至关重要。测试人员会和产品经理同时获得到来自市场的产品反馈,这些反馈会变成测试需求融入测试活动。

  • QA 和开发的角色融合

  • 在两个披萨原则的团队中,全栈程序员端到端地负责产品的开发、测试和运维,承担了 QA 和运维人员的角色。极客风格的全栈程序员倾向于使用自动化的测试框架。自动化测试可以覆盖的越来越多,解放出来的手工测试人员会向开发转型。

  • 自动化的持续集成

  • 持续集成的自动化程度越来越高,每个公司的实践会有不同,借助 Jenkins 等 CI 工具可以实现从代码提交到自动单元测试再到构建打包的持续集成,甚至和自动化部署、自动化测试打通。在持续集成链条上,自动化测试将覆盖开发环境、测试环境、类生产环境和生成环境上的测试。

  • 测试左移

  • 产品经理使用业务语言描述产品需求,开发人员使用程序语言完成开发,双方对需求的理解有时会产生偏差。BDD 的方式可以帮助开发人员和产品经理对需求达成一致的理解,配合 TDD 的开发方式可以保证开发结果满足需求预期。

测试技术的应用

产品架构的分层模型决定了测试金字塔依然有效。通过单元测试、服务和 API 测试、性能测试、前端测试、移动 App 测试的组合可以覆盖 B/S 架构和云服务+移动客户端形式产品的测试。DevOps 模式下测试自动化水平高,通过集成流水线完成和 CI/CD 打通的持续测试。一些技术发展为自动化测试的效率和质量提升提供了利器。


  • Selenium

  • Selenium 已经成为前端自动化测试的事实标准,主流浏览器都提供对 Web Driver 的支持,Page Object 的设计模式可以实现模块化的测试,Selenium 也支持对多浏览器的并发测试。Web Driver 协议已经提交到 W3C 做标准化工作,未来将成为前端自动化测试的行业标准。


但是现在 Selenium 还有一些缺点,例如使用 Selenium 需要一定的编程能力,因此就限定了使用人员角色,不熟悉编程的产品经理和验收测试人员只能手工做验收测试。另外如果前端页面频繁变动,页面变动之后就得修改测试脚本,这种情况脚本维护成本大。


事实上没有一种测试类型是能够 100%胜任产品测试的,前端自动化测试更适合针对相对稳定的页面做回归测试和冒烟测试,对覆盖不到的可以通过 API 级别测试或者手工测试来补充覆盖。


  • 容器化

  • Docker 为代表的容器生态系统发展迅速,容器集群管理系统 Docker Swarm 和 Kubernetes 可以帮助统一部署、管理、维护 Docker 集群。Jenkins 等 CI 工具也提供了对 Docker 的支持。由于 Docker 可以方便地将运行时环境连同应用一并打包到镜像中,因此可以快速创建和复制标准化的测试环境,并且保持测试环境和开发环境一致性。

  • Swagger

  • Swagger 作为设计、构建和文档化 RESTful API 的工具,其 OpenAPI 标准已经成为事实上的 RESTful API 定义标准。在 Swagger Editor 中,基于 YAML 语法定义 RESTful API 就可以自动生成 API 描述文档。一些框架如 Spring Boot 也提供了对 Swagger 的原生支持。Swagger 描述文档可以作为前后端分离开发中的接口“契约”。测试人员可以把 Swagger 描述文件当作接口需求开发 API 测试。

  • 资源编排和自动部署工具

  • 测试环境管理分两个层面,一个是环境的标准化,另外一个是环境管理的自动化。产品从开发到上线一般经过开发环境、测试环境、类生产环境、生产环境。每一个环境的差异都可能产生未知问题。手工搭建和管理测试环境费时并且易出错,测试人员需要求助于开发人员获取必要的操作系统信息、环境变量、数据库和中间件版本信息、配置脚本和安装步骤等才能顺利地搭建起一套测试环境。在环境统一这一层面,环境编排器可以帮助统一定义各种环境,保持标准化、可配置和易维护。在环境管理自动化这一层面,可以通过一些自动化管理工具完成批量系统设置,批量程序部署,批量运行命令等。华为软件开发云(DevCloud)的部署服务就为用户提供了基于 Ansible 的部署能力。

  • 云化的压力测试和移动 APP 测试

  • 压力测试作为非功能性测试的重要一环,在传统模式下主要考量的是应用服务器与数据库的最大承载能力,在云环境下增加了对云主机弹性伸缩的能力测算。移动 APP 测试主要解决的是碎片化终端下的功能、性能及兼容性覆盖测试,主要考量的是覆盖的机型范围及如何高效自动化完成整体测试,形成全面的分析报告。

  • 测试管理和自动化测试


测试用例的管理是所有测试的基础,在测试的不同阶段(如回归测试、冒烟测试)都需要围绕测试用例进行校验,通过“需求-任务-用例-缺陷追溯”各环节的迭代来确保需求的测试覆盖率,并提供测试验收报告。自动化测试帮助大幅提升测试效率、稳定性和反馈速度。


华为云软件开发服务(DevCloud)云测和移动应用测试提供一站式云端测试平台,覆盖测试管理、性能测试、接口测试、移动应用兼容性测试,简单、专业、高效,助力软件研发全生命周期的持续自动化测试保障。


总结

华为云 DevCloud 是集华为研发实践、前沿研发理念、先进研发工具为一体的研发云平台,为开发者提供研发工具云服务,让软件开发简单高效。


本文转载自华为云产品与解决方案公众号。


原文链接:https://mp.weixin.qq.com/s/uFcGunrIL1M4aijVrY5Ecg


2020-03-27 22:572619

评论

发布
暂无评论
发现更多内容

第五课作业

杰语

腾讯云大神亲码“redis深度笔记”,字字珠玑,全是精华

Java 程序员 架构 面试

不愧是Alibaba技术官,Kafka的精髓全写这本“限量笔记”里,服了

Java 大数据 架构 面试

唵嘛呢叭咪吽|靠谱点评

无量靠谱

从零开始学习ThingJS之创建/销毁物体

ThingJS数字孪生引擎

JavaScript 3D 3D可视化 数字孪生

简单又灵活的权限设计?

蛋先生DX

数据库设计 权限系统 权限 权限架构 rbac

iOS基础原理题目汇总

程序员 面试 iOS 知识体系

Springboot actuator不可不注意的安全问题-可越权-可脱库

果果果

安全 springboot

暑期 2021 | Serverless Devs 最全项目申请攻略来啦!

阿里巴巴云原生

开源 Serverless 开发者 云原生 活动

文本分析基本流程

Qien Z.

文本分析 5月日更

新生代小鲜肉之代码生成器

蛋先生DX

node.js 效率工具 自动化 生成代码

“四大模型”革新NLP技术应用,揭秘百度文心ERNIE最新开源预训练模型

百度大脑

开源 nlp

99% 的同学写不出好代码,都是因为这个问题!

程序员鱼皮

Java c++ Python 自学编程 经验分享

人生算法:愿景,设计人生导航系统

石云升

读书笔记 愿景 5月日更

不含敌意的坚决|靠谱点评

无量靠谱

阿里云 AI 编辑部获 CCBN 创新奖,揭秘传媒行业解决方案背后的黑科技

阿里云视频云

阿里云 媒体 CCBN

思想与落地

型火🔥

架构 分布式 微服务 哲学

公安重点人员情报研判分析系统,可视化大屏系统

从外包到拿下阿里offer,这2年5个月13天到底发生了什么?

Java 程序员 架构 面试

量化马丁策略系统搭建,网格策略交易系统

深入剖析 MySQL 自增锁

leonsh

MySQL 数据库

五分钟开发属于你自己的代码生成器

蛋先生DX

node.js 效率工具 生成代码 JavaScrip

促成“零碳”社会的全面实现,华为云让技术更有温度

xiaotan

华为云

「信创」风口,国产数据库的新机遇

BinTools图尔兹

数据库 数据安全 dba 数据库管理 tdsql

持续测试 | DevOps 时代的高效测试之钥

CODING DevOps

DevOps 持续测试 迭代式测试

大数据采集和常见问题

数据社

大数据 数据采集 5月日更

刚刚接触视频剪辑,怎么快速剪视频?

奈奈的杂社

Serverless Devs 的官网是如何通过 Serverless Devs 部署的

阿里巴巴云原生

Serverless 开发者 运维 云原生 存储

dubbo-go v3 版本 go module 踩坑记

阿里巴巴云原生

容器 开发者 云原生 中间件 dubbogo

阿里云携手 VMware 共建云原生 IoT 生态,聚开源社区合力打造领域标准

阿里巴巴云原生

阿里云 容器 开发者 云原生 k8s

5分钟速读之Rust权威指南(十三)

wzx

rust

DevOps交付模式下的软件测试_DevOps & 平台工程_华为云产品与解决方案_InfoQ精选文章