zoukankan      html  css  js  c++  java
  • python UnitTest

    UnitTest

    单元测试框架,使用时需要导入unitest,所有测试类需要继承unittest.TestCase

    import unittest
    
    class Test_A(unitest.TestCase):
        def test_01(self):
            print('test_01')
    		
    if __name__ == "__main__":
        unittest.main()
    

    命令行执行

    python -m unittest testFile.py
    

    TestFixture

    代表了执行一个或多个测试用例所需要的准备工作,以及所有相关的清除工作。比如创建临时的或者代理的数据库,文件夹或者启动服务器。

    import unittest
    
    class Test_A(unitest.TestCase):
        def setUp(self):
            print('setUp')
        def tearDown(self):
            print('tearDown')
        def test_01(self):
    		print('test_01')
    		
    if __name__ == "__main__":
        unittest.main()
    

    TestCase

    代表了一个单独的单元测试用例,会检查输入参数对应的反馈。unittest提供了一个基类TestCase用来创建测试用例。

    case必须已test开头

    import unittest
    
    class Test_A(unitest.TestCase):
        def test_01(self):
            print('test_01')
    		
    if __name__ == "__main__":
        unittest.main()
    

    使用unitest.skip装饰器族跳过test method或者test class

    @unittest.skip(reason)	# 无条件跳过测试,reason描述为什么跳过测试
    @unittest.skipif(conditition,reason)	# condititon为true时跳过测试: 这里完全可以应用条件去控制用例是否执行了,很灵活
    @unittest.skipunless(condition,reason)	# condition不是true时跳过测试
    

    基本断言方法

    assertEqual(arg1, arg2, msg=None)	# 验证arg1=arg2,不等则fail
    assertNotEqual(arg1, arg2, msg=None)	# 验证arg1 != arg2, 相等则fail
    assertTrue(expr, msg=None)	# 验证expr是true,如果为false,则fail
    assertFalse(expr,msg=None)	# 验证expr是false,如果为true,则fail
    assertIs(arg1, arg2, msg=None)	# 验证arg1、arg2是同一个对象,不是则fail
    assertIsNot(arg1, arg2, msg=None)	# 验证arg1、arg2不是同一个对象,是则fail
    assertIsNone(expr, msg=None)	# 验证expr是None,不是则fail
    assertIsNotNone(expr, msg=None)	# 验证expr不是None,是则fail
    assertIn(arg1, arg2, msg=None)	# 验证arg1是arg2的子串,不是则fail
    assertNotIn(arg1, arg2, msg=None)	# 验证arg1不是arg2的子串,是则fail
    assertIsInstance(obj, cls, msg=None)	# 验证obj是cls的实例,不是则fail
    assertNotIsInstance(obj, cls, msg=None)	# 验证obj不是cls的实例,是则fail
    

    TestSuite

    代表了测试用例及测试套件的集合,用来将测试用例聚合到一起去执行。

    加载器加载

    import unittest
    
    suite = unittest.TestSuite()
    loader = unittest.TestLoader()
    runner = unittest.TextTestRunner()
    
    suite.addTest(loader.loadTestsFromModule(模块名))
    runner.run(suite)
    
    ----------
    unittest.TestLoader().loadTestsFromMoudule(模块名)	# 用的最广
    unittest.TestLoader().loadTestsFromTestCase(类名)
    unittest.TestLoader().loadTestsFromName(方法名)
    unittest.TestLoader().loadTestsFromNames(方法名,复数形式)
    

    自动识别加载测试用例的方法:discover

    import unittest
    
    discover = unittest.defaultTestLoader.discover(start_dir, pattern='test*.py', top_level_dir=None) 
    runner = unittest.TextTestRunner()
    runner.run(discover)
    

    TestRunner

    import unittest
    run = unittest.TextTestRunner()
    run.run(suite)
    

    TestReport

    使用HTMLTestRunner生成测试报告,嫌不好看可以搜索美化版本

    import unittest
    import HTMLTestRunner
    import datetime
    
    if __name__ == '__main__':
        # 定义测试报告的名称(日期+report.html)
        now = datetime.datetime.now()
        format_time = now.strftime('%Y-%m-%d %H:%M:%S')
        report_name = format_time + ' ' + "Report.html"
        # 构造测试套件,使用discover也行
        suite = unittest.TestSuite()
        loader = unittest.TestLoader()
        suite.addTest(loader.loadTestsFromModule(模块名))
        # discover = unittest.defaultTestLoader.discover(start_dir, pattern='test*.py', top_level_dir=None) 
        # 使用discover递归目录时,需要目录为包__init__.py
        
        # 使用执行用例,生成报告
        with open(report_name,'wb') as f:
            runner = HTMLTestRunner.HTMLTestRunner(stream=f, title='自动化测试报告', description='详细测试用例结果', verbosity=0) 
            runner.run(suite)
            # runner.run(discover)
    
  • 相关阅读:
    图书-哲学-奥卡姆剃刀:《奥卡姆剃刀原理》
    汉语-词语-认知:认知能力
    汉语-词语-认知:认知水平
    汉语-词语:认知
    pg_dump
    pg_ctl
    pg_controldata
    pg_config
    paste
    passwd
  • 原文地址:https://www.cnblogs.com/lazy-sang/p/13657323.html
Copyright © 2011-2022 走看看