web自动化04-PO模式前期铺垫-V1-V3

web自动化04-PO模式前期铺垫-V1-V3PO模式学习思路采用版本迭代的方式来学习,便于对不同版本的优缺点进行对比和理解。V1:不使用任何设计模式和单元测试框架V2:使用UnitTest管理用例V3:使用方法封装的思想,对代码进行优化V4:采用PO模式的分层思想对代码进行拆分V5:对PO分层之后的代码继续优化V6:PO模式深入

大家好,欢迎来到IT知识分享网。

PO模式学习思路
采用版本迭代的方式来学习,便于对不同版本的优缺点进行对比和理解。
  • V1:不使用任何设计模式和单元测试框架
  • V2:使用UnitTest管理用例
  • V3:使用方法封装的思想,对代码进行优化
  • V4:采用PO模式的分层思想对代码进行拆分
  • V5:对PO分层之后的代码继续优化
  • V6:PO模式深入封装,把共同操作提取封装到父类中,子类直接调用父类的方法
无模式
1. 案例说明
对TPshop项目的登录模块进行自动化测试。
提示:登录模块包含了很多测试用例,比如:账号不存在、密码错误、验证码错误、登录成功等等。
为了节省时间我们只选取几个有代表性的用例来演示。
1.1 选择的测试用例
  • 账号不存在
1. 点击首页的‘登录’链接,进入登录页面
2. 输入一个不存在的用户名
3. 输入密码
4. 输入验证码
5. 点击登录按钮
6. 获取错误提示信息
  • 密码错误
1. 点击首页的‘登录’链接,进入登录页面
2. 输入用户名
3. 输入一个错误的密码
4. 输入验证码
5. 点击登录按钮
6. 获取错误提示信息
2. V1版本
不使用任何设计模式和单元测试框架。
每个文件里编写一个用例,完全的面向过程的编程方式。
2.1 存在的问题
一条测试用例对应一个文件,用例较多时不方便管理维护
代码高度冗余
2.2 示例代码
登录功能-账号不存在
web自动化04-PO模式前期铺垫-V1-V3
web自动化04-PO模式前期铺垫-V1-V3

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

View Code

 

登录功能-密码错误
web自动化04-PO模式前期铺垫-V1-V3
web自动化04-PO模式前期铺垫-V1-V3

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

View Code

 

3. V2版本
使用UnitTest管理用例,并断言用例的执行结果
3.1 引入UnitTest的好处
方便组织、管理多个测试用例
提供了丰富的断言方法
方便生成测试报告
减少了代码冗余
3.2 存在的问题
代码冗余 
3.3 示例代码 
web自动化04-PO模式前期铺垫-V1-V3
web自动化04-PO模式前期铺垫-V1-V3

 1 import unittest
 2 from selenium import webdriver
 3 class TestLogin(unittest.TestCase):
 4 """
 5 对登录模块的功能进行测试
 6 """
 7 @classmethod
 8 def setUpClass(cls):
 9 cls.driver = webdriver.Firefox()
10 cls.driver.maximize_window()
11 cls.driver.implicitly_wait(10)
12 cls.driver.get("http://localhost")
13 @classmethod
14 def tearDownClass(cls):
15 cls.driver.quit()
16 def setUp(self):
17 # 打开首页
18 self.driver.get("http://localhost")
19 # 点击首页的‘登录’链接,进入登录页面
20 self.driver.find_element_by_link_text("登录").click()
21 # 账号不存在
22 def test_login_username_is_error(self):
23 # 输入用户名
24 self.driver.find_element_by_id("username").send_keys("13099999999")
25 # 输入密码
26 self.driver.find_element_by_id("password").send_keys("123456")
27 # 输入验证码
28 self.driver.find_element_by_id("verify_code").send_keys("8888")
29 # 点击‘登录’
30 self.driver.find_element_by_name("sbtbutton").click()
31 # 断言提示信息
32 msg = self.driver.find_element_by_class_name("layui-layer-content").text
33 print("msg=", msg)
34 self.assertIn("账号不存在", msg)
35 # 密码错误
36 def test_login_password_is_error(self):
37 # 输入用户名
38 self.driver.find_element_by_id("username").send_keys("13012345678")
39 # 输入密码
40 self.driver.find_element_by_id("password").send_keys("error")
41 # 输入验证码
42 self.driver.find_element_by_id("verify_code").send_keys("8888")
43 # 点击‘登录’
44 self.driver.find_element_by_name("sbtbutton").click()
45 # 断言提示信息
46 msg = self.driver.find_element_by_class_name("layui-layer-content").text
47 print("msg=", msg)
48 self.assertIn("密码错误", msg)

View Code

 


 

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

1. 方法封装
方法封装:是将一些有共性的或多次被使用的代码提取到一个方法中,供其他地方调用。
封装的好处:
避免代码冗余
容易维护
隐藏代码实现的细节
目的:用最少的代码实现最多的功能
2. V3版本
使用方法封装的思想,对代码进行优化。
定义获取驱动对象的工具类
封装“获取弹出框的提示消息”
2.1 定义获取驱动对象的工具类
对登录流程的代码进行优化,定义获取驱动对象的工具类 
web自动化04-PO模式前期铺垫-V1-V3
web自动化04-PO模式前期铺垫-V1-V3

 1 # utils.py
 2 class DriverUtil:
 3 """
 4 浏览器驱动工具类
 5 """
 6 _driver = None
 7 @classmethod
 8 def get_driver(cls):
 9 """
10 获取浏览器驱动对象,并完成初始化设置
11 :return: 浏览器驱动对象
12 """
13 if cls._driver is None:
14 cls._driver = webdriver.Firefox()
15 cls._driver.maximize_window()
16 cls._driver.implicitly_wait(10)
17 cls._driver.get("http://localhost")
18 return cls._driver
19 @classmethod
20 def quit_driver(cls):
21 """
22 关闭浏览器驱动
23 """
24 if cls._driver:
25 cls._driver.quit()
26 cls._driver = None

View Code

 

2.2 封装“获取弹出框的提示消息”
对登录流程的代码进行优化,封装‘获取弹出框的提示消息’的方法
web自动化04-PO模式前期铺垫-V1-V3
web自动化04-PO模式前期铺垫-V1-V3

1 # utils.py
2 def get_tips_msg():
3 """
4 获取弹出框的提示消息
5 :return: 消息文本内容
6 """
7 msg = DriverUtil.get_driver().find_element_by_class_name("layui-layer-content").tex
8 t
9 return msg

View Code

 

 
 
 
 
 
 
 
 
 
 
 
 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/34418.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信