自动化测试最佳实践(一):从纺锤模型到金字塔模型

动化测试最佳实践(⼀):从纺锤模型到⾦字塔模型
⼀、当前软件开发的趋势
开篇我们先简要介绍⼀些近⼏年在企业开发中出现的重要概念,以便引⼊持续测试的主旨。这些概念中最重要的两个便是DevOps和微服务。两者都是⽬前软件开发中的最佳实践和⽅法论,旨在为企业提供更⾼的灵活性,提升运营效率。
1.1 DevOps
DevOps是⼀套实践⽅法论和⽂化,提倡打破原有组织和限制,职能团队开始拥抱和接受DevOps所倡导的⾼度协同,研发、测试、运维及交付⼀体化的思维。随着DevOps和敏捷热度的不断提升,⽆论是互联⽹企业还是传统软件企业都开始拥抱敏捷,实践DevOps。持续集成CI(Continuous integration)、持续交付CD(Continuous delivery )作为DevOps的最佳实践,越来越受到重视。
1.2 微服务架构 Microservice Architecture
微服务架构源起于DevOps意识形态和实践中,是⼀种软件架构风格。微服务架构带来了⼀系列好处,例如可部署性、可靠性、可⽤性等等。虽然原则上可以使⽤任何架构来实践DevOps,但微服务架构正在成为构建持续部署 (CD)系统的标准架构风格。由于每项服务的规模都很⼩,它允许通过连续重构来实现单个服务的体系结构,因此减少了对⼤型项⽬前期设计的需求,允许尽早发布软件并且持续交付。微服务和DevOps是天然的共同体,结合起来共同实现软件开发⾏业的变⾰。
⼆、⾃动化测试 Test Automation
随着敏捷和微服务架构的引⼊,CI/CD成为构建和部署的标准,即使在没有采⽤微服务架构的项⽬中也是如此。为了保证已定义的流程和事务按照预期运⾏,测试必不可少。⽽在应对现代软件产品频繁的变化和发布上,传统的⼿⼯测试⽅式在⼈员和效率上都存在严重不⾜,因此⾃动化测试已经成为现代软件研发过程中⼀个关键组成部分。⾃动化测试是打通持续集成和持续交付的核⼼,没有有效的⾃
动化测试保证,持续集成和持续交付就仅仅是⼀个没有灵魂的躯壳。
2.1 测试分类
测试按照不同的维度可以进⾏多种分类。
按测试⼿段是否⼿⼯,可划分为⾃动化测试和⼈⼯测试;
按照测试⽬的划分,可分为功能测试、性能测试、负载测试等。
本⽂采⽤Martin Fowler按照层级分类的⽅式对测试进⾏分类。
Martin Fowler描述测试⾦字塔分为单元、服务和UI三个层级。尽管⼤家对此的具体描述各不相同(有⼈将三层分别定义为单元、接⼝、集成测试;也有⼈将整个⾦字塔划分为4-5个层级),但⾦字塔⾃底向上的结构是⼤家公认和遵循的。
单元测试是针对代码单元(通常是类/⽅法)的测试,单元测试的价值在于能提供最快的反馈,在开发过程中就可以对逻辑单元进⾏验证。好的单元测试可以帮助改善既有设计,在团队掌握 TDD的前提下,单元测试能辅助重构,帮助提升代码整洁度。
2)接⼝(服务/API)测试
接⼝测试是针对业务接⼝进⾏的测试,主要测试内部接⼝功能实现是否完整。⽐如内部逻辑是否正常、异常处理是否正确。接⼝测试的主要价值在于接⼝定义相对稳定,不像界⾯或底层代码会经常发⽣变化,所以接⼝测试⽐较容易编写,⽤例的维护成本也相对较低。在接⼝层⾯准备测试的性价⽐相对较⾼。
3)集成(UI)测试
集成测试从⽤户的⾓度验证产品功能的正确性,测的是端到端的流程,并且加⼊⽤户场景和数据,验
证整个过程是否健康流畅。集成测试的业务价值最⾼,它验证的是⼀个完整的流程,但因为需要验证完整流程,在环境部署、准备⽤例及实施等⽅⾯成本较⾼,实施起来并不容易。
2.2 微服务架构为测试带来的挑战
微服务架构在解决了应⽤⼤⼩、应⽤开发规模等问题之后也带来了⼀些新的问题,⽐较突出的有微服务数量增多、服务间调⽤关系复杂等等。复杂的依赖导致即使项⽬资深开发⼈员也不能⼀下⼦梳理出所有关系。
微服务和传统的单体应⽤相⽐,在测试策略上会有⼀些不太⼀样的地⽅。简单来说,在微服务架构中,测试的层次变得更多,需要测试的服务和应⽤也会变得更多。⼿动执⾏所有的测试是低效的,⽆法跟上互联⽹快速迭代的要求。这时有必要引⼊⾃动化测试来减轻测试团队的压⼒,提⾼测试效率和测试质量。
2.3 ⾃动化测试
说起⾃动化测试,功能测试⼈员可能会将其想得很⾼端复杂。
先来看⼀般的功能测试如何进⾏:设计并编写⽤例⽂档,描述测试步骤和预期结果;测试⼈员根据测试⽤例描述按步骤操作,然后判断实际结果与预期是否⼀致。如果⼀致,测试通过;如果不符,测试
失败。
⾃动化测试要做的事情与功能测试是⼀致的。分层理论和⾃动化测试⽅法结合,出现了三个层⾯的⾃动化:单元测试⾃动化、接⼝测试⾃动化和UI测试⾃动化。当然,不同层⾯的⾃动化关注点是不⼀样的。所以,从测试的⾏为本质上来看,功能测试与单元⾃动化测试、接⼝⾃动化测试和UI⾃动化测试并没有区别。唯⼀的区别是,⼀个由⼈来执⾏,⼀个由代码或⼯具执⾏。
2.4 ⾃动化测试分层
1)单元⾃动化测试
单元测试⾃动化,指对软件中最⼩的可测试单元进⾏检查和验证,调⽤被测服务的类或⽅法,根据类或⽅法的参数,传⼊相应的数据,得到⼀个返回结果,最终断⾔返回的结果是否符合预期。如果相等,测试通过;如果不相等,测试失败。
所以,单元测试关注的是代码的实现与逻辑。单元测试是最基本的测试,也是测试中的最⼩单元,它的对象是函数对象,也可以包含输⼊输出,针对的是函数功能或者函数内部的代码逻辑,并不包含业务逻辑。
该类测试⼀般由研发⼈员完成,需要借助单元测试框架,如java的Junit、TestNG,python的unittest等。
2)接⼝⾃动化测试
接⼝⾃动化测试,主要验证模块间的调⽤返回以及不同系统、服务间的数据交换。接⼝测试⾃动化⼀般在业务逻辑层进⾏测试。根据接⼝⽂档是RESTful还是RPC?调⽤被测试的接⼝,构造相应的请求数据,得到返回值,是成功或者失败。不管输⼊的参数是怎样的,我们都将得到⼀个结果,最终断⾔返回的结果是否等于预期结果。如果相等,测试通过;如果不相等,测试失败。
所以,接⼝测试关注的是数据。只要数据正确了,功能就做成⼤半,剩下的⽆⾮是如何把这些数据展⽰在页⾯上。
常见的接⼝测试⼯具有postman、jmeter、loadrunner等。
3)集成(UI)⾃动化测试
UI层是⽤户使⽤产品的⼊⼝,所有功能通过这⼀层提供给⽤户,⽬前测试⼯作⼤多集中在这⼀层,这种测试更贴近⽤户的⾏为,模拟⽤户点击了某个按钮、在输⼊框⾥输⼊了某些指令。有时可能⽤户看到登录成功了,但UI⾃动化并不知道它刚才的点击有没有⽣效。所以要“证据”,⽐如登录成功后页⾯右上⾓会显⽰“欢迎,xxx”,这就是登录成功的有⼒“证据”。当UI⾃动化登录成功后,就去获取这个数据进⾏断⾔,断⾔如果相等,测试通过;如果不相等,测试失败。
知网
所以,UI⾃动化的关注点⽤户操作形为,以及UI上各种组件是否可⽤。常见的测试⼯具有UFT、Robot Framework、Selenium、Appium 等。
4)分层占⽐最佳实践
每种⾃动化测试都有⾃⼰的侧重和优劣势,在实际⼯作中不可能做到均分,因此我们需要制定合理的测试策略对其进⾏组织和分配,包括每部分测试投⼊多少、测试⽤例⽐例是多少等。
测试⾦字塔还有另⼀个维度的信息,如上图所⽰。
越往上,越接近QA、业务/最终⽤户,越往下,越接近开发;
越往上,测试执⾏越慢,越往下,测试执⾏越快;
越往上,测试成本越⾼(越耗时,失败时的信息越模糊,越难跟踪),越往下,测试成本越低。
英语教学反思案例按照测试⾦字塔模型以及投⼊/产出⽐,我们得知越向下回报率越⾼,所以应该使⽤⼤量的单元测试和全⾯的接⼝测试来覆盖产品提供的基本逻辑和功能,使⽤少量的集成(UI)测试来进⾏前端界⾯的功能验证。
都说业内最佳实践看Google,Google的⾃动化分层投⼊占⽐是:单元测试(Unit):占⽐70%;接⼝测试(Service):占⽐20%;集成测试(UI):占⽐10%.
三、⾃动化测试最佳实践
对现阶段公司⼤部分团队来说,更符合实际测试模式是纺锤模型。新项⽬中,可能由于时限原因或者开发⼈员习惯问题,⼀开始并没有把单元测试准备得很完善;⽽某些遗留⽼项⽬,可能原本就没有多少单元测试。
在上述情况下,⼀般的做法是先将重⼼放在中间层的测试上,原因有以下两点:
第⼀,中间层投⼊产出⽐较⾼,可以实现较⾼的⾃动化率;胡济荣
第⼆,可以帮助加强开发跟测试⼈员之间的协作,提⾼测试质量。这⼀层需要开发跟测试⼈员共同定义,因为开发知道内部实现的细节,测试掌握业务场景。
东方女郎
3.1 纺锤型向⾦字塔型过渡
261医院
当项⽬进⾏⼀段时间以后,各层测试占⽐有必要向理想型的⾦字塔型过渡,这时需要关注以下三个⽅⾯:
开发与测试互相传递能⼒;
全员关注产品设计跟代码的质量;
让⽤例逐步下沉,最后逐步过渡到理想型。
3.2 测试质量评估
关于度量,不要⽤单⼀的指标去评估测试和产品质量,⽐如⽤例通过率、代码覆盖率等都⽆法独⽴地评估产品质量。
评估测试质量时要关⼼以下⼏个⽅⾯:
第⼀是⽤例⽐例,即每⼀层的⽤例⽐例是多少。
第⼆是测试覆盖率。
中央工艺美术学院第三是测试总运⾏时间,因为经过优化以后,总运⾏时间⼀定是越来越少。
第四是代码质量指标,反映代码的质量和整洁度。
四、⾃动化测试⾯临的挑战
引⼊⾃动化测试可以为团队带来很多好处,当然⾃动化测试也有其⾃⾝的缺点和挑战。⾯临的最⼤挑战就是变化,因为变化会导致测试⽤例运⾏失败,所以需要对⾃动化脚本不断debug。如何控制成本、降低成本是对⾃动化测试⼯具以及⼈员能⼒的挑战。
另⼀个值得注意的是,⾃动化测试不能完全代替⼈⼯测试,⼀定的⼈⼯探索测试也是必不可少的。我们⼀直在不懈努⼒和探索,本⽂为⾃动化测试最佳实践系列⽂章的第⼀篇,重点介绍了⾃动化测试的现状和⾦字塔模型,接下来的系列⽂章中会继续为⼤家介绍我们的⾃动化测试实践,包括⾃动化测试平台的核⼼功能、持续测试的⽅法与⼯具等。
作者:魏建军
来源:宜信技术学院
转载于:my.oschina/u/4007037/blog/3068340

本文发布于:2024-09-22 09:48:27,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/124458.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:测试   动化   服务   单元测试
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议