【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运行完之后只运行一次
posted @ 2020-05-29 14:48  RonyJay  阅读(1018)  评论(0编辑  收藏  举报