python unittest 快速使用方法
- 基本使用
import unittest
class Test(unittest.TestCase): 
    
    @classmethod
    def setUpClass(cls):
        print("这是类方法前置条件")
    @classmethod
    def tearDownClass(cls):
        print("这是类方法后置条件")
    def setUp(self):
        self.number=input('Enter a number:')
        self.number=int(self.number)
    def test_case1(self):
        print self.number
        self.assertEqual(self.number,10,msg='Your input is not 10')
        
    def test_case2(self):
        print self.number
        self.assertEqual(self.number,20,msg='Your input is not 20')
    @unittest.skip('跳过用例3')
    def test_case3(self):
        print self.number
        self.assertEqual(self.number,30,msg='Your input is not 30')
    def tearDown(self):
        print 'Test over'
        
'''
1:
'''
if __name__=='__main__':
    unittest.main()
'''
2:
    suite=unittest.TestSuite()
    suite.addTest(Test('test_case2'))
    suite.addTest(Test('test_case1'))
    runner=unittest.TextTestRunner()
    runner.run(suite) 
'''
'''
3:
    test_dir = './'
    discover = unittest.defaultTestLoader.discover(test_dir, pattern='test_*.py')
    runner=unittest.TextTestRunner()
    runner.run(discover)   
'''
- 通过suite.addTest加载case
import unittest
from test_case import test_baidu
from test_case import test_youdao
if __name__=='__main__':
    suite = unittest.TestSuite()
    suite.addTest(test_baidu.BaiduTest('test_baidu'))
    suite.addTest(test_youdao.YoudaoTest('test_youdao'))
    runner = unittest.TextTestRunner()
    runner.run(suite)
#或者
if __name__=='__main__':
    suite = unittest.TestSuite()
    tests = [Test3("test_add"), Test3("test_minus"), Test3("test_multi"), Test3("test_divide")]
    tests2 = [Test32("test_add"), Test32("test_minus"), Test32("test_multi"), Test32("test_divide")]
    suite.addTests(tests)
    suite.addTests(tests2)
    runner = unittest.TextTestRunner()
    runner.run(suite)
- 通过defaultTestLoader.discover加载case
if __name__ == "__main__":
    suites = unittest.defaultTestLoader.discover('../testcase', 'test_*.py')
    runner= unittest.TextTestRunner()
    runner.run(suites)
- 通过TextTestRunner执行case
if __name__ == "__main__":
    now = time.strftime("%Y-%m-%d %H_%M_%S") 
    test_reports_address = '../report'    
    filename = '../report/' + now + 'report.html'  
    fp = open(filename, 'wb')
    suites = unittest.defaultTestLoader.discover('../testcase', 'test_*.py')
    runner= unittest.TextTestRunner()
    runner.run(suites)
- 通过HTMLTestRunner执行case
if __name__ == "__main__":
    now = time.strftime("%Y-%m-%d %H_%M_%S") 
    test_reports_address = '../report'    
    filename = '../report/' + now + 'report.html'  
    fp = open(filename, 'wb')
    suites = unittest.defaultTestLoader.discover('../testcase', 'test_*.py')
    runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u'title')
    runner.run(suites)
- 直接添加测试类到测试套件中
from unittest import TestLoader
from test1 import myunittest
if __name__ == '__main__':
    suite = unittest.TestSuite()
    loader = TestLoader()
    test_cases1 = unittest.TestLoader().loadTestsFromTestCase(myunittest)
    # 参数是一个类,而这个类必须是unittest.TestCase的子类或者孙类
    suite.addTests(test_cases1)
    runner = unittest.TextTestRunner(verbosity=2)
    runner.run(suite)
- 直接加载一个模块到测试套件中,如果这个模块中有多个类,则会把所有的类的测试案例加载到测试套件中
    from unittest import TestLoader
    loader = TestLoader()
    #导入方式1
    import run2
    cases1 = unittest.TestLoader().loadTestsFromModule(run2)
    #导入方式2
    # cases1 = unittest.TestLoader().loadTestsFromModule(__import__('run2'))
    suite = unittest.TestSuite()
    suite.addTest(cases1)
    runner = HTMLTestRunner.HTMLTestRunner(stream=fp)
    runner.run(suite)
- 输出日志的控制
if __name__ == '__main__':
  
    suite = unittest.TestSuite()
    tests = [Test3("test_add"), Test3("test_minus"), Test3("test_multi"), Test3("test_divide")]
    suite.addTests(tests)
    # 输出信息到txt文件中
    with open('UnittestTextReport.txt', 'a') as  f:
        runner = unittest.TextTestRunner(stream=f, verbosity=2)
        runner.run(suite)
- 忽略执行案例
#1、无条件跳过该案例,用该装饰器修饰要执行的案例,则该案例会被忽略不执行
    @unittest.skip("do not exec")
    # 无条件跳过执行该案例
    def test_add(self):
        self.assertEqual(3,func.add(1,2))
#2、满足某个条件才跳过该案例
@unittest.skipIf(4 > 3,"2 > 3 do not exec")
    # 满足某个条件才跳过执行
    def test_minus(self):
        self.assertEqual(4,func.minus(5,1))
- 断言
        self.assertEqual(3,func.add(1,2))
        # 判断是否相等
        
        self.assertNotEqual()
        # 判断是否不等于
        
        self.assertTrue()
        # 判断布尔值是否为True
        
        self.assertFalse()
        # 判断布尔值是否为False
        
        self.assertIs()
        # 判断类型是否相同
        
        self.assertIsNot()
        # 判断类型是否不同
        
        self.assertIsNone()
        # 判断是否为None
        
        self.assertIsNotNone()
        # 判断是否不为None
        
        self.assertIn()
        # 判断在某个范围内
        
        self.assertNotIn()
        # 判断是否不在某个范围内
        
        self.assertIsInstance()
        # 判断是否为某个类的实例
        
        self.assertNotIsInstance()
subTest()的使用方法
https://blog.csdn.net/lvhdbb/article/details/98477324
参考:
https://www.cnblogs.com/bainianminguo/p/11616526.html
- 待加入
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号