古代软件工程和麻利开发强调拥抱变动,除了对软件系统设计和实现的高质量要求之外,继续集成 (Continous Integration) 也成为高质量交付的重要一环,这对于包含测试工程师在内的开发团队而言极具挑战性。本文将分享测试工程师如何拥抱将来,与时俱进,继续晋升自我涵养。
PART 01 测试工程师面临的新挑战
麻利开发概念从提出到当初曾经有二十年左右的历史了,它的外围是“疾速响应,继续交付价值”。软件开发过程十分强调人的重要性,开发团队要能做到团结合作。人与人的交换、沟通要面对面,而非制订具体的文档,按预约的打算逐个进行开发、测试。变动是麻利开发过程中惟一的不变。
开发疾速提交可测试的代码,也必然要求测试可疾速地验证提交代码的可用性及稳定性,简略的手工测试曾经无奈满足需要了。
在麻利初始,测试开发阶段环境的保护部署根本是 QA 或开发自行实现的,这些工作也根本都是手动去操作的。同时,每个 Scrum 团队所偏重的点不同,因此容易疏忽其余服务,导致测试环境与线上运行环境有些许的差别,上线后就可能存在兼容性或完整性的问题。
在整个开发及测试阶段,咱们要不停地反复一些工作,如批改 bug、部署新包、验证 bug、记录新 bug 等,全线环境也要放弃同步的批改部署。由人手动去部署环境可能会破费比拟多的工夫,也可能会因为人为操作失误引起不必要的问题,造成整个团队无奈进行工作而影响我的项目周期。
咱们面临的问题是:
1、跨域跨部门单干,而不只面对面;
2、如何提高效率,做到疾速交付;
3、如何升高人的干涉升高出错的可能性。
PART 02 DevOps 的利用
咱们认为,DevOps 可解决如上问题。
什么是 DevOps?维基百科给出的定义是:DevOps(Development 和 Operations 的组合词)是一种器重“软件开发人员(Dev)”和“IT 运维技术人员(Ops)”之间沟通单干的文化、静止或常规。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、公布软件可能更加地快捷、频繁和牢靠。
DevOps 外表上是开发与运维的联合,理论它是一个过程、办法与零碎的统称。
DevOps 过程周期:
现实的 DevOps 周期开始于:
1、开发编写代码;
2、自动化编译出包并主动部署到测试环境;
3、执行自动化测试用例并公布;
4、自动化部署到产线环境。
很显然,DevOps 过程中十分强调构建、部署和测试的自动化,在 DevOps 周期中应用继续集成工具、自动化测试工具。
在 DevOps 中测试角色也会发生变化:
传统模式下,测试人员的次要工作是执行他们的性能及回归测试。在测试人员正式验收结束测试包前,构建人员个别会跟测试人员坐在一起工作一段时间,在 DevOps 中这将会产生扭转:
1、由原来的手工测试转为自动化测试,要尽量将所有的用例都自动化,并可达到 100% 代码笼罩;
2、要确保测试环境与产线环境统一,并可自动化部署;
3、测试前工作,清理工作及测试后工作都已自动化并可调配到继续集成的过程中。
DevOps 中须要高度的合作,各个角色职责边界也变得含糊,激励每个人作出本人的奉献,开发人员能够配置部署工作,部署人员能够增加测试用例到 QA 的用例库中,测试人员能够配置批改 DevOps 链路中的用例。
当初及将来对测试人员的要求会越来越高,简略的黑盒测试将无奈达到冀望。
DevOps 是将来,而自动化是 DevOps 胜利的外围。作为一名测试人员要把自动化作为职业倒退的重要方向,专项常识加上自动化技能才能够更好地服务于产品的疾速迭代。
PART 03 自动化测试实际
从下面的剖析咱们能够看出自动化测试在整个产品周期中起的作用,那么咱们应该如何发展?
自动化测试金字塔
从图能够看出,除了单元测试外,API 级的自动化测试能够达到比拟高的测试覆盖率。所以咱们从 API 测试自动化动手,一是利用它咱们能够实现场景用例,更靠近用户的应用;二是绝对 UI 自动化测试,它更稳固。
拍乐云的测试工程师开发了一套 API 自动化测试框架,咱们用该框架做如下自动化的开发:
1、性能用例自动化
2、模仿用户调用接口习惯
3、性能测试
4、品质测试
拍乐云 API 自动化框架
拍乐云是为用户提供实时音视频服务的,咱们志在为用户提供易用、高质量的产品。咱们不局限用户调用接口的形式,用户可按本人的习惯及了解去应用服务,这对产品的鲁棒性要求就更高。
咱们的测试工程师基于对外 API 层来做自动化测试,通过理解产品接口就模仿用户应用习惯方面设计接口测试用例,次要从如下几个方面思考:
1、变动接口参数
2、变动接口调用程序
3、变动接口调用条件
自动化的目标之一是节俭人力老本,利用接口测试来做性能用例的自动化也是这个目标。在这个场景下,咱们次要侧重于回归测试用例。随着性能的减少,回归的老本会越来越高。故性能回归集也会随着性能的减少一直的扩充。咱们把回归用例集分为两局部:
1、根底用例,保障基本功能
2、具体用例集,包含更多的性能逻辑
这两局部各有不同的作用,根底用例用于构建 pipeline,验证新代码是否影响基本功能的应用,这样既不脱漏性能,又可减轻 pipeline 的负载。具体用例集用于验证更简单的用户应用场景,次要利用于测试环境的功能测试,以达到肯定的覆盖率,进一步保障性能的可用性。
在咱们的日常公布中,会有肯定的性能测试,如媒体服务器的并发能力,音视频在特定设施上的性能体现等。性能数据是产品稳定性的体现。性能测试的重点在于场景定义, 在场景肯定的状况,确定性能瓶颈。如一个 Media Server 能够反对多大规模的大会;肯定配置的 MediaServer 能够同时开多少个六人会议,这六人中一人发送一路 720p 及接管 5x180p,其他人都发送 1 路 180p 接管 1 路 720p+ 4 路 180p 等,咱们会依据本人的需要获取相干场景的性能数据作为基准,也会依据少数用户理论应用场景或用户需要来定义性能场景。
六人会议一人发送 720p+ 接管 5 路 180p,其余五人发送 180p 接管 1x720p+4x180p
媒体服务性能指标咱们会关注 CPU、Memory 及网络吞吐量。
还有端的性能,这个数据除了跟场景相干外还和设施自身的配置无关,如雷同场景 iPhoneX 与 iPhone13 Pro 的体现必定不同,iPhone13 Pro 能够稳固并长时间编码 720px30f 及解码 1 路 720px30f,而 iPhoneX 雷同的场景可能继续不了 1 小时甚至更短就会呈现编码降帧率或分辨率的状况。故设施上的性能咱们除了关注 CPU、Memory 的应用外,还会关注设施上所能反对相应视频规格的时长,当然还有耗电状况等。
通过性能用例,模仿用户调用场景,性能及品质测试的自动化,咱们能够达到大概 50% 的覆盖率。除了接口自动化,咱们还利用了 UI 自动化,次要利用到咱们对外 app 的产品状态上。
API 级自动化测试将是咱们自动化的重点,咱们会持续晋升它的作用,将来咱们会增强如下工作:
1、及时增加接口用例,咱们心愿能够做到 Test Driven Development;
2、攻克难点性能,如白板,因为白板会波及到交互操作性能,故导致咱们目前有些自动化无奈全副实现;
3、联合接口自动化实现品质测试的自动化。