• Python unittest使用小结


    unittest是Python自带的单元测试框架,其中最核心的四个概念是:test case, test suite, test runner, test fixture.
    流程:TestLoader加载写好的TestCase到TestSuite,由TextTestRunner来运行,并将结果保存在TextTestResult中.通过命令行或unittest.main()执行时,main会调用TextTestRunner中的run来执行
    testCase就是一个测试用例,即完整的测试流程,包含测试前环境搭建setUp,执行测试run,断言,测试后环境恢复tearDown.
    testSuite多个testCase集合在一起.
    testLoader加载testCase到testSuite中,用loadTestsFrom__()方法寻找TestCase,创建实例并添加到TestSuite中返回TestSuite实例.
    TextTestRunner用来执行测试用例,其中的run(test)会执行TestSuite/TestCase中的run(result)方法,测试结果保存在TextTestResult中(运行多少,成功多少,失败多少)
    test fixture对一个测试用用例环境的搭建和恢复,主要是setUp()和tearDown()

    unittest要求单元测试类必须继承 unittest.TestCase,该类中可重写setUp(),tearDown(),setUpClass(),tearDownClasee()四个方法,其他的测试方法需要满足如下要求:
    测试方法没有返回值。
    测试方法没有任何参数。
    测试方法应以test开头

    通过命令行python -m unittest TestMyFunc.py执行或调用unittest.main执行:
    if name == 'main':
    unittest.main()

    在unittest中用例默认执行顺序是根据用例名称升序执行而非用例定义的先后顺序执行.自定义执行顺序:
    if name == 'main':
    tests = [TestMyFunc("test_is_prime"), TestMyFunc("test_add"), TestMyFunc("test_divide")]
    suite = unittest.TestSuite()
    suite.addTest(tests)
    runner = unittest.TextTestRunner()
    runner.run(suite)

    setUp()和tearDown()是每个test_开头的方法都会在用例执行前和结束后调用一次.setUpClass(cls)和tearDownClass(cls)则是在TestMyFunc.py中执行所有test_开头的方法时才调用.需要用@classmethod
    def setUp(self):
    print('每个用例执行前调用一次')

    @classmethod
    def setUpClass(cls):
    print('所有用例执行前调用一次)

    跳过用例使用skip装饰器,即unittest.skip(reason)无条件跳过,unittest.skipIf(condition,reason)condition为True跳过,unittest.skipUnless(condition,reason)condition为False跳过
    @unittest.skipUnless(sys.platform.startwith('linux'), "requires Linux")
    def test_divide(self):
    ...

    myfunc.py
    def is_prime(num):
    if num < 0 or num in (0, 1) or num % 2 == 0:
    return False
    for ele in range(3, num, 2):
    if num % ele == 0:
    return False
    return True

    def add(a, b):
    return a + b

    def divide(a, b):
    return a / b

    TestMyFunc.py
    import unittest
    import PythonScripts.myfunc as my

    class TestMyFunc(unittest.TestCase):
    """This is my first testcase, test myfunc.py"""

    @classmethod
    def setUpClass(cls):
        print("每个测试用例执行前会调用setUp()进行环境准备
    ")
    
    @classmethod
    def tearDownClass(cls):
        print("每个测试用例执行后会调用tearDown()来进行恢复
    ")
    
    def test_is_prime(self):
        """test the function is_prime()"""
        self.assertTrue(my.is_prime(3))
        self.assertFalse(my.is_prime(10))
        self.assertFalse(my.is_prime(101))
        self.assertFalse(my.is_prime(-2))
    
    def test_add(self):
        """test the function add"""
        self.assertEqual(10, my.add(4, 6))
        self.assertNotEqual(8, my.add(3, 4))
    
    def test_divide(self):
        """test the function divide"""
        self.assertEqual(2, my.divide(6, 3))
        self.assertNotEqual(3, my.divide(9, -3))
    
    if __name__ == "__main__":
        unittest.main(verbosity=2)
  • 相关阅读:
    SQLServer 事物与索引
    SQLServer 常见SQL笔试题之语句操作题详解
    测试思想-测试设计 测试用例设计之边界值分析方法
    测试思想-测试设计 测试用例设计之等价类划分方法
    测试思想-测试设计 测试用例设计之因果图方法
    测试思想-测试设计 测试用例设计之判定表驱动分析方法
    MySql 缓存查询原理与缓存监控 和 索引监控
    测试思想-测试设计 授客细说场景测试用例设计与实践
    产品相关 细说软件产品和业务 & 业务过程(流程) & 业务逻辑
    Postman Postman接口测试工具使用简介
  • 原文地址:https://www.cnblogs.com/AiYS/p/10708415.html
Copyright © 2020-2023  润新知