购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.3 为何要开展UI自动化测试

测试按照不同的维度可以进行多种分类,例如,按测试是否采用手动方式执行,可划分为手动测试和自动化测试;按照质量特性,可划分为功能测试、性能测试、安全测试等。这里展示了马丁·福勒(Martin Fowler)按照层级方式对测试进行的分类,即常见的测试金字塔模型,如图1-2所示。

图1-2 马丁·福勒的测试
金字塔模型

马丁·福勒的测试金字塔模型将测试分为单元测试、服务测试和UI(User Interface,用户界面)测试3个层级。在测试行业的发展历程中,也出现了一些重新定义金字塔分层的测试模型,尽管大家对此的具体描述不尽相同(有人将3个层级分别定义为单元测试、接口测试、集成测试,也有人将整个金字塔划分为4或5个层级),但金字塔自下向上的结构是大家公认的。

这里简单介绍3个层级测试的概念。

单元测试指对软件中最小的可测试单元进行检查和验证,调用被测服务的类或方法,根据类或方法的参数,传入相应的数据,返回一个结果,最终断言返回的结果是否符合预期:如果符合预期,则测试通过;如果不符合预期,则测试失败。所以,单元测试关注的是代码的实现与逻辑。单元测试是最基本的测试,也是测试中的最小单元;它的对象是函数,它可以包含输入/输出,针对的是函数的功能或者函数内部的代码逻辑,并不包含业务逻辑。该类测试一般由开发人员完成,需要借助单元测试框架,如Java的JUnit、TestNG,Python的unittest、Pytest等。

接口测试主要用于验证模块间的调用和返回,以及不同系统、服务间的数据交换。接口测试一般在业务逻辑层进行。它根据接口文档是REST(Representational State Transfer,描述性状态迁移)风格还是RPC(Remote Procedure Call,远程过程调用)风格来选择调用被测试的接口,构造相应的请求数据,发送请求,得到返回结果,判断测试是否通过。不管输入的参数是怎样的,我们都将得到一个结果,最终断言返回的结果是否等于预期结果:如果等于预期结果,则测试通过;如果不等于预期结果,则测试失败。所以,接口测试关注的是数据。只要数据正确了,接口的功能就实现了一大半,剩下的就是如何把这些数据展示在页面上。常见的接口测试工具有Postman、JMeter、Python Requests等。

UI层是用户使用产品的入口,所有功能都通过这一层提供给用户,目前测试工作大多集中在这一层。UI测试更贴近用户的行为。测试人员通过模拟用户单击某个按钮或在文本框里输入某些字符来验证功能实现的完整性、正确性。

基于测试金字塔模型,自动化测试逐步细分为单元自动化测试、接口自动化测试和UI自动化测试。既然自动化测试可以在不同层级开展,那么应该选择使用哪种自动化测试呢?

每种自动化测试都有自己的侧重和优劣势,很难说哪种自动化测试具有绝对的优势,各种自动化测试的占比也很难一概而论。如果要在团队或项目中推进自动化测试工作,我们应该如何制定相对合理的自动化测试策略呢?让我们看一看图1-3。

图1-3 自动化测试分层

图1-3透露了以下信息。

● 越往上(UI自动化测试),测试执行速度越慢;越往下(单元自动化测试),测试执行速度越快。

● 越往上,测试成本越高(需要更多的执行时间,且在测试用例执行失败时,获得的信息越模糊,越难跟踪);越往下,测试成本越低。

● 越往上,越接近质量保证人员、产品人员、最终用户;越往下,越接近开发人员。

● 越往上,业务属性越强;越往下,技术属性越强。

由测试金字塔模型和投资收益率(Return on Investment,ROI)我们得知,层级越靠下,投资收益率越高。所以,一个成熟的团队应该大量使用单元自动化测试和接口自动化测试来覆盖产品提供的基本逻辑和功能的验证,使用少量的UI自动化测试来进行前端界面的功能验证。

虽然在UI自动化测试上不应该过多投入,但是限于企业发展现状、项目类型、测试人员技能储备等因素,UI自动化测试是众多项目团队最先开展且见效最快的一种测试。另外,UI自动化测试还具备单元自动化测试和接口自动化测试不具备的优势。例如,单元自动化测试能验证代码处理的正确性,接口自动化测试能验证数据返回的正确性,但是前端(Web端或App端)结果展示是否正确只能依靠UI自动化测试来验证。所以,单元自动化测试、接口自动化测试和UI自动化测试不是非此即彼的关系,它们有各自擅长的领域,切勿形成下层优于上层的错误观念。 9alIEzRt0GndgxaNSyU+pPOq2kPHseHQyZhEDu7SVBlM9hxChAmi0rFsyPM6k9Ph

点击中间区域
呼出菜单
上一章
目录
下一章
×