zoukankan      html  css  js  c++  java
  • Python+unittest框架

    1.unittest简介

    unittest库包括:TestCase、TestSuite、TestLoder、TextRunner、TextTestResult、TestFixture

    TestCase是测试的最小单元模块。它检查对特定输入集合的特定响应。unittest提供给一个基类Testcase,可以使用这个类创建一个新测试testTestCase 。

    TestSuite是测试集,测试集是测试用例、测试集或者二者的一个集合。它被用于把测试整合在一起,批量运行测试。

    TestLoder是用来加载 TestCase到TestSuite中,其中有几个loadTestsFrom_()方法,就是从各个地方寻找TestCase,创建他们的实例,然后add到TestSuite中,再返回一个TestSuite实例

    TextRunner是运行测试器, 测试运行器是协调测试执行并向用户提供结果的组件。运行器可以使用图形界面、文本界面、或返回特定值来指示执行测试的结果。

    TextTestResult测试结果会保存到TextTestResult实例中,包括运行了多少用例,成功与失败多少等信息

    TestFixture表示执行一个或者多个测试前的准备工作,确保每个测试之间的独立性。这可能涉及到创建临时或者代理数据库、目录、服务器情动进程等相关准备工作

    2.unittest的使用

    # 步骤1、引入单元测试库
    import unittest
    
    # 步骤2:定义测试类,继承TestCase类。
    class MyTestClass(unittest.TestCase):
    
        # 在测试类当中,所有用例运行之前,执行的前置工作。不管有几个用例,且只运行一次。
        # 有3个用例,在第一个用例运行之前,运行一次。
        @classmethod
        def setUpClass(cls):
            print("====我是测试类级别的前置工作===整个测试类,只运行1次!在用例执行之前!====")
    
        # 在测试类当中,所有用例运行之后,执行的后置工作。不管有几个用例,且只运行一次。
        @classmethod
        def tearDownClass(cls):
            print("====我是测试类级别的后置工作===整个测试类,只运行1次!在所有用例执行完成之后!====")
    
        # 每一条用例运行之前,前置工作
        def setUp(self):
            print("=====开始运行  一条用例======")
    
        # 每一条用例运行之后,后置工作
        def tearDown(self):
            print("=====一条用例  运行结束======")
    
        # 其中函数名称以test_开头的,是一个测试用例。
        def test_upper(self):
            print("***************************")
            # 1、测试数据
            my_str = "iDo"
            # 2、步骤
            res = my_str.upper()
            # 3、断言 == 期望结果与实际结果比对。
            self.assertEqual(res, "IDO", " 不是大写")  # 如果期望与实际不符,那么AssertionError
    
        def test_upper_is_true(self):
            print("***************************")
            # 1、测试数据
            my_str = "iDo"
            # 2、步骤
            res = my_str.isupper()
            # 期望:True  实际的:res
            self.assertTrue(res)
    
        def test_who_bigger(self):
            print("***************************")
            # 1、测试数据
            a, b = 100, 244
            # 期望:小于
            self.assertLess(a, b)

    3.断言种类

    方法 检查 版本 注释
    assertEqual(a, b) a ==b  

    断言第一个参数和第二个参数是否相等(==相等)、(!=不相等)

    assertNotEqual(a, b) a !=b  
    assertTrue(x) bool(x) is True   测试表达式是true(或false)

    assertFalse(x) Bool(x) is False  
    assertIs(a, b) a is b 3.1 断言第一个参数和第二个参数是否为同一个对象
    assertIsNot(a, b) a is not b 3.1
    assertIsNone(x) x is None 3.1 断言表达式是否为None对象
    assertIsNotNone(x) x is not None 3.1
    assertIn(a, b) a in b 3.1 判断第一个参数是否在第二个参数中,反过来讲,第二个参数是否包含第一个参数
    assertNotIn(a, b) a not in b 3.1
    assertIsInstance(a, b) isinstance(a,b) 3.1 判断a与b的数据类型是否相等
    assertNotIsInstance(a, b) not isinstance(a,b) 3.1
    assertAlmostEqual(a,b, places=None)     判断a是否约等于b。 palces: 指定精确到小数点后多少位,默认为7
    assertNotAlmostEqual(self, first, second, places=None)    
    assertDictEqual(a,b)
     dict==dict
      判断字典a和字典b是否相等
    assertCountEqual(a,b)  list==list   判断a,b两个列表元素相同
    assertMultiLineEqual(a,b)  text==text   判断a,b的文本一致
    assertLess(a,b) a<b   判断a<b
    assertLessEqual(a,b) a<=b   判断a<=b
    assertGreater(a,b) a>b   判断a>b
    assertGreaterEqual(a,b) a>=b   判断a>=b

    4.测试套件的使用

    import unittest
    from common.HTMLTestRunnerNew import HTMLTestRunner  #生成html测试报告  HtmlTestRunner()
    from common import dir_config    # 测试用例集的目录
    
    
    # TestSuite实例化
    s = unittest.TestSuite()    # 套件实例化
    t = unittest.TestLoader()   # 收集器实例化
    
    # 将收集到的用例,放到测试套件当中。
    s.addTests(t.discover(dir_config.test_cases_file))
    
    # 打开一个html文件
    fs = open(dir_config.html_file, "wb")
    # 实例化html结果的用例运行器
    runner = HTMLTestRunner(fs,title="前程贷测试报告",description="前程贷接口测试!!",tester="administrator")
    
    # 运行测试套件
    runner.run(s)
  • 相关阅读:
    ASP.NET Core 中间件 中间件(Middleware)和过滤器(Filter)的区别
    ASP.NET Core 中间件详解及项目实战
    开源项目1:某大学校友管理系统
    web安全浅析
    p2p网贷平台设计简析
    一些常见的并且比较难解决的设计问题
    CentOS 新增swap交换空间
    策略模式
    Centos6.4 本地yum源配置
    Linux(CentOs6.4)安装Git
  • 原文地址:https://www.cnblogs.com/renshengruxi/p/12917694.html
Copyright © 2011-2022 走看看