• python3 --- unittest单元测试框架


    1、unittest结构

    1、单元测试的框架 unittestpython自带,无需额外安装)+接口
    2、文件,命名时,千万不要写成unittest这样的模块名,会报错的
    3、功能测试
      1)写用例 TestCase
      2)执行用例 :aTestSuit 存储用例 bTestLoader 找用例,加载用例,存到TestSuit里面
      3)对比实际结果、期望结果,判定用例是否通过;即断言 assert
      4)出具测试报告 TextTestRunner

    2、编写测试用例

      被测模块,math模块

    class Math(object):
        def __init__(self,a,b):
            self.a = a
            self.b = b
    
        def add(self):
            return self.a + self.b
    
        def div(self):
            return self.a - self.b

      测试用例

    import unittest
    from py_unittest.math import Math
    
    # 写一个测试类对自己写的math模块进行测试
    class TestMath(unittest.TestCase):
        '''
        编写测试用例:
        1、测试加法,1+2 = 3
        2、测试剪发:1-2 = -1
        '''
    
        def test_add(self):    #1、一个用例就是一个函数,不能传参,只有self关键字;2、所有的函数都是test_开头,否则不识别为一条测试用例
            result = Math(1,2).add()
            print('加法测试,结果是: ',result)
    
        def test_div(self):
            result1 = Math(1,2).div()
            print('减法测试,结果是: ',result1)
    
    if __name__ == '__main__':
        unittest.main()  #按照ASCII码的排序方式,执行所有的测试用例(即类里面的函数)
    
    控制台输出:
    加法测试,结果是:  3
    减法测试,结果是:  -1
    
    
    Ran 2 tests in 0.003s  #执行了2条测试用例
    
    OK

    3、执行测试用例

      从2的执行结果可知,unittest.main()为执行所有测试用例,且执行顺序为ASCII码表的顺序,接下来介绍其他执行方式

    import unittest
    from py_unittest.case import TestMath #case为写测试用例的python文件,TestMath即上面(2)写的测试用例的类
    
    
    suit = unittest.TestSuite()  #存储用例,用例的容器
    # #方法一
    # suit.addTest(TestMath('test_add'))   #通过往suit里添加测试用例,先添加的测试用例,先执行
    # suit.addTest(TestMath('test_div'))
    
    #方法二
    loadder = unittest.TestLoader() #创建一个加载器,loader去帮你寻找用例,寻找到用例后,全部加载到suit里面
    #a:类名
    suit.addTest(loadder.loadTestsFromTestCase(TestMath)) #这个方法加载的是类,如果一个模块有多个类,只想加载一个类,可以用它!
    
    #b:模块名
    from py_unittest import case #将写用例的python文件,即模块引入
    suit.addTest(loadder.loadTestsFromModule(case)) #此处加载的是模块名,如果一个模块有多个类,想把该模块的类都加载进来,可以用它!
    
    runner = unittest.TextTestRunner() #执行
    runner.run(suit)
    
    控制台输出结果为:
    ....
    ----------------------------------------------------------------------
    Ran 4 tests in 0.000s  #执行了4个测试用例
    
    OK
    加法测试,结果是:  3
    减法测试,结果是:  -1
    加法测试,结果是:  3
    减法测试,结果是:  -1

    4、断言

    import unittest
    from py_unittest.math import Math
    
    class TestMath(unittest.TestCase):
        def test_add(self):    
            print('加法测试,结果是: ',result)
            self.assertEqual(4,result,'加法错误')  #第一个参数是期望值,第二个参数是实际值,第三个参数是报错时的提示信息
    
        def test_div(self):
            result1 = Math(1,2).div()
            print('减法测试,结果是: ',result1)
    import unittest
    from py_unittest.case import TestMath
    
    suit = unittest.TestSuite()  
    suit.addTest(TestMath('test_add'))   
    suit.addTest(TestMath('test_div'))
    
    runner = unittest.TextTestRunner() #执行
    runner.run(suit)
    
    控制台输出:
    F.    #F表示失败,.表示执行成功
    ======================================================================
    FAIL: test_add (py_unittest.case.TestMath)
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File "D:scriptkechengpy_unittestcase.py", line 24, in test_add
        self.assertEqual(4,result,'加法错误')  #第一个参数是期望值,第二个参数是实际值,第三个参数是报错时的提示信息
    AssertionError: 4 != 3 : 加法错误  #“加法错误” 为报错的提示信息
    
    ----------------------------------------------------------------------
    Ran 2 tests in 0.001s
    加法测试,结果是:  3
    
    FAILED (failures=1)
    减法测试,结果是:  -1

    5、测试报告

      参考博客:https://www.cnblogs.com/gaoyuanyuan/p/9842057.html,将下载的HTMLTestRunnerNew.py文件,放到python的lib文件夹下

      调用方式如下:

    import unittest
    from py_unittest.case import TestMath
    from HTMLTestRunnerNew import HTMLTestRunner
    import time
    
    suit = unittest.TestSuite()  
    suit.addTest(TestMath('test_add'))  
    suit.addTest(TestMath('test_div'))
    
    now = time.strftime('%Y-%m%d %H%M%S')
    filename = 'F:/ ' + now + 'result.html'
    with open(filename,'wb') as file: #上下文管理器,执行完冒号后的代码段,文件自动关闭。不需要file.close()操作
        # runner = unittest.TextTestRunner(stream=file, descriptions=True, verbosity=2) #这部分为unittest自带的,verbosity=2 ,从0~2,运行结果越来越详细
        # runner.run(suit)
        runner = HTMLTestRunner(stream=file, title='测试报告', description='单元测试报告:', tester='正在学习的测试人员')
        runner.run(suit)

    6、生成报告截图

    7、

     8、写的比较好的文章

      https://www.cnblogs.com/yufeihlf/p/5707929.html#test2

  • 相关阅读:
    win7下面安装VC6的SP5补丁
    共享一下, 国家授时中心服务器的IP地址
    修改默认调试器
    在做系统分析时,用到的几种对象之间的关系
    About SetClientSite in ActiveX
    我常用的Windbg命令
    字符编码笔记:ASCII,Unicode和UTF8(转) + BASE64
    Google Earth
    4.用条件属性而不是#if
    1.尽可能的使用属性,而不是数据成员
  • 原文地址:https://www.cnblogs.com/hzgq/p/11928132.html
Copyright © 2020-2023  润新知