python单元测试框架unittest

在python编程语言中,常用的测试框架有unittest、pytest。unittest是python内置库,无需安装,它只能适用于面向对象的编程方式,不适应函数式编程。

unittest组成:测试固件、测试用例、测试套件、测试执行、测试报告

1、测试固件:在用例执行之前进行初始化数据或者执行之后清理数据操作。

import unittest
from selenium import webdriver

class UI(unittest.TestCase):
    def setUp(self): #每个用例前执行
        self.driver = webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.get('http://www.baidu.com/')

    def tearDown(self): #每个用例执行完毕后执行
        self.driver.quit()

另外一种是每个测试集执行前和后才执行,只执行一次

import unittest
from selenium import webdriver

class UI(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.driver = webdriver.Chrome()
        cls.driver.maximize_window()
        cls.driver.get('http://www.baidu.com/')

    @classmethod
    def tearDownClass(cls):
        cls.driver.quit()

 

2、测试用例,测试类要继承unittest.TestCase,测试用例命名要求以test开头,建议test_开头

import unittest
from selenium import webdriver

class UI(unittest.TestCase):
    # @classmethod
    # def setUpClass(cls):
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.get('http://www.baidu.com/')
    # @classmethod
    # def tearDownClass(cls):
    def tearDown(self):
        self.driver.quit()

    def test_baidu_title(self):
        '''测试百度标题'''
        self.assertEqual(self.driver.title,'百度一下,你就知道')

    def test_baidu_news(self):
        '''测试百度新闻网址'''
        self.driver.find_element_by_link_text('新闻').click()
        self.assertEqual(self.driver.current_url,'http://news.baidu.com/')

    def test_baidu_dt(self):
        '''测试百度贴吧地址'''
        self.driver.find_element_by_link_text('贴吧').click()
        self.assertEqual(self.driver.current_url,'https://tieba.baidu.com/index.html')

3、测试套件:测试用例的集合,unittest中主要通过TestSuite类提供对测试套件的支持。

添加到测试套件中的用例有多种方式

1)、按测试用例添加执行

import unittest
from selenium import webdriver

class UI(unittest.TestCase):
    def setUp(self): #每个用例前执行
        self.driver = webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.get('http://www.baidu.com/')

    def tearDown(self): #每个用例执行完毕后执行
        self.driver.quit()

    def test_baidu_title(self):
        '''测试百度标题'''
        self.assertEqual(self.driver.title,'百度一下,你就知道')

    def test_baidu_news(self):
        '''测试百度新闻网址'''
        self.driver.find_element_by_link_text('新闻').click()
        self.assertEqual(self.driver.current_url,'http://news.baidu.com/')

    def test_baidu_dt(self):
        '''测试百度贴吧地址'''
        self.driver.find_element_by_link_text('贴吧').click()
        self.assertEqual(self.driver.current_url,'https://tieba.baidu.com/index.html')

class api(unittest.TestCase):
    def test_001(self):
        pass

    def test_002(self):
        pass

if __name__ == '__main__':
    '''按测试用例执行'''
    suite = unittest.TestSuite()
    suite.addTest(UI('test_baidu_title'))
    print(suite)
    unittest.TextTestRunner(verbosity=2).run(suite)

2)、按测试类添加执行

    '''按测试类执行'''
    suite = unittest.TestLoader().loadTestsFromTestCase(api)
    # suite.loadTestsFromTestCase(api)
    unittest.TextTestRunner(verbosity=2).run(suite)

3)、按测试模块添加执行

    '''按测试模块执行'''
    suite = unittest.TestLoader().loadTestsFromModule('test_xunit.py')
    # suite.loadTestsFromTestCase(api)
    unittest.TextTestRunner(verbosity=2).run(suite)

4、用例测试执行

在unittest中,测试点的执行顺序是依据ascill码来执行的,数字与字母的顺序为: 0-9, A-Z, a-z,所以以A开头的测试用例会优先以a开头用例执行

5、测试报告

 

posted @ 2020-03-08 22:35  和而同  阅读(283)  评论(0编辑  收藏  举报