无论是人工手动测试还是自动化测试,最核心的任务就是编写测试用例、执行测试用例、输出测试报告以及维护测试用例。因此,如何提高自动化测试效率就等同于如何提高自动化编写、执行、维护测试用例的效率。这里,就要给大家推荐一个设计模式——PO模型。
1、什么是PO模型?
所谓PO就是指Page Object,可以理解为把每一个页面当成一个对象,然后给这些页面写一个类,完成主要的元素定位和业务操作。
因此它的设计原则包括如下几点:
①对每一个页面进行抽象
②页面中没有繁琐的继承关系
③页面中只需涉及到主要业务元素
④将页面划分功能模块并将其在Page中实现
根据上述设计原则,我们便可以对代码进行分层,对定位信息、Page层、Handle层以及Business层进行封装,从而更好地管理测试代码。具体结构如下图:
2、为什么使用PO模型?
在上述概念中,我们知晓了PO模型的设计原则能让我们更好管理测试代码,那么它具体的优势是什么,能从什么方面提高我们的效率呢?话不多说,我们先上图。
一个简单的登录操作,我们一开始可能会这样写代码:
从这段代码中我们只需要在每一行代码里对元素进行定位,然后进行键盘输入或鼠标动作即可。这样看起来代码维护并不难。但是如果随着时间迁移,脚本和页面变得越来越多时,如果我们想对某个元素或者某个操作的值进行更改就会变得十分困难,代码可维护性很低。
然而在使用了PO模型后,代码一下子就变得整齐清晰起来:
元素层:
逻辑层:
业务层:
如下图,大多数的登录页面元素包含了用账号框、密码框、登录按钮、注册按钮、忘记密码按钮和记住账号按钮等几个主要功能元素。因此,对于登录页面来说,元素层基本上无需太大改动,就可以复用在多个APP测试中。
同样的,对于这些元素的操作也是一样的,账号框和密码框是输入,登录、注册、忘记密码、记住账号按钮是点击操作。因此,逻辑层我们也无需改动便可复用。我们只需要修改业务层的输入值便可实现多用例、多APP测试覆盖,这样看来效率是不是提高了不少呢?
综上,我们可以总结出PO模型的三大优点:
- 提高代码可维护性
PO模型为我们提供了一种业务流程与页面元素操作分离的模式,这使得测试代码更加清晰整洁。特别是针对UI频繁变化的项目,代码的可维护性得到了提升。
- 提高代码可读性
PO模型对代码进行分层,提高了代码间的可读性。此外也会集中管理一个页面内的公共方法,便于测试用例的编写,从而提高测试用例的可读性。
- 提高代码复用性
在PO模型里,页面对象和测试用例之间也是相互分离的,这提高了代码的复用性,使得我们集中管理元素对象,便于应对元素的变化而减少代码重复。
3、PO模型的优化——数据驱动
在使用PO模型前,我们的数据都是在代码内被固定写死的,这使得代码的可维护性很差。数据驱动测试框架则可以帮助我们更好地优化PO模型,那数据驱动又是什么呢?
数据驱动其实就是一种通过改变数据从而驱动自动化测试执行,最终引起测试结果改变的一种驱动模型。装载数据的方式有多种,可以是列表、字典或者是外部文件,无论以何种方式装载数据,它们的目的只有一个——实现数据和脚本间的分离。
实施数据驱动的步骤主要分为以下几点:
①编写测试脚本,脚本需要支持从程序对象、文件或者数据库读入测试数据
②将测试脚本使用的测试数据存入程序对象、文件或者数据库等外部介质中
③运行脚本过程中,循环调用存储在外部介质中的测试数据
④验证所有的测试结果是否符合预期结果
举个简单的例子,还是最常见的登录操作。在测试时,除了测试登陆成功的场景,我们往往也需要测到各种登录异常的场景。
如果数据与脚本不分离,那么我们就要编写6条自动化测试脚本。然而这些脚本的操作都是一样的,只是输入的数据不一样罢了。这时候,数据分离就起到了很大作用。我们完全可以把数据存储在一个程序对象、文件或者是数据库等外部介质中,通过循环读取其中的数据从而实现一条脚本执行多条数据。这样的操作,不仅能使得逻辑清晰,还使得代码更加清晰整洁,方便后期维护。
总结
以上便是对PO模型从概念、优势、优化等方面进行的一些简要阐述,具体的应用当然是要根据业务场景来进行发挥。PO模型是一种被自动化测试领域所最为公认的设计模式之一,实现方法也较简单,但能让你的自动化测试变得更加优雅。