unittest 详解

  内容总括ide

  一. 初始化测试

    1. setUp 与 tearDown
    2. setUpClass 与 tearDownClass
    3. unittest.main(verbosity=0/1/2)

  二. 执行顺序ui

    1. 按顺序执行 addTest
    2. 按测试类执行,应用场景为:在一堆类里只想执行其中的一个类
    3. 按测试模块执行,一个py文件表明一个模块,应用场景为:批量执行

  三. 断言spa

  1. assertEqual(a,b)
  2. assertNotEqual(a,b)
  3. assertTrue(x)
  4. assertFalse(x)
  5. assertIs(a,b)
  6. assertIsNot(a,b)
  7. assertIsNone(x)
  8. assertIsNotNone(x)
  9. assertIn(a,b)
  10. assertNotIn(a,b)

  四. 报告3d

  五. 其余code

    1. 分离初始化模块,即公共模块
    2. skip, skipIf
解析

1. setUp 与 tearDownblog

    • 有几个test,就执行几回setUp 与 tearDown,浪费资源
 

2. setUpClass 与 tearDownClassip

    • 推荐使用,只初始化一次固件,要加 @classmethod
    •   class BaiDuTest(unittest.TestCase):
      @classmethod
      def setUpClass(cls):
      print("start...")

      @classmethod
      def tearDownClass(self):
      print("end...")
         if __name__ == '__main__':   
         unittest.main(verbosity=1)
 

3. unittest.main(verbosity=0/1/2)utf-8

    • 默认为1,0与1 几乎无差异,展现测试总个数与全局结果
    • 2 为详情展现

 

4 .按顺序执行 addTest资源

 1 import unittest
 2 
 3 class BaiDuTest(unittest.TestCase):
 4     @classmethod
 5     def setUpClass(cls):
 6         print("start...")
 7 
 8     @classmethod
 9     def tearDownClass(self):
10         print("end...")
11     def test_baidu(self):
12         print("baidu...")
13     def test_souhu(self):
14         print("souhu...")
15 
16 if __name__ == '__main__':
17     suit = unittest.TestSuite()
18     suit.addTest(BaiDuTest.test_souhu)
19     suit.addTest(BaiDuTest.test_baidu)
20     unittest.TextTestRunner(verbosity=2).run(suit)
View Code

5. 按测试类执行

 1 import unittest
 2 
 3 class BaiDuTest(unittest.TestCase):
 4     @classmethod
 5     def setUpClass(cls):
 6         print("start...")
 7 
 8     @classmethod
 9     def tearDownClass(self):
10         print("end...")
11     def test_baidu(self):
12         print("baidu...")
13     def test_souhu(self):
14         print("souhu...")
15 
16 class BaiDuTest2(unittest.TestCase):
17     @classmethod
18     def setUpClass(cls):
19         print("start2...")
20 
21     @classmethod
22     def tearDownClass(self):
23         print("end2...")
24     def test_baidu(self):
25         print("baidu2...")
26 
27 if __name__ == '__main__':
28     suit = unittest.TestSuite(unittest.makeSuite(BaiDuTest2))
29     unittest.TextTestRunner(verbosity=2).run(suit)
30  
View Code
或者:
suit = unittest.TestLoader().loadTestsFromTestCase(BaiDuTest2)
unittest.TextTestRunner(verbosity=2).run(suit)

6. 按测试模块执行

 1 # -*- coding:utf-8 -*-
 2 import unittest
 3 import os
 4 
 5 class BaiDuTest(unittest.TestCase):
 6     def test_baidu(self):
 7         print("baidu...")
 8 
 9 if __name__ == '__main__':
10     # 定义测试集所在文件夹
11     path = os.path.dirname(__file__)  # 当前执行路径
12     print(path)
13     # discover = unittest.defaultTestLoader.discover(path,pattern='test*.py') # 支持正则
14     discover = unittest.defaultTestLoader.discover(path,pattern='ttst.py')
15     runner = unittest.TextTestRunner(verbosity=2).run(discover)
View Code

7. 分离初始化模块

 1 class InitTest(unittest.TestCase):
 2     @classmethod
 3     def setUpClass(cls):
 4         print("start...")
 5 
 6     @classmethod
 7     def tearDownClass(self):
 8         print("end...")
 9 
10 class BaiDuTest(InitTest):
11     def test_baidu(self):
12         print("baidu...")
View Code

8. skip, skipIf

 1 class BaiDuTest(InitTest):
 2     def test_baidu(self):
 3         print("baidu...")
 4 
 5     @unittest.skip("skip TestCase")
 6     def test_baidu2(self):
 7         print("baidu2...")
 8 
 9     @unittest.skipIf(1!=1,"skip TestCase")
10     def test_baidu3(self):
11         print("baidu3...")
12 
13 
14 
15 if __name__ == '__main__':
16     unittest.main(verbosity=2)
View Code

9. 断言

1  def test_baidu2(self):
2         self.assertEqual(1,'1')
3         self.assertTrue(0)
4         self.assertFalse(0)
5         self.assertIn('www','http://www.b')

 ⚠️ 第二行代码错了,就不会执行执行第3,4,5行代码

相关文章
相关标签/搜索