gitbook/技术领导力实战笔记/docs/13199.md
2022-09-03 22:05:03 +08:00

8.7 KiB
Raw Permalink Blame History

第69讲 | 茹炳晟QE团队向工程效能团队转型的实践之路

你好我是茹炳晟目前担任eBay中国研发中心测试基础架构技术主管今天想跟大家分享的话题是QE团队向工程效能团队转型的实践之路。

在软件开发和项目执行中,工程效能问题一直是技术管理者考量的关键。加快研发效能和提升工程师团队效率及质量,需要在软件智能化上迈出创新步伐。

目前包括Google、eBay等跨国互联网公司的研发团队都在经历“去除QEQuality Engineer质量工程师”的组织架构转变为此Google也暂停了 2017 GTAC并寻求向Engineering Productivity即工程效能的转型。相应地QE团队也正在逐渐向工程效能团队转型。

工程效能团队的好处在于假如你的研发团队规模为100人那么工程效能团队可能需要15个人但当你的开发团队翻了10倍达到1000人规模的时候工程效能团队的人数可能仍旧是15个到20个之间。

所以,随着开发团队人员的增多、规模的增大,工程效能团队的输出和价值会越来越大,这也是为什么很多大型互联网公司、尤其是全球性的互联网公司都热衷于采用这种模式。

如今,谷歌等国外大的互联网公司已经基本实现了向工程效能的转型,国内虽然具体的实践还不多,但很多公司都在做类似的尝试。

在这种模式下整个测试策略发生一个变化。传统的测试由3个部分组成底层是单元测试中间是API测试最上面是GUI测试是一个类似金字塔的三角形。其中单元测试由开发人员来负责API测试和GUI测试都由专职的QE或QA来做。

但到了工程效能模式下除了单元测试API测试和GUI测试也将由开发人员来做。这意味着开发人员需要兼任测试的角色克服从开发到测试的思维局限性。同时还需要一个很高效的测试平台基础架构提供一个便捷的测试执行环境以支持开发人员方便的获得测试数据、执行测试。

原本的功能测试团队则蜕化成现在比较热门的探索式测试,测试开发人员则转变成工程效能开发的角色,去做测试平台相关的开发。

在这个转型过程中如何运用原本QE团队积累的技术优势来设计和构建高效的测试基础架构就变得尤其重要本文将着重分享如何通过架构演进来改善测试执行环境以达到工程效能的提升。

测试执行环境之疼

为了提升工程效能,一般会对测试执行环境提出以下要求:

第一点,对使用者而言,测试执行环境的“透明性”。所谓透明是指假如我今天要用测试环境跑一个Mobile的Native测试需要某个版本、某个分辨率甚至某个品牌的手机但这些设备不需要自己准备只要提供相关的参数后台就会帮我把其他事情准备好并且把相应的测试分发过去。对使用测试环境的人来说他希望整个测试执行环境是透明的。

第二点,对维护者而言,测试执行环境的“易维护性”。所谓易维护是指不希望有上千甚至上万台机器的测试执行环境需要人工维护。因此我们引入了容器化技术用Docker来准备整个测试执行环境。

第三点,对于大量测试用例的执行而言,执行能力的“可扩展性”。引入容器化技术之后,可扩展性自然而然就解决了。我们会根据单位时间内测试用例的排队数量,通过算法来决定这个集群里需要多少台机器才能在规定的时间内执行完全部测试用例。这样整个集群的伸缩也全部由自动化工具来完成,能做到对使用者完全透明。

第四点Mobile移动终端的多样性与碎片化这使得搭建一个包含各种iOS和Android设备的集群成为挑战。

这些都是测试执行环境会面临的问题,我会分享一些我们的实践,以及我们是如何通过架构演进来不断完善测试执行环境的。

第一版基于Jenkins触发测试执行

这是最早也是最典型的测试执行环境即基于Jenkins触发测试执行。我们把测试用例放在Github中Jenkins会去获取这些用例再在远程固定的测试执行环境中去跑这些用例。

第二版基于Test RunnerTest Execution System

因为Jenkins中跑测试的脚本会越来越多因此基于第一个版本我们在Jenkins脚本的基础上封装了一个Test Execution Service这个服务会对Jenkins中的Job进行版本管理、用例管理等以方便发起所有测试同时这个服务不仅提供UI界面以方便开发的使用和对用例的管理还提供Restful API接口用于与CI/CD的无缝集成。

第三版基于Selenium Grid提高测试并行执行能力

原本在整个架构中远程测试执行环境这一部分是一个固定的测试环境都是VM而在这个版本中我们用Selenium Grid搭建了一个Hub可以容纳上百台机器下面挂了很多包含不同OS和浏览器版本的Node。

Selenium Grid其实是一个小的集群这个集群通过一个中央节点来接收所有的测试请求。拿到请求后它会先去查看该测试请求是要跑在什么操作系统上的什么浏览器上面再去查看自己的节点里面有没有相应的机器。如果有它就会把这个测试发到机器上去执行。

第四版基于Jenkins Cluster提高测试并行执行能力

随着测试用例变多原本远程测试执行这块是瓶颈但有了Selenium Grid之后这里的瓶颈问题已经被解决现在当有大量测试请求集中到来的时候所有的测试用例都开始在Jenkins上面排队Jenkins的单节点就成为了瓶颈。基于这个问题在第四个版本中我们把Jenkins打造成了一个集群解决掉了系统的瓶颈点。

第五版基于测试负载用Docker实现Selenium Grid的动态扩展与收缩

经过前面四个版本的演进看似整个测试执行环境的基础架构已经比较完善了但是在eBay内部有个很现实的问题相信不少有全球性业务的公司也会遇到即我们一套测试用例可以在全球各个站点上执行测试同一个测试用例如果乘上支持的国家数量之后用例数据就会爆增。在这种情况下Selenium Grid里放多少台Node合适就成为了问题。多了的话平时会浪费少了的话等用例来了又需要排队。

我们的做法是用Docker实现Selenium Grid的动态扩展与收缩做了一个Auto Scaling的服务根据前面的用例排队情况来决定需要多少Node动态的去扩张整个Node的数量级。

这样做还带来另外一个好处Docker化之后自然而然就解决掉了测试执行环境的维护难题可以通过Docker主要维护Image镜像后面的东西全部是自动化的不需要做太多管理。

除了以上提到的架构演进我们还通过Appium和Selenium Grid搭建了一个移动终端的测试执行集群集群里面放了各种各样的手机设备开发人员指定要哪个品牌哪个型号的机器测试系统就会自动到这个集群中搜索如果有符合要求的机器系统就会自动把测试发上去执行完成之后再自动结束。开发人员都不需要知道这个集群搭建在哪里他只要调用服务就可以使用。

这样一来,对于开发人员来说,他们做测试时就完全不需要考虑测试执行环境的问题,他们只要弄清楚自己的需求就可以了,整个测试执行环境对他们而言是非常透明的。同时,这样一个基础架构的维护成本也非常低,只需要工程效能团队定期维护就可以了。

结语为了进一步提高软件开发效率测试环节也是需要技术管理者们重点关注的方向。如今测试正在经历去除QE向工程效能转型的过程 ,在这一过程中,开发人员将更多的介入测试环节,因此如何提供给开发团队简单、易用、高效的测试基础架构就变得尤为重要。本文分享了测试执行环境架构的演进过程,希望能给有意向转型的团队提供参考。

不知道你的团队目前在采用怎样的测试策略呢?测试执行环境又是如何搭建的呢?欢迎留言分享。

感谢你的收听,我们下期再见。

作者简介

茹炳晟eBay中国研发中心测试基础架构技术主管具有超过12年的软件测试经验和3年开发经验和丰富的测试框架设计与自动化测试经验。另外他还在【极客时间】开设了专栏“软件测试52讲”系统梳理软件测试的知识体系。