unittest 详解

  内容总括

  一. 初始化

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

  二. 执行顺序

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

  三. 断言

  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)

  四. 报告

  五. 其他

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

1. setUp 与 tearDown

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

2. setUpClass 与 tearDownClass

    • 推荐使用,只初始化一次固件,要加 @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)

    • 默认为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行代码

转载于:https://www.cnblogs.com/zhang-dan/p/11440899.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值