IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> Client-Page Object,对PO模式的一个扩展 -> 正文阅读

[开发测试]Client-Page Object,对PO模式的一个扩展

Client-Page Object,对PO模式的一个扩展

Page Object模式

熟悉UI自动化测试的同学们应该都听过并使用过大名鼎鼎的Page Object模式吧,就是将页面上的元素定位信息和页面操作逻辑与测试用例层分开,一般根据元素定位与页面操作逻辑是否分开分成两到三层,即测试用例层—操作逻辑层—元素对象层,或测试用例层—页面对象层。以playwright测试百度页面为例:

# baidu_page.py
class BasePage(object):
    def __init__(self, page):
        self.page = page

class BaiduPageLocator(BasePage):
    @property
    def search_input(self):
        return self.page.query_selector("input[name=\"wd\"]")

    @property
    def search_button(self):
        return self.page.query_selector("text=百度一下")

class BaiduPage(BaiduPageLocator):
    def search(self, text):
        self.search_input.fill(text)
        self.search_button.click()
# test_case.py
import pytest
from playwright.sync_api import sync_playwright 
from baidu_page import BaiduPage

@pytest.fixture
def page():
    playwright = sync_playwright().start()
    browser = playwright.chromium.launch(headless=False)
    page_ = browser.new_page()
    page_.goto("https://www.baidu.com/")
    yield page_
    page_.close()
    browser.close()
    playwright.stop()

class TestBaidu(object):
    def test_baidu(self, page):
        baidu_page = BaiduPage(page)
        baidu_page.search('playwright')

以上为在不考虑页面元素封装,基于pytest的一种实现方式,优点是可以更方便的进行代码复用,减少重复代码,以及当界面元素定位发生变化时,可以集中在同一个地方修改即可。

使用中的问题

开始,我在项目中也是像上述方式进行使用,但是不久就发现了一个问题,首先页面驱动需要自行管理(如playwright中的page对象和selenium中的driver对象),在用例中还要做初始化页面类实例这种与业务无关的操作,如果用例涉及多个页面和多个用户,编写用例时就会有较大的心智负担,无论是写还是读都不是很友好。基于以上,我就尝试在传统的Page Object模式中又加入一层client层,专门处理页面驱动部分,并且对于多角色的系统,可以将不同角色分为不同的client,相当于对角色的一层抽象,暂且将他称为Client-Page Object模式。

Client-Page Object模式

示例代码如下:

# client.py
from playwright.sync_api import sync_playwright
from baidu_page import BaiduPage

class Client(object):
    playwright = None
    browser = None

    def __init__(self, url):
        self.url = url
        self.page = page

    def register_page(self):
        self.baidu_page = BaiduPage(self.page)

    def start(self):
        if Client.playwright is None:
            Client.playwright = sync_playwright().start()
        if Client.browser is None:
            Client.browser = playwright.chromium.launch(headless=False)
        self.page = Client.browser.new_page()
        self.register_page()

    def close(self):
        self.page.close()

    @staticmethod
    def close_all():
        if Client.browser is not None:
            Client.browser.close()
            Client.browser = None
        if Client.playwright is not None:
            Client.playwright.stop()
            Client.playwright = None
# test_case.py
import pytest
from client import Client

@pytest.fixture
def user():
    user_ = Client('http://www.baidu.com')
    yield user_
    user_.close()

class TestBaidu:
    def test_baidu(self, user):
        user.baidu_page.search('playwright')

如上所示,所有驱动相关内容由client来管理,就可以在编写测试用例时不需要管理驱动,也不需要创建页面对象,只需要关注测试业务即可,而且如果需要在同一个用例中用到两个不同的角色进行操作时,也是非常简单的,如下:

class TestSome:
    def test_Some_business(self, normal_user, admin_user):
        # normal_user 进行一些操作
				# admin_user 进行另一些操作

而这两个用户只需定义两个Client类,注册不同页面即可。

此次分享到此结束,各位如有更好的方法欢迎告诉我,谢谢。

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-08-10 13:44:36  更:2021-08-10 13:45:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 20:47:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码