Web自动化-PO模式

2024-05-07 03:04
文章标签 模式 web 自动化 po

本文主要是介绍Web自动化-PO模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目标

  1. 深入理解方法封装的思想
  2. 能够使用方法封装的思想对代码进行优化
  3. 深入理解PO模式的思想
  4. 熟练掌握PO模式的分层思想 PO模式学习思路 采用版本迭代的方式来学习,便于对不同版本的优缺点进行对比和理解。
  • V1:不使用任何设计模式和单元测试框架
  • V2:使用UnitTest管理用例
  • V3:使用方法封装的思想,对代码进行优化
  • V4:采用PO模式的分层思想对代码进行拆分
  • V5:对PO分层之后的代码继续优化
  • V6:PO模式深入封装,把共同操作提取封装到父类中,子类直接调用父类的方法

一、无模式

目标

1. 熟悉web自动化测试代码编写的基本流程

2. 掌握如何使用UnitTest管理测试脚本

1、案例说明

对TPshop项目的登录模块进行自动化测试。

提示:登录模块包含了很多测试用例,比如:账号不存在、密码错误、验证码错误、登录成 功等等。 为了节省时间我们只选取几个有代表性的用例来演示。

1.1 选择的测试用例

账号不存在

  1.  点击首页的‘登录’链接,进入登录页面
  2.  输入一个不存在的用户名
  3.  输入密码
  4.  输入验证码
  5.  点击登录按钮
  6.   获取错误提示信息

密码错误

  1. 点击首页的‘登录’链接,进入登录页面
  2. 输入用户名
  3. 输入一个错误的密码
  4. 输入验证码
  5. 点击登录按钮
  6. 获取错误提示信息

2. V1版本

不使用任何设计模式和单元测试框架。 每个文件里编写一个用例,完全的面向过程的编程方式。

2.1 存在的问题

一条测试用例对应一个文件,用例较多时不方便管理维护 代码高度冗余

2.2 示例代码

登录功能-账号不存在

from selenium import webdriver
# 创建浏览器驱动对象,并完成初始化操作
driver = webdriver.Firefox()
driver.maximize_window()
driver.implicitly_wait(10)
driver.get("http://localhost")
"""
登录功能-账号不存在
"""
# 点击首页的‘登录’链接,进入登录页面
driver.find_element_by_link_text("登录").click()
# 输入用户名
driver.find_element_by_id("username").send_keys("13099999999")
# 输入密码
driver.find_element_by_id("password").send_keys("123456")
# 输入验证码
driver.find_element_by_id("verify_code").send_keys("8888")
# 点击‘登录’按钮
driver.find_element_by_name("sbtbutton").click()
# 获取提示信息
msg = driver.find_element_by_class_name("layui-layer-content").text
print("msg=", msg)
# 关闭驱动对象
driver.quit()

登录功能-密码错误

from selenium import webdriver
# 创建浏览器驱动对象,并完成初始化操作
driver = webdriver.Firefox()
driver.maximize_window()
driver.implicitly_wait(10)
driver.get("http://localhost")
"""
登录功能-密码错误
"""
# 点击首页的‘登录’链接,进入登录页面
driver.find_element_by_link_text("登录").click()
# 输入用户名
driver.find_element_by_id("username").send_keys("13012345678")
# 输入密码
driver.find_element_by_id("password").send_keys("error")
# 输入验证码
driver.find_element_by_id("verify_code").send_keys("8888")
# 点击‘登录’按钮
driver.find_element_by_name("sbtbutton").click()
# 获取提示信息
msg = driver.find_element_by_class_name("layui-layer-content").text
print("msg=", msg)
# 关闭驱动对象
driver.quit()

3. V2版本

使用UnitTest管理用例,并断言用例的执行结果

3.1 引入UnitTest的好处

  • 方便组织、管理多个测试用例
  • 提供了丰富的断言方法
  • 方便生成测试报告
  • 减少了代码冗余

3.2 存在的问题

  • 代码冗余

3.3 示例代码

import unittest
from selenium import webdriver
class TestLogin(unittest.TestCase):"""对登录模块的功能进行测试"""@classmethoddef setUpClass(cls):cls.driver = webdriver.Firefox()cls.driver.maximize_window()cls.driver.implicitly_wait(10)cls.driver.get("http://localhost")@classmethoddef tearDownClass(cls):cls.driver.quit()def setUp(self):# 打开首页self.driver.get("http://localhost")# 点击首页的‘登录’链接,进入登录页面self.driver.find_element_by_link_text("登录").click()# 账号不存在def test_login_username_is_error(self):# 输入用户名self.driver.find_element_by_id("username").send_keys("13099999999")# 输入密码self.driver.find_element_by_id("password").send_keys("123456")# 输入验证码self.driver.find_element_by_id("verify_code").send_keys("8888")# 点击‘登录’self.driver.find_element_by_name("sbtbutton").click()# 断言提示信息msg = self.driver.find_element_by_class_name("layui-layer-content").textprint("msg=", msg)self.assertIn("账号不存在", msg)# 密码错误def test_login_password_is_error(self):# 输入用户名self.driver.find_element_by_id("username").send_keys("13012345678")# 输入密码self.driver.find_element_by_id("password").send_keys("error")# 输入验证码self.driver.find_element_by_id("verify_code").send_keys("8888")# 点击‘登录’self.driver.find_element_by_name("sbtbutton").click()# 断言提示信息msg = self.driver.find_element_by_class_name("layui-layer-content").textprint("msg=", msg)self.assertIn("密码错误", msg)

二、方法封装

目标

  1. 深入理解方法封装的思想
  2. 能够使用方法封装的思想对代码进行优化

1. 方法封装

方法封装:是将一些有共性的或多次被使用的代码提取到一个方法中,供其他地方调用。

封装的好处:

  • 避免代码冗余
  • 容易维护
  • 隐藏代码实现的细节

目的:用最少的代码实现最多的功能

2. V3版本

使用方法封装的思想,对代码进行优化。

  • 定义获取驱动对象的工具类
  • 封装“获取弹出框的提示消息”

2.1 定义获取驱动对象的工具类

对登录流程的代码进行优化,定义获取驱动对象的工具类

# utils.py
class DriverUtil:"""浏览器驱动工具类"""_driver = None@classmethoddef get_driver(cls):"""获取浏览器驱动对象,并完成初始化设置:return: 浏览器驱动对象"""if cls._driver is None:cls._driver = webdriver.Firefox()cls._driver.maximize_window()cls._driver.implicitly_wait(10)cls._driver.get("http://localhost")return cls._driver@classmethoddef quit_driver(cls):"""关闭浏览器驱动"""if cls._driver:cls._driver.quit()cls._driver = None

2.2 封装“获取弹出框的提示消息”

对登录流程的代码进行优化,封装‘获取弹出框的提示消息’的方法

# utils.py
def get_tips_msg():"""获取弹出框的提示消息:return: 消息文本内容"""msg = DriverUtil.get_driver().find_element_by_class_name("layui-layer-content").tex
treturn msg

这篇关于Web自动化-PO模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/966142

相关文章

解决JavaWeb-file.isDirectory()遇到的坑问题

《解决JavaWeb-file.isDirectory()遇到的坑问题》JavaWeb开发中,使用`file.isDirectory()`判断路径是否为文件夹时,需要特别注意:该方法只能判断已存在的文... 目录Jahttp://www.chinasem.cnvaWeb-file.isDirectory()遇

JavaWeb-WebSocket浏览器服务器双向通信方式

《JavaWeb-WebSocket浏览器服务器双向通信方式》文章介绍了WebSocket协议的工作原理和应用场景,包括与HTTP的对比,接着,详细介绍了如何在Java中使用WebSocket,包括配... 目录一、概述二、入门2.1 POM依赖2.2 编写配置类2.3 编写WebSocket服务2.4 浏

Java实现状态模式的示例代码

《Java实现状态模式的示例代码》状态模式是一种行为型设计模式,允许对象根据其内部状态改变行为,本文主要介绍了Java实现状态模式的示例代码,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来... 目录一、简介1、定义2、状态模式的结构二、Java实现案例1、电灯开关状态案例2、番茄工作法状态案例

10个Python自动化办公的脚本分享

《10个Python自动化办公的脚本分享》在日常办公中,我们常常会被繁琐、重复的任务占据大量时间,本文为大家分享了10个实用的Python自动化办公案例及源码,希望对大家有所帮助... 目录1. 批量处理 Excel 文件2. 自动发送邮件3. 批量重命名文件4. 数据清洗5. 生成 PPT6. 自动化测试

10个Python Excel自动化脚本分享

《10个PythonExcel自动化脚本分享》在数据处理和分析的过程中,Excel文件是我们日常工作中常见的格式,本文将分享10个实用的Excel自动化脚本,希望可以帮助大家更轻松地掌握这些技能... 目录1. Excel单元格批量填充2. 设置行高与列宽3. 根据条件删除行4. 创建新的Excel工作表5

MySQL分表自动化创建的实现方案

《MySQL分表自动化创建的实现方案》在数据库应用场景中,随着数据量的不断增长,单表存储数据可能会面临性能瓶颈,例如查询、插入、更新等操作的效率会逐渐降低,分表是一种有效的优化策略,它将数据分散存储在... 目录一、项目目的二、实现过程(一)mysql 事件调度器结合存储过程方式1. 开启事件调度器2. 创

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去

Python Invoke自动化任务库的使用

《PythonInvoke自动化任务库的使用》Invoke是一个强大的Python库,用于编写自动化脚本,本文就来介绍一下PythonInvoke自动化任务库的使用,具有一定的参考价值,感兴趣的可以... 目录什么是 Invoke?如何安装 Invoke?Invoke 基础1. 运行测试2. 构建文档3.

使用IntelliJ IDEA创建简单的Java Web项目完整步骤

《使用IntelliJIDEA创建简单的JavaWeb项目完整步骤》:本文主要介绍如何使用IntelliJIDEA创建一个简单的JavaWeb项目,实现登录、注册和查看用户列表功能,使用Se... 目录前置准备项目功能实现步骤1. 创建项目2. 配置 Tomcat3. 项目文件结构4. 创建数据库和表5.

Windows自动化Python pyautogui RPA操作实现

《Windows自动化PythonpyautoguiRPA操作实现》本文详细介绍了使用Python的pyautogui库进行Windows自动化操作的实现方法,文中通过示例代码介绍的非常详细,对大... 目录依赖包睡眠:鼠标事件:杀死进程:获取所有窗口的名称:显示窗口:根据图片找元素:输入文字:打开应用:依