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、测试报告