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

相关文章

使用Python实现Word文档的自动化对比方案

《使用Python实现Word文档的自动化对比方案》我们经常需要比较两个Word文档的版本差异,无论是合同修订、论文修改还是代码文档更新,人工比对不仅效率低下,还容易遗漏关键改动,下面通过一个实际案例... 目录引言一、使用python-docx库解析文档结构二、使用difflib进行差异比对三、高级对比方

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

Python自动化处理PDF文档的操作完整指南

《Python自动化处理PDF文档的操作完整指南》在办公自动化中,PDF文档处理是一项常见需求,本文将介绍如何使用Python实现PDF文档的自动化处理,感兴趣的小伙伴可以跟随小编一起学习一下... 目录使用pymupdf读写PDF文件基本概念安装pymupdf提取文本内容提取图像添加水印使用pdfplum

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

SpringBoot通过main方法启动web项目实践

《SpringBoot通过main方法启动web项目实践》SpringBoot通过SpringApplication.run()启动Web项目,自动推断应用类型,加载初始化器与监听器,配置Spring... 目录1. 启动入口:SpringApplication.run()2. SpringApplicat

Python使用python-pptx自动化操作和生成PPT

《Python使用python-pptx自动化操作和生成PPT》这篇文章主要为大家详细介绍了如何使用python-pptx库实现PPT自动化,并提供实用的代码示例和应用场景,感兴趣的小伙伴可以跟随小编... 目录使用python-pptx操作PPT文档安装python-pptx基础概念创建新的PPT文档查看

C#和Unity中的中介者模式使用方式

《C#和Unity中的中介者模式使用方式》中介者模式通过中介者封装对象交互,降低耦合度,集中控制逻辑,适用于复杂系统组件交互场景,C#中可用事件、委托或MediatR实现,提升可维护性与灵活性... 目录C#中的中介者模式详解一、中介者模式的基本概念1. 定义2. 组成要素3. 模式结构二、中介者模式的特点

基于Python编写自动化邮件发送程序(进阶版)

《基于Python编写自动化邮件发送程序(进阶版)》在数字化时代,自动化邮件发送功能已成为企业和个人提升工作效率的重要工具,本文将使用Python编写一个简单的自动化邮件发送程序,希望对大家有所帮助... 目录理解SMTP协议基础配置开发环境构建邮件发送函数核心逻辑实现完整发送流程添加附件支持功能实现htm

Python调用LibreOffice处理自动化文档的完整指南

《Python调用LibreOffice处理自动化文档的完整指南》在数字化转型的浪潮中,文档处理自动化已成为提升效率的关键,LibreOffice作为开源办公软件的佼佼者,其命令行功能结合Python... 目录引言一、环境搭建:三步构建自动化基石1. 安装LibreOffice与python2. 验证安装