本文主要是介绍Web自动化-PO模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目标
- 深入理解方法封装的思想
- 能够使用方法封装的思想对代码进行优化
- 深入理解PO模式的思想
- 熟练掌握PO模式的分层思想 PO模式学习思路 采用版本迭代的方式来学习,便于对不同版本的优缺点进行对比和理解。
- V1:不使用任何设计模式和单元测试框架
- V2:使用UnitTest管理用例
- V3:使用方法封装的思想,对代码进行优化
- V4:采用PO模式的分层思想对代码进行拆分
- V5:对PO分层之后的代码继续优化
- V6:PO模式深入封装,把共同操作提取封装到父类中,子类直接调用父类的方法
一、无模式
目标
1. 熟悉web自动化测试代码编写的基本流程
2. 掌握如何使用UnitTest管理测试脚本
1、案例说明
对TPshop项目的登录模块进行自动化测试。
提示:登录模块包含了很多测试用例,比如:账号不存在、密码错误、验证码错误、登录成 功等等。 为了节省时间我们只选取几个有代表性的用例来演示。
1.1 选择的测试用例
账号不存在
- 点击首页的‘登录’链接,进入登录页面
- 输入一个不存在的用户名
- 输入密码
- 输入验证码
- 点击登录按钮
- 获取错误提示信息
密码错误
- 点击首页的‘登录’链接,进入登录页面
- 输入用户名
- 输入一个错误的密码
- 输入验证码
- 点击登录按钮
- 获取错误提示信息
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. 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模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!