您的当前位置:首页正文

web自动化测试-第十一讲:web自动化测试脚本优化--PO模式

2024-12-01 来源:个人技术集锦

什么是PO模式

1、PO模型是:Page Object Model的简写,页面对象模型,是一种设计模式
2、作用:就是把测试测试逻辑和页面的业务流操作进行分离,即把页面封装成类,供测试脚本进行调用;分层机制,让不同层去做不同类型的事情,让代码结构清晰,增加复用性。

看懂这个图,也就明白PO模式是什么,作用

 你的测试用例中,需要在系统哪个页面操作哪个业务流,就调用哪个页面的业务流就可以了,我们如何把PO模式用到我们web自动化测试中?直接上代码:

 conftest.py:

"""
时间:2021/8/5-22:05
文件:conftest.py.py
姓名:瓜牛强强
QQ:1689785398@qq.com
"""
import pytest

from selenium import webdriver


@pytest.fixture()
def driver():
    """打开浏览器和关闭浏览器"""
    # 地址
    url = "https://v4.ketangpai.com/User/login.html"
    driver = webdriver.Chrome()
    # 最大化,隐性等待
    driver.maximize_window()
    # 隐性等待
    driver.implicitly_wait(10)
    

    # 访问被测网址
    driver.get(url)
    print("以上步骤为前置条件")
    yield driver
    print("以下步骤为后置条件")
    # 关闭浏览器
    driver.quit()

test_login.py:

"""
时间:2021/8/5-22:12
文件:test_login.py
姓名:瓜牛强强
QQ:1689785398@qq.com
"""
"""
登录的测试用例
使用的是pytest 框架
"""
import pytest

from page.login_page import LoginPage

class TestLogin:

    def test_login_username_error(self, driver):
        """测试登录功能--第1条测试用例--用户名、密码错误:
        步骤:
        1、访问登录界面
        2、输入用户名和密码,回车
        3、断言: 预期结果和实际结果比对
        """
        # 测试数据统一管理
        username = '1111111111'
        password = '1234'
        expected = '密码有效长度是6到30个字符'

        # 调用登录页面的登录业务流
        LoginPage(driver).login(username,password)

        # 断言:在页面当中找到错误信息的元素,获取文本与实际结果对比。
        error_ele = driver.find_element('xpath', '//p[@class="error-tips"]')
        actual = error_ele.text
        assert actual == expected

    def test_login_password_None(self, driver):
        """测试登录功能--第2条测试用例--密码为空:
        步骤:
        1、访问登录界面
        2、输入用户名和密码,回车
        3、断言: 预期结果和实际结果比对
        """
        # 测试数据统一管理
        username = '1111111111'
        password = ' '
        expected = '密码不能为空'

        # 调用登录页面的登录业务流
        LoginPage(driver).login(username,password)

        # 断言:在页面当中找到错误信息的元素,获取文本与实际结果对比。
        error_ele = driver.find_element('xpath', '//p[@class="error-tips"]')
        actual = error_ele.text
        assert actual == expected

if __name__ == '__main__':
    pytest.main()

login_page.py:

"""
时间:2021/8/21-15:34
文件:login_page.py
姓名:瓜牛强强
QQ:1689785398@qq.com
"""
import time

from selenium.webdriver.common.keys import Keys

class LoginPage:

    def __init__(self, driver):
        self.driver = driver

    def login(self, username, password):
        """登录"""
        # 定位用户名元素,输入用户名
        username_el = self.driver.find_element('xpath', '//input[@name="account"]')
        username_el.send_keys(username)
        # 定位密码元素,输入密码
        # 直接回车提交
        password_el = self.driver.find_element('xpath', '//input[@name="pass"]')
        password_el.send_keys(password)
        # 回车提交
        password_el.send_keys(Keys.ENTER)
        time.sleep(5)

To be continue,点个关注,持续更新。。。

显示全文