【selenium学习中级篇 -24】Unittest框架 - setUp与setUpClass的区别
文章太长不看版:
setUp(): 每个测试case运行之前运行
tearDown(): 每个测试case运行完之后执行
setUpClass(): 必须使用 @classmethod装饰器, 所有case运行之前只运行一次
tearDownClass(): 必须使用 @classmethod装饰器, 所有case运行完之后只运行一次
详情版:
前面我们创建了一个测试用例,但真正的项目中,不可能只有一个测试用例,也不太可能只有一个测试页面,所以为了后续演示方便,我们新增加两条用例和一个测试页面test_baidu_01.py
test_baidu.py
from Base import * from PageObjects import * from Flow import * import unittest import time class TestBaiDuSearch(unittest.TestCase): def test_baidu(self): browser = BrowserEngine() # 实例化browser类 self.driver = browser.open_browser() self.baidu_flow = BaiduFlow(self.driver) # 实例化流程类,要传入driver self.baidu_flow.open_baidu() # 打开页面 result = self.baidu_flow.baidu_know_search("selenium") # 获取测试结果 time.sleep(3) # 对比实际结果和预期结果 self.assertEqual(result, "http://zhidao.baidu.com/question/147041701.html?fr=iks&word=selenium&ie=gbk") ''' 点击好123按钮,并判断打开的页面URL是否正确 ''' def test_baidu_hao123(self): browser = BrowserEngine() # 实例化browser类 self.driver = browser.open_browser() self.baidu_flow = BaiduFlow(self.driver) # 实例化流程类,要传入driver self.baidu_flow.open_baidu() # 打开页面 self.baidu_flow.click_baidu_hao123() self.baidu_flow.switch_handle() hao_url = self.baidu_flow.get_page_url() self.assertEqual(hao_url,"https://www.hao123.com/")
test_baidu_01.py
from Base import * from Flow import * import unittest class TestBaiDuButton(unittest.TestCase): ''' 点击“更多”按钮,并判断打开的页面URL是否正确 ''' def test_baidu_more(self): browser = BrowserEngine() # 实例化browser类 self.driver = browser.open_browser() self.baidu_flow = BaiduFlow(self.driver) # 实例化流程类,要传入driver self.baidu_flow.open_baidu() # 打开页面 self.baidu_flow.click_baidu_more() self.baidu_flow.switch_handle() more_url = self.baidu_flow.get_page_url() self.assertEqual(more_url,"https://www.baidu.com/more/")
其中需要补充的基础函数自行补充了
这里面我们可以发现,在每个测试用例的方法中,都有去实例化driver,都有去实例化页面等,就略先复杂。所以,我们引入Unittest测试框架里面的setUp与setUpClass来做一些用例之前的初始化工作
以 test_baidu.py为例
from Base import * from PageObjects import * from Flow import * import unittest import time class TestBaiDuSearch(unittest.TestCase):
# setUp(): 每个测试case运行之前运行 # tearDown(): 每个测试case运行完之后执行 # setUpClass(): 必须使用 @ classmethod装饰器, 所有case运行之前只运行一次 # tearDownClass(): 必须使用 @ classmethod装饰器, 所有case运行完之后只运行一次
# 测试运行前的初始化 @classmethod def setUpClass(cls): browser = BrowserEngine() cls.driver = browser.open_browser() cls.baidu_flow = BaiduFlow(cls.driver)
# 测试运行完后退出浏览器 @classmethod def tearDownClass(cls): cls.driver.quit() def test_baidu(self): self.baidu_flow.open_baidu() result = self.baidu_flow.baidu_know_search("selenium") # 获取测试结果 time.sleep(3) # 对比实际结果和预期结果 self.assertEqual(result, "http://zhidao.baidu.com/question/147041701.html?fr=iks&word=selenium&ie=gbk") ''' 点击好123按钮,并判断打开的页面URL是否正确 ''' def test_baidu_hao123(self): self.baidu_flow.open_baidu() self.baidu_flow.click_baidu_hao123() self.baidu_flow.switch_handle() hao_url = self.baidu_flow.get_page_url() self.assertEqual(hao_url,"https://www.hao123.com/")
使用 setUp与setUpClass,tearDown和tearDownClass来完成用例运行前的初始化工作,比如driver的初始化,页面的实例化等,以及最后的浏览器退出等
本例中使用setUpClass,tearDownClass,则分别会在所有case运行前后各执行一遍。
setUp(): 每个测试case运行之前运行
tearDown(): 每个测试case运行完之后执行
setUpClass(): 必须使用 @ classmethod装饰器, 所有case运行之前只运行一次
tearDownClass(): 必须使用 @ classmethod装饰器, 所有case运行完之后只运行一次
我走的很慢,但从不后退