• python单元测试之unittest框架


    python单元测试之unittest框架

    一、什么是单元测试

    单元测试是用来对一个模块、一个函数或者一个类来进行正确性检验的测试工作。

    比如对于函数abs(),我们可以编写的测试用例为:

    1)输入正数,比如1、1.2、0.99,期待返回值与输入相同

    2)输入复数,比如-1、-1.2、-0.99,期待返回值与输入相反

    3)输入0,期待返回0

    4)输入非数值类型,比如None、[]、{}、期待抛出TypeError

    把上面这些测试用例放到一个测试模块里,就是一个完整的单元测试

     

    我们先写一个需要测试的类:

     1 import unittest 
     2 class MathFunc:  
     3   def __init__(self,a,b):
     4     self.a = a
     5     self.b = b 
     6 
     7   def add(self):
     8     return self.a + self.b
     9 
    10   def multi(self):
    11     return self.a * self.b

    二、unittest工作原理

    unittest中最核心的四部分是:TestCase,TestSuite,TestRunner,TestFixture

    再说这几个类之前,我们先来回顾一下自动化测试的步骤:

    1. 编写用例 TestCase
    2. 执行用例 TestSuite存储用例 TestLoader 加载用例
    3. 对比结果 期望结果 判定是否通过 assert
    4. 出具测试报告 TextTestRunner
     1 class TestMathMulti(unittest.TestCase):
     2   # 一个用例就是一个函数 不能传参数 只有一个实例self
     3   # 所有用例都是test开头 否则unittest无法识别
     4 
     5   def test_Multi_positive(self):
     6     #测试两个正数相加
     7     res = MathFunc(1,2).multi()
     8     print(res)
     9 
    10   def test_Multi_zero(self):
    11     # 测试两个0相加
    12     res = MathFunc(0,0).multi() 
    13     print(res)
    14 
    15   def test_Multi_negative(self):
    16     #测试两个负数相加
    17     res = MathFunc(-1,-2).multi()
    18      print(res)
    19 
    20 if __name__ == '__main__':
    21   unittest.main()

    下面我们一条一条去执行:

    1 import unittest 
    2 from Prepares.class_01 import TestMathFunc
    3 from HTMLTestRunner import HTMLTestRunner
    4 # A class whose instances are single test cases.
    5 # 这个类的实例是一个单独的用例
    6 suite = unittest.TestSuite() # 存储用例 
    7 suite.addTest(TestMathFunc("test_add_positive"))
    8 # 执行
    9 runner =unittest.TextTestRunner() runner.run(suite)

     

    第二种方法:加载全部用例

    1 from Prepares import class_01
    2 loader = unittest.TestLoader()
    3 suite.addTest(loader.loadTestsFromModule(class_01))

    生成txt版本测试报告:

    with open('UnittestTextReport.txt', 'a') as f:
      runner = unittest.TextTestRunner(stream=f, verbosity=2)
      runner.run(suite)

    生成HTML版的测试报告:

    1 with open('HTMLReport.html', 'wb') as f:
    2   runner = HTMLTestRunner(stream=f,
    3               title='MathFunc Test Report',
    4               description='generated by HTMLTestRunner.',
    5               verbosity=2 )
    6   runner.run(suite)
  • 相关阅读:
    .Net在arraylist用法
    ORM查询方法
    正则表达式大全
    checkbox修改功能保存功能绑定
    Web ASP.Net运行机制
    面试题
    Sql Server 中锁的概念
    由nginx和spring boot中tomcat配置不当引起的问题
    记录一次由事务可重复读引起的问题
    Ubuntu18.04没有声音的解决
  • 原文地址:https://www.cnblogs.com/caixinxiong/p/12345367.html
Copyright © 2020-2023  润新知