本文主要介绍PO模式的测试用例,PO模式优点及层级间的关系,相关配置及运行
minitest的测试小程序和测试case:minitest-demo
miniprogram-demo
:测试小程序testcase
:测试case,同时也包含文档的测试casetestcase-PO
:Page Object(PO) 模式的测试case
PO简介
PO模式是自动化测试项目开发实践的最佳设计模式之一。通过对界面元素的封装减少冗余代码,同时在后期维护中,若元素定位发生变化,只需要调整页面元素封装的代码,提高测试用例的可维护性、可读性。
优点:
- 减少代码冗余
- 业务和实现分离
- 降低维护成本
PO用例层级
- 基础层base,初始化、封装Minium的原生方法
- BaseCase:初始化Minium实例,继承MiniTest类
- BaseDef:封装Minium的页面跳转、元素定位等方法
- 操作层pages,页面对象层,各页面的元素定位,操作等
- BasePage:封装公用页面基础操作方法,继承BaseDef类
- HomePage:首页相关元素定位及相关操作等,继承BaseDef类
- 测试用例层,主要负责业务逻辑和数据驱动(继承BaseCase类,初始化BasePage、HomePage类)
- AppTest:测试hook用例
- ElementTest:测试操作不同组件用例
- LoginTest:测试登录授权用例
- NativeTest:测试处理原生控件用例
- PageTest:测试页面元素定位用例
BaseCase基类
测试用例基类,继承MiniTest类。复写minium.MiniTest类里面的setUpClass、tearDownClass、setUp、tearDown方法
class BaseCase(minium.MiniTest):
"""
初始化Minium实例,测试用例基类
"""
@classmethod
def setUpClass(cls):
super(BaseCase, cls).setUpClass()
@classmethod
def tearDownClass(cls):
super(BaseCase, cls).tearDownClass()
def setUp(self):
pass
def tearDown(self):
pass
BaseDef公用方法类
封装Minium的页面跳转、元素定位等方法
class BaseDef:
"""
封装Minium的页面跳转、元素定位等方法
"""
def __init__(self, mini):
"""
基类初始化 Minium 实例
"""
self.mini = mini
def navigate_to_page(self, route):
"""
跳转到指定页面
"""
self.mini.app.navigate_to(route)
ret = self.wait_page(route)
return ret
def redirect_to_page(self, route):
"""
跳转到指定页面并关闭当前页面
"""
self.mini.app.redirect_to(route)
ret = self.wait_page(route)
return ret
## ...
/pages 页面对象类
页面对象层,各页面的元素定位,操作等
BasePage基础页面对象类
封装公用页面基础操作方法,继承BaseDef类。例如hook wx API接口,点击元素,获取回调;hook 原生控件弹窗,点击元素,处理弹窗,获取回调等
class BasePage(base_def.BaseDef):
"""
封装公用页面基础操作方法
"""
def hook_wx_method(self, method, selector):
"""
封装hook wx API接口,获取回调
:param method: API接口
:param selector: 触发元素选择器
:return: 信号量,回调信息
"""
called = threading.Semaphore(0) # 信号量
callback_args = None
def callback(args):
nonlocal callback_args
called.release()
callback_args = args
# hook wx API接口,获取回调后执行callback
self.mini.app.hook_wx_method(method, callback=callback)