• unittest使用


    unittest:单元测试框架
    主要包含四部分:
    1、测试固件(test fixture):
    定义:包含执行测试前的准备setUP()、测试执行完后的清扫工作tearDown()
    注意:
    setUp()执行成功之后,不管test中有没有异常发生,tearDown()都会执行
    测试固件在每个test都会执行
    执行一次:使用setUpClass()和tearDownClass()可以的得到这样的效果,必须被装饰成classmethod

    2、测试用例(test case):
    定义:包含测试固件、具体测试代码函数,测试固件可以不要,但至少要有一个以小写test开头的函数
    实现:使用装饰器@unittest.skip可以跳过某个测试用例不执行

    3、测试套件(test suite):
    定义:
    很多测试用例的集合,通过测试套件来管理多个测试用例,会根据用例的加载顺序执行用例
    实现:
    1、第一种:
    使用TestSuite()初始化一个Suite实例 unittest.TestSuite()
    使用addTest()方法加载测试方法到测试套件中
    addTest()如果要在传入别的包下的测试方法: 包名.类名(测试方法函数)
    也可以使用addTests()方法
    suite.addTests((lesson('test_case1'),lesson('test_case2')))
    2、第二种:
    makeSuite()可以把一个类下面所有测试方法都加载到测试套件中
    suite = unittest.TestSuite(unittest.makeSuite(包名.类名))
    3、第三种:
    discover()方法可以把指定路径下所有测试方法都加载到测试套件中
    discover = unittest.defaultTestLoader.discover(test_dir, pattern='lesson*.py')
    4、测试执行器(test runner):
    定义:测试执行器用来执行加载测试用例,可以是一个测试用例,也可以是测试套件
    实现方法:
    1、上方实例中的直接使用unittest.main()去执行 ,
    会搜索所有以test开头的测试用例,按照ASCII的顺序执行多个用例
    2、使用TextTestRunner()方法初始化一个测试执行器,然后使用run()去执行测试套件
    runner = unittest.TextTestRunner()
    runner.run(suite) suite 指测试套件的实例

    例子:
      
    import unittest
    
    # 被测测试类
    class Student(object):
        def __init__(self, name, score):
            self.name = name
            self.score = score
        def get_grade(self):
            if self.score < 0 or self.score > 100:
                raise ValueError("传入分数错误,不在0-100之间")
            if self.score >= 80:
                return 'A'
            if self.score >= 60:
                return 'B'
            return 'C'
    
    class TestStudent(unittest.TestCase):
        # 测试方法
        def test_80_to_100(self):
            s1 = Student('Bart', 80)
            s2 = Student('Lisa', 100)
            self.assertEqual(s1.get_grade(), 'A')
            self.assertEqual(s2.get_grade(), 'A')
    
        def test_60_to_80(self):
            s1 = Student('Bart', 60)
            s2 = Student('Lisa', 79)
            self.assertEqual(s1.get_grade(), 'B')
            self.assertEqual(s2.get_grade(), 'B')
    
        def test_0_to_60(self):
            s1 = Student('Bart', 0)
            s2 = Student('Lisa', 59)
            self.assertEqual(s1.get_grade(), 'C')
            self.assertEqual(s2.get_grade(), 'C')
    
        def test_invalid(self):
            s1 = Student('Bart', -1)
            s2 = Student('Lisa', 101)
            # 判断抛出指定类型的Error
            with self.assertRaises(ValueError):
                s1.get_grade()
            with self.assertRaises(ValueError):
                s2.get_grade()
    
    if __name__ == '__main__':
        unittest.main()
    View Code
    
    
    



  • 相关阅读:
    好学习法
    error execution phase upload-config/kubelet: Error writing Crisocket information for the control-plane node: timed out waiting for the condition
    linux 大实话
    解决vi/vim中粘贴 格式错乱
    centos7 调试系统服务命令
    gitlab jenkins docker kubernetes
    修改centos7主机名
    野战ci/cd
    相互交流生成快捷网页链接
    设置centos7静态网卡配置文件
  • 原文地址:https://www.cnblogs.com/aiyumo/p/11764215.html
Copyright © 2020-2023  润新知