DevOps交付模式下,软件测试的那些事

众所周知,近10年IT领域有两个关键的风向转变,传统IT向云计算转变,传统瀑布和迭代开发模式向敏捷开发模式转变。这两个转变促成了DevOps产品交付模式的出现。互联网行业竞争激烈,许多公司专注于产品和商业模式的快速迭代创新,期望通过DevOps快速交付产品,缩短产品的上市周期。
华为DevOps模式下的软件测试体系的分享主要由 “测试对象的识别、测试组织与流程的演变、测试工具与技术的应用、测试管理和自动化测试”四个领域的关键内容组成。华为云近期推出了7天玩转性能&接口测试系列课程,添加小助手微信(devcloud9即可免费参与学习。
一、测试对象的识别
软件测试首先需要关注测试对象,不同种类的测试对象的测试策略和测试技术会有显著区别。测试对象即有传统的Web服务、移动APP,也有新兴的微服务和IoT设备。

?

1. 移动APP
Android和iOS手机客户端依然是互联网toC创业的首选产品模式。移动App可以分为Web App、混合App和本地App三种模式,2016年以React Native为代表的技术又带火了移动跨平台开发。跨平台开发可以帮助开发者复用大部分代码,但依然无法解决让开发者头疼的Android系统碎片化问题。移动兼容性测试仍然是针对Android机型碎片化的主要测试手段。
2. Web服务
B/S结构的Web服务依然是很典型的IT产品交付形式,尤其是面向企业客户的产品。同时很多遗留IT系统仍然使用SOA的架构方式。对新系统而言,前后端分离是B/S结构的标配。后端无论采用什么语言和框架,和前端的接口基本都是RESTful化的,甚至一些框架可以帮助生成Swagger标准的接口描述文档。MVC和MVVM模式的普及使得前端架构模式化,最重要完成了分层化,配合Jasmine等JavaScript单元测试框架,让前端代码质量不再是焦油坑。
3. 微服务
微服务架构被普遍认为是一种比分布式单体架构更优的架构模式,可以降低服务耦合度,减轻服务器资源浪费,提升交付和运维效率。微服务之间采用API的调用方式降低了服务的耦合度,微服务框架如Spring Boot对Swagger的内置支持也提高了微服务RESTful接口的标准化水平,这些都提升了服务的可测性。
微服务数量多,每个微服务职能独立,每个微服务使用独立流水线作快速交付,测试模式和传统单体大服务架构有显著区别,需要的不是一个大而全的测试工具,而是小而精、快的敏捷自动化测试工具。 
4. 物联网设备
物联网市场发展迅速,特别是智能家居、车联网、可穿戴设备、智慧工厂等领域。共享单车最近非常火热,其车锁和定位装置就是典型的物联网终端。物联网终端内置实时嵌入式系统,收集传感器数据做边缘计算,并通过Wi-Fi、4G、NB-IoT等接入方式连接手机设备或者云端服务。物联网设备运行环境苛刻,并且会涉及个人隐私数据甚至生命安全、工厂和基础设施的安全运行等,因此防黑客侵入的安全测试和防意外事故的遍历测试和压力测试等对物联网产品至关重要。

想了解更多测试知识,请参与华为云近期推出的7天玩转性能&接口测试系列课程,添加小助手微信(devcloud9即可免费参与学习。

二、测试组织和流程的演变
公司的业务决定了公司的组织和流程。根据康威定律,开发团队的组织结构决定了产品架构。互联网公司专注于创造市场需要客户满意的产品,同时需要根据市场和政策环境及时调整产品竞争策略。产品的发布周期越来越短,产品需求频繁发生变更,产品架构频繁发生重构。这些都对测试活动和产品质量保证提出了巨大挑战。以上挑战决定了DevOps模式的测试组织和流程明显区别于传统敏捷模式:
1. 测试活动的质量目标发生变化
测试活动的质量目标由单纯验证产品功能需求、非功能需求扩展为保证客户满意和产品的业务可续。测试团队会站在用户的角度考察产品的易用性和可用性,同时会监控生产环境的PV、UV、峰值吞吐量等关键指标,并纳入测试场景设计。
2. DevOps的闭环敏捷模式
敏捷不仅仅体现在开发和测试活动中,业务面也使用敏捷的流程,形成闭环的敏捷。DevOps会向前连接市场团队和产品经理,向后连接客服团队,形成Market-Product-Develop-Operation-Customer的闭环敏捷价值链。产品信息的透明快速流动对敏捷的成功至关重要。测试人员会和产品经理同时获得到来自市场的产品反馈,这些反馈会变成测试需求融入测试活动。
3. QA和开发的角色融合
在两个披萨原则的团队中,全栈程序员端到端地负责产品的开发、测试和运维,承担了QA和运维人员的角色。极客风格的全栈程序员倾向于使用自动化的测试框架。自动化测试可以覆盖的越来越多,解放出来的手工测试人员会向开发转型。
4. 自动化的持续集成
持续集成的自动化程度越来越高,每个公司的实践会有不同,借助Jenkins等CI工具可以实现从代码提交到自动单元测试再到构建打包的持续集成,甚至和自动化部署、自动化测试打通。在持续集成链条上,自动化测试将覆盖开发环境、测试环境、类生产环境和生成环境上的测试。
5. 测试左移
产品经理使用业务语言描述产品需求,开发人员使用程序语言完成开发,双方对需求的理解有时会产生偏差。BDD的方式可以帮助开发人员和产品经理对需求达成一致的理解,配合TDD的开发方式可以保证开发结果满足需求预期。

想了解更多测试知识,请参与华为云近期推出的7天玩转性能&接口测试系列课程,添加小助手微信(devcloud9即可免费参与学习。

三、测试技术的应用
产品架构的分层模型决定了测试金字塔依然有效。通过单元测试、服务和API测试、性能测试、前端测试、移动App测试的组合可以覆盖B/S架构和云服务+移动客户端形式产品的测试。DevOps模式下测试自动化水平高,通过集成流水线完成和CI/CD打通的持续测试。一些技术发展为自动化测试的效率和质量提升提供了利器。
1. Selenium
Selenium已经成为前端自动化测试的事实标准,主流浏览器都提供对Web Driver的支持,Page Object的设计模式可以实现模块化的测试,Selenium也支持对多浏览器的并发测试。Web Driver协议已经提交到W3C做标准化工作,未来将成为前端自动化测试的行业标准。

但是现在Selenium还有一些缺点,例如使用Selenium需要一定的编程能力,因此就限定了使用人员角色,不熟悉编程的产品经理和验收测试人员只能手工做验收测试。另外如果前端页面频繁变动,页面变动之后就得修改测试脚本,这种情况脚本维护成本大。
事实上没有一种测试类型是能够100%胜任产品测试的,前端自动化测试更适合针对相对稳定的页面做回归测试和冒烟测试,对覆盖不到的可以通过API级别测试或者手工测试来补充覆盖。
2. 容器化
Docker为代表的容器生态系统发展迅速,容器集群管理系统Docker Swarm和Kubernetes可以帮助统一部署、管理、维护Docker集群。Jenkins等CI工具也提供了对Docker的支持。由于Docker可以方便地将运行时环境连同应用一并打包到镜像中,因此可以快速创建和复制标准化的测试环境,并且保持测试环境和开发环境一致性。
3. Swagger
Swagger 作为设计、构建和文档化RESTful API的工具,其OpenAPI标准已经成为事实上的RESTful API定义标准。在Swagger Editor中,基于YAML语法定义RESTful API就可以自动生成API描述文档。一些框架如Spring Boot也提供了对Swagger的原生支持。Swagger描述文档可以作为前后端分离开发中的接口“契约”。测试人员可以把Swagger描述文件当作接口需求开发API测试。
4. 资源编排和自动部署工具
测试环境管理分两个层面,一个是环境的标准化,另外一个是环境管理的自动化。产品从开发到上线一般经过开发环境、测试环境、类生产环境、生产环境。每一个环境的差异都可能产生未知问题。手工搭建和管理测试环境费时并且易出错,测试人员需要求助于开发人员获取必要的操作系统信息、环境变量、数据库和中间件版本信息、配置脚本和安装步骤等才能顺利地搭建起一套测试环境。在环境统一这一层面,环境编排器可以帮助统一定义各种环境,保持标准化、可配置和易维护。在环境管理自动化这一层面,可以通过一些自动化管理工具完成批量系统设置,批量程序部署,批量运行命令等。华为云软件开发服务(DevCloud)的部署服务就为用户提供了基于Ansible的虚机和容器部署能力。
5. 云化的压力测试和移动APP测试
压力测试作为非功能性测试的重要一环,在传统模式下主要考量的是应用服务器与数据库的最大承载能力,在云环境下增加了对云主机弹性伸缩的能力测算。移动APP测试主要解决的是碎片化终端下的功能、性能及兼容性覆盖测试,主要考量的是覆盖的机型范围及如何高效自动化完成整体测试,形成全面的分析报告。

想了解更多测试知识,请参与华为云近期推出的7天玩转性能&接口测试系列课程,添加小助手微信(devcloud9即可免费参与学习。
四、测试管理和自动化测试
测试用例的管理是所有测试的基础,在测试的不同阶段(如回归测试、冒烟测试)都需要围绕测试用例进行校验,通过“需求-任务-用例-缺陷追溯”各环节的迭代来确保需求的测试覆盖率,并提供测试验收报告。自动化测试帮助大幅提升测试效率、稳定性和反馈速度。

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

?

看到上面这些内容,你对测试领域是否有了更多认识?想更深入地掌握测试技能,可以关注这里哦!
华为云DevCloud近期推出了7天实战营系列课程:7天玩转性能&接口测试。课程精编了7天精品视频,涵盖接口测试&性能测试两大领域;同时课程专家驻群答疑,实现7天跟踪式教学,帮助学员排除学习障碍;课程实现了理论与实践相结合,对学员的知识与能力共同进行提升。

目前活动正在招募期,了解活动详情:7天玩转性能&接口测试。添加小助手微信(微信号:devcloud9)即可免费参与学习。

DevOps交付模式下,软件测试的那些事

原文地址:https://www.cnblogs.com/yanyanlily/p/11022541.html

时间: 2024-08-27 21:50:13

DevOps交付模式下,软件测试的那些事的相关文章

Play生产模式下java.io.FileNotFoundException那点事

之前”用Scala+Play构建地理数据查询接口”那篇文章里,用到的数据是json格式的文本文件area.json,存放在conf/jsons文件夹下.最开始是放在public/文件夹下,在线上准生产模式下运行: activator dist 得到mosquito-1.0.zip压缩包,解压后: 去/bin目录下运行mosquito脚本报错: java.io.FileNotFoundException 然后就去解压的mosquito-1.0/看发现并没有public文件夹,由此可见public文

关于DevOps你必须知道的11件事

转自:http://www.infoq.com/cn/articles/11devops 关于作者 Gene Kim在多个角色上屡获殊荣:CTO.研究者和作家.他曾是Tripwire的创始人并担任了13年的CTO.他写过两本书,其中包括<The Visible Ops Handbook>,目前他正在编写<The Phoenix Project: A Novel About IT, DevOps, and Helping Your Business Win>和<DevOps C

基于Saltstack、Artifactory打造传统模式下持续部署平台

一. 持续部署 1. 现状 由于没有建立标准的持续部署流程,导致了版本管理混乱,制品管理混乱,上线持续时间长,上线测试覆盖不全面,业务流量上升后故障较多,排查复杂.运维.测试.开发人员每次版本迭代的时候,都要可能需要经历一次通宵的历练,并且这种在上线的第二天依然会出现很多线上故障. 2. 痛点 ·自动化发布体系覆盖率低.·无标准化发布的流程.a) 只注重敏捷.忽视质量问题:b) 变更频繁导致故障率增加:c) 开发语言种类多,发布制品管理混乱,发布方式复杂:·安全问题容易被忽视. 二. 工具介绍

AngularJS中在前后端分离模式下实现权限控制 - 基于RBAC

权限的设计中比较常见的就是RBAC基于角色的访问控制,基本思想是,对系统操作的各种权限不是直接授予具体的用户,而是在用户集合与权限集合之间建立一个角色集合.每一种角色对应一组相应的权限. 一旦用户被分配了适当的角色后,该用户就拥有此角色的所有操作权限.这样做的好处是,不必在每次创建用户时都进行分配权限的操作,只要分配用户相应的角色即可,而且角色的权限变更比用户的权限变更要少得多,这样将简化用户的权限管理,减少系统的开销. 在Angular构建的单页面应用中,要实现这样的架构我们需要额外多做一些事

Linux下套接字详解(十)---epoll模式下的IO多路复用服务器

epoll模型简介 epoll可是当前在Linux下开发大规模并发网络程序的热门人选,epoll 在Linux2.6内核中正式引入,和select相似,其实都I/O多路复用技术而已,并没有什么神秘的. 其实在Linux下设计并发网络程序,向来不缺少方法,比如典型的Apache模型(Process Per Connection,简称PPC),TPC(Thread PerConnection)模型,以及select模型和poll模型,那为何还要再引入Epoll这个东东呢?那还是有得说说的- 常用模型

敏捷开发模式下的自动化测试研究

敏捷测试过程中的自动化目前在国内来看基本上还只是停留在概念阶段,据我所知,目前不少公司也都在尝试过程中,而实际的实践中能取得比较理想成果的,极为有限.而国外不少同仁也都对此持观望甚至抵触的态度.比如advanced QTP论坛的administrator Meir大大 就认为敏捷过程中的自动化是完全不现实的,理由就是sprint间隔时间内没办法完成一个完整自动化过程的设计,而频繁的变更会导致自动化资源的大量浪费,ROI上无任何前景可言. 从我个人观点来看,没必要保持如此的悲观,但更不能过于乐观.

[PHP] swoole在daemonize模式下,chdir失效问题

swoole version: 1.9.6 其实跟swoole的版本无关,因为原代码体系,fpm模式下,在启动的时候,是使用 chdir 函数改变了当前目录的,而其它代码在做类的自动加载的时候,都是写的相对地址,而不是绝对地址. 问题就来了,swoole是多进程的,在daemonize模式下,chdir改变当前目录,在其它进程下是不生效的,所以有时候,不使用daemonize没问题,而使用daemonize会莫名的出现找不到类的情况. 解决方法是,在几个启动的回调里面同时也改变一下目录 $ser

Spark sql 在yarn-cluster模式下找不到表

在hive里建一个数据库test,在数据库里建了一张表user,然后在Spark程序中使用Spark sql读取这张表 "select * form test.user" 当部署模式是spark stand模式和yarn-client模式时,程序可以正常运行,但yarn-cluster模式就报了找不到"test.user"表的错误. 解决办法: spark和hive整合,把hive-site.xml加到spark根目录的conf下,所以,要在提交Spark任务的时候

检测到在集成的托管管道模式下不适用的 ASP.NET 设置。

我们将ASP.NET程序从IIS6移植到IIS7,可能运行提示以下错误: HTTP 错误 500.23 - Internal Server Error 检测到在集成的托管管道模式下不适用的 ASP.NET 设置. 为什么会出现以上错误? 在IIS7的应用程序池有两种模式,一种是“集成模式”,一种是“经典模式”. 经典模式 则是我们以前习惯的IIS 6 的方式. 如果使用集成模式,那么对自定义的httpModules 和 httpHandlers 就要修改配置文件,需要将他们转移到<modules