Day23:POM设计模式(封装)

一、Pom模式+关键字驱动模式

po模式 : page object model 页面对象模式。

1、pom模式的好处:

解决:线性脚本的问题

解决:代码不能重复利用的问题

解决:后期的维护问题。

栗子:看过他们的仓库?日用品放一起,电器放一起,文具放一起。......分类。

2、POM模式分三层:

1.基础层:base 主要放selenium原生的方法。

2.页面对象层:po 主要用于放页面的元素和页面的动作。

3.测试用例层:testcase 存放测试用例以及测试数据。

(重点)页面对象层调用基础层的方法,测试用例层调用页面对象层。

3、unittest 的前后置处理(夹具)

setUp 在测试用例之前的准备工作

tearDown 在测试用例之后的扫尾工作

setUp(self):每个测试用例执行之前自动执行,做准备工作

常用:打开浏览器、访问网址、登录系统

tearDown(self):每个测试用例执行之后自动执行,做收尾工作

常用:关闭浏览器、清理测试数据

记住:

二、分装步骤

1、先建3层

2、base层:封装 selenium 原生方法(点击、输入、查找元素、等待等)

复制代码
from selenium import webdriver

class BasePage:
    def __init__(self):
        global driver
        # 打开浏览器
        self.driver = webdriver.Chrome()
        # 加载网页
        self.driver.get("http://localhost/ecshop/admin/privilege.php?act=logout")


    # 定位元素的关键字
    def locator_element(self, loc):
        # 接收定位元组,*loc解包,查找并返回页面元素
        return self.driver.find_element(*loc)

    # 设置值的关键字
    def send_keys(self, loc, value):
        # 调用元素定位方法,找到输入框,输入内容value
        self.locator_element(loc).send_keys(value)

3、page层:每个页面单独一个类,存放页面元素 定位和页面动作

复制代码
from selenium.webdriver.common.by import By
from base.base_page import BasePage

class LoginPage(BasePage):
    #页面的元素
    username_loc = (By.NAME,"username")
    password_loc = (By.NAME,"password")
    submit_loc = (By.XPATH,"//input[@value='进入管理中心']")

    #页面的动作
    def login_ecshop(self,username,password):
        #定位用户名输入框
        self.send_keys(LoginPage.username_loc,username)
        #定位密码输入框
        self.send_keys(LoginPage.password_loc,password)
        #定位登录按钮
        self.click(LoginPage.submit_loc)

4、testcase层:testcase 调用Page层,存放测试用例以及测试数据。

复制代码
import unittest
from page.login_page import LoginPage

class TestCase(unittest.TestCase):
    def test_01_login(self):
        """
        登录
        :return:
        """
        # 实例化登录页面对象(po层的LoginPage继承了base层的basePage,同时也会继承他的方法,所以这里实例化对象相当于执行了init函数)
        lp = LoginPage()
        # 调用登录业务方法,执行ecshop登录
        lp.login_ecshop()

其余看pycharm的testapi项目理解

三、断言

1、unittest 断言:

用于判断预期结果和实际结果是否相符,如果断言失败,用例直接标记失败。

复制代码
self.assertEqual()     # 判断两个值是否相等
self.assertTrue()      # 判断一个值是否为True
self.assertIn()        # 判断一个值是否包含在另一个值里面

四、完善达到在企业里面能够实际落地的web自动化测试框架

编程语言:python、java
设计模式:**POM(页面对象模型)**、关键字驱动模式
用例管理:unittest、pytest
数据驱动:ddt、@pytest.mark.parametrize ()
二次封装:excel 封装,ini/yaml 配置文件封装,数据库封装
日志监控:logger 日志收集
异常处理:try except
jenkins:持续集成、无人值守
Docker:镜像容器技术
分布式运行:Selenium Grid

相关推荐
十年Java程序媛1 小时前
Java String、StringBuilder、StringBuffer 底层原理|字符串拼接性能与线程安全
java·开发语言·spring boot·安全·面试
Cx330❀1 小时前
Qt 界面美化指南:从零掌握 QSS 核心机制与工程实践
开发语言·qt·ui·性能优化·图形渲染
可乐ea1 小时前
2000 个智能体把 Agent 重写成 Rust:编排流水线拆解
开发语言·后端·rust·多智能体协作·ai编程助手·智能体编排·rust重写
SamDeepThinking1 小时前
CyclicBarrier的底层实现
java·后端·面试
我是人✓1 小时前
SpringMVC异常处理与拦截器实战揭秘
java·开发语言·后端
不是万能的豆学长1 小时前
排查Go服务40天后的内存泄漏问题
开发语言·后端·golang·go
阿狗童鞋1 小时前
SpringSecurity权限认证实战指南
java·后端·spring
码匠许师傅1 小时前
【C++三方组件】libpqxx:PostgreSQL 的 C++ 客户端
开发语言·c++·postgresql
Wang's Blog1 小时前
Java 项目部署之 Docker工具快速入门: 学习路径与命令速查导引
java·学习·docker