selenium中的setUp,tearDown与setUpClass,tearDownClass的区别及用例编写相关注意点

# -*- coding:utf-8 -*-
'''
Created on 2018年2月7日

@author: yfk
'''
import unittest
from selenium import webdriver
from public.logger import Logger

mylogger = Logger(logger='PageTest1').getlog()
class PageTest1(unittest.TestCase):

    def setUp(self):
        driver = webdriver.Firefox()
        mylogger.info("打开Firefox")
        driver.maximize_window()
        mylogger.info("最大化窗口")
        driver.implicitly_wait(10)
        mylogger.info("智能等待")
        driver.get("http://www.baidu.com")
        mylogger.info("打开百度首页")
        self.driver = driver
        
    def tearDown(self):
        self.driver.quit()
        mylogger.info("退出浏览器")

    def test_01(self):
        self.driver.find_element_by_id("kw").send_keys("test")
        mylogger.info("输入框输入test")
        self.driver.find_element_by_id("su")
        mylogger.info("按搜索按钮")
        
    def test_03(self):
        self.driver.find_element_by_id("kw").send_keys("good")
        mylogger.info("输入框输入good")
        self.driver.find_element_by_id("su")
        mylogger.info("按搜索按钮")
        
    def test_02(self):
        self.driver.find_element_by_id("kw").send_keys("monkey")
        mylogger.info("输入框输入monkey")
        self.driver.find_element_by_id("su")
        mylogger.info("按搜索按钮")
        
    def test_05(self):
        self.driver.find_element_by_id("kw").send_keys("china")
        mylogger.info("输入框输入china")
        self.driver.find_element_by_id("su")
        mylogger.info("按搜索按钮")
        
    def test_04(self):
        self.driver.find_element_by_id("kw").send_keys("english")
        mylogger.info("输入框输入english")
        self.driver.find_element_by_id("su")
        mylogger.info("按搜索按钮")


先放case代码,logger模块是自己写的关于记录日志的。

setUp,tearDown:是对每一个用例(test开头的函数)的初始化和用例执行完成后的清理工作,一般用来关闭浏览器;在多个用例中,如果某个用例的元素定位或者其他出错,会阻止用例的继续运行。

setUpClass,tearDownClass:是在执行用例之前初始化一遍,所有的用例执行完后再进行清理工作,并且在setUpClass和tearDownClass的上面添加@classmethod装饰器,如果某个用例的元素定位或者其他出错,不影响整个用例的执行工作;这样也许会更好一些,不用每次都去重新打开浏览器,节省测试时间,但要注意的是不要忽略了用例直接的相互影响,所以用这种模式要考虑到用例之前的耦合,尽可能不要让前个用例的测试环境影响后一个用例的执行。

因为引入了logger机制,所以我在pycharm上运行的时候,如果用例出错终台是无法看到错误结果的,需要去报告中查看,我想要我的日志中也能记录到错误信息。这时候,使用try...except...抛异常并捕获,最后加上raise(不加raise用例失败时不能识别到)。

以下代码:

# -*- coding:utf-8 -*-
'''
Created on 2018年2月7日

@author: yfk
'''
import unittest
from selenium import webdriver
from public.logger import Logger

mylogger = Logger(logger='PageTest1').getlog()
class PageTest1(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        driver = webdriver.Firefox()
        mylogger.info("打开Firefox")
        driver.maximize_window()
        mylogger.info("最大化窗口")
        driver.implicitly_wait(10)
        mylogger.info("智能等待")
        driver.get("http://www.baidu.com")
        mylogger.info("打开百度首页")
        cls.driver = driver

    @classmethod
    def tearDownClass(cls):
        cls.driver.quit()
        mylogger.info("退出浏览器")

    def test_01(self):
        try:
            self.driver.find_element_by_id("kw").send_keys("test")
            mylogger.info("输入框输入test")
            self.driver.find_element_by_id("1su")#此处定位故意写错
            mylogger.info("按搜索按钮")
        except Exception as e:
            mylogger.info(e)
            #raise

    def test_03(self):
        try:
            self.driver.find_element_by_id("kw").send_keys("good")
            mylogger.info("输入框输入good")
            self.driver.find_element_by_id("su")
            mylogger.info("按搜索按钮")
        except Exception as e:
            mylogger.info(e)
            raise

    def test_02(self):
        try:
            self.driver.find_element_by_id("kw").send_keys("monkey")
            mylogger.info("输入框输入monkey")
            self.driver.find_element_by_id("su")
            mylogger.info("按搜索按钮")
        except Exception as e:
            mylogger.info(e)
            raise

    def test_05(self):
        try:
            self.driver.find_element_by_id("kw").send_keys("china")
            mylogger.info("输入框输入china")
            self.driver.find_element_by_id("su")
            mylogger.info("按搜索按钮")
        except Exception as e:
            mylogger.info(e)
            raise

    def test_04(self):
        try:
            self.driver.find_element_by_id("kw").send_keys("english")
            mylogger.info("输入框输入english")
            self.driver.find_element_by_id("su")
            mylogger.info("按搜索按钮")
        except Exception as e:
            mylogger.info(e)
            raise

if __name__ == '__main__':
    unittest.main()


运行后的测试报告:

selenium中的setUp,tearDown与setUpClass,tearDownClass的区别及用例编写相关注意点_第1张图片

日志记录:

selenium中的setUp,tearDown与setUpClass,tearDownClass的区别及用例编写相关注意点_第2张图片

你可能感兴趣的:(selenium)