unittest快速使用方法

  1. 基本使用

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)   
'''
  1. 通过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)

  1. 通过defaultTestLoader.discover加载case
if __name__ == "__main__":
    suites = unittest.defaultTestLoader.discover('../testcase', 'test_*.py')
    runner= unittest.TextTestRunner()
    runner.run(suites)

  1. 通过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)

  1. 通过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)

  1. 直接添加测试类到测试套件中
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)

  1. 直接加载一个模块到测试套件中,如果这个模块中有多个类,则会把所有的类的测试案例加载到测试套件中
    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)


  1. 输出日志的控制
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. 忽略执行案例
#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))


  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()

参考:
https://www.cnblogs.com/bainianminguo/p/11616526.html

  1. 待加入


原文地址:https://www.cnblogs.com/amize/p/13251619.html