本帖最后由 我是楠楠 于 2019-9-19 14:22 编辑
【郑州校区】PO模式之无模式
目标1. 深入理解方法封装的思想 2. 能够使用方法封装的思想对代码进行优化 3. 深入理解PO模式的思想 4. 熟练掌握PO模式的分层思想 PO模式学习思路 采用版本迭代的方式来学习,便于对不同版本的优缺点进行对比和理解。V1:不使用任何设计模式和单元测试框架 V2: 使 用 UnitTest 管 理 用 例 V3:使用方法封装的思想,对代码进行优化 V4:采用PO模式的分层思想对代码进行拆分V5:对PO分层之后的代码继续优化 V6:PO模式深入封装,把共同操作提取封装到父类中,子类直接调用父类的方法 无模式 目标 1. 熟悉web自动化测试代码编写的基本流程 掌握如何使用UnitTest管理测试脚本 1. 案例说明 对TPshop项目的登录模块进行自动化测试。 提示:登录模块包含了很多测试用例,比如:账号不存在、密码错误、验证码错误、登录成功等等。 为了节省时间我们只选取几个有代表性的用例来演示。 1.1 选择的测试用例
账号不存在1. 点击首页的‘登录’链接,进入登录页面 2. 输入一个不存在的用户名 3. 输入密码 4. 输入验证码 5. 点击登录按钮 6. 获取错误提示信息密码错误 1. 点击首页的‘登录’链接,进入登录页面 2. 输入用户名 3. 输入一个错误的密码 4. 输入验证码 5. 点击登录按钮 6. 获取错误提示信息 2. V1版本 不使用任何设计模式和单元测试框架。每个文件里编写一个用例,完全的面向过程的编程方式。 2.1 存在的问题
一条测试用例对应一个文件,用例较多时不方便管理维护代码高度冗余
2.2 示例代码 登录功能-账号不存在 [AppleScript] 纯文本查看 复制代码 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()
登录功能-密码错误 [AppleScript] 纯文本查看 复制代码 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() 2. V2版本 使用UnitTest管理用例,并断言用例的执行结果
2.1 引入UnitTest的好处
方便组织、管理多个测试用例提供了丰富的断言方法方便生成测试报告减少了代码冗余
2.2 存在的问题
代码冗余 3.3示例代码 [AppleScript] 纯文本查看 复制代码 import unittest
from selenium import webdriver
class TestLogin(unittest.TestCase): """
对登录模块的功能进行测试
"""
@classmethod
def setUpClass(cls):
cls.driver = webdriver.Firefox() cls.driver.maximize_window() cls.driver.implicitly_wait(10) cls.driver.get("http://localhost")
@classmethod
def 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").text print("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").text print("msg=", msg)
self.assertIn("密码错误", msg) |