自动化测试-设计模式(封装)
pom模式+关键字驱动模式
(1) 数据驱动测试:即英文单词Data-Driven Testing,简称DDT。
(2) 关键字驱动测试:即英文单词Keyword-Driven Testing,简称KDT。
(3) 业务流程测试:即英文单词Business Process Tesing,简称BPT。
(4) 页面对象模式:即英文单词Page Object Model,简称POM。
pom模式:page object model 页面对象模式(UI自动化测试一种流行的设计模式)
好处:
-
-
解决代码不能重复利用的问题
-
后期的维护问题
分层:
-
基础层(base):主要放selenium原生的方法
-
页面对象层(po):主要放页面的元素和页面的动作
-
测试用例层(testcase):主要放测试用例以及测试数据
po模式分层:
对象库层:封装定位元素的方法
操作层:封装对元素的操作
业务层:将一个或多个操作组合起来完成一个业务功能,比如登录、需要输入账号、密码、点击登录三个操作
eg:
base:base_page,基类,定义项目所需的基础方法,对Selenium一些常用的api进行二次封装,如:find_element、click、send_keys、screenshot、调用JavaScript脚本的方法以及其他与浏览器相关的操作
为什么要有基类?
由于每个页面都会频繁使用这些方法,若单纯使用Selenium原始api,可能遇到一些问题,例如:某个按钮未加载完成,但已触发了点击事件,导致元素定位不到而报错。这时就可以对原始api进行二次封装,如:加入等待时间、对异常进行捕获并打印日志等,之后所有的PageObject都继承BasePage类,后续只需要调用这些封装好的方法,增强复用性 假设以后不使用Selenium这个框架,就只需要修改BasePage中的方法,不用去修改具体的测试用例业务代码 pages:page_object,页面对象层,也是PO的核心层,继承BasePage,管理页面元素以及操作元素的方法(将操作元素的动作写成方法)
cases:测试用例层,用于管理测试用例,这里会用到单元测试框架,如:Pytest、Unittest。
data:测试数据层,用于测试数据的管理,数据与脚本分离,降低维护成本,提高可移植性,如:yml 文件数据
config:配置文件层,存放整个项目需要用到的配置项,如:URL、数据库信息等
utils:CommonUtil,公共模块,将一些公共函数、方法以及通用操作进行封装,如:日志模块、yaml 操作模块、时间模块等
run.py:批量执行测试用例的主程序,根据不同需求不同场景进行组装,遵循框架的灵活性和扩展性
logs:日志模块,用于记录和管理日志,针对不同情况,设置不同的日志级别,方便定位问题
reports:测试报告层,用于测试报告的生成和管理,如:基于 Allure 生成的定制化报告