python单元测试之unittest框架

Posted 三人行必有我师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python单元测试之unittest框架相关的知识,希望对你有一定的参考价值。

python单元测试之unittest框架

一、什么是单元测试

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

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

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

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

3)输入0,期待返回0

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

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

 

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

import unittest 

class MathFunc:  

  def __init__(self,a,b):

    self.a = a

    self.b = b 

 

  def add(self):

    return self.a + self.b

 

  def multi(self):

    return self.a * self.b

 

二、unittest工作原理

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

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

  1. 编写用例 TestCase
  2. 执行用例 TestSuite存储用例 TestLoader 加载用例
  3. 对比结果 期望结果 判定是否通过 assert
  4. 出具测试报告 TextTestRunner

class TestMathMulti(unittest.TestCase):

  # 一个用例就是一个函数 不能传参数 只有一个实例self

  # 所有用例都是test开头 否则unittest无法识别

  def test_Multi_positive(self):

    #测试两个正数相加

    res = MathFunc(1,2).multi()

    print(res)

  def test_Multi_zero(self):

    # 测试两个0相加

    res = MathFunc(0,0).multi() 

    print(res)

  def test_Multi_negative(self):

    #测试两个负数相加

    res = MathFunc(-1,-2).multi()

     print(res)

if __name__ == ‘__main__‘:

  unittest.main()

 

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

import unittest 

from Prepares.class_01 import TestMathFunc

from HTMLTestRunner import HTMLTestRunner

# A class whose instances are single test cases.

# 这个类的实例是一个单独的用例

suite = unittest.TestSuite() # 存储用例 

suite.addTest(TestMathFunc("test_add_positive"))

# 执 

runner =unittest.TextTestRunner() runner.run(suite)

 

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

# suite.addTest(loader.loadTestsFromTestCase(TestMathFunc)) 

from Prepares import class_01

loader = unittest.TestLoader()

suite.addTest(loader.loadTestsFromModule(class_01))

 

生成测试报告:

with open(‘UnittestTextReport.txt‘, ‘a‘) as f:

  runner = unittest.TextTestRunner(stream=f, verbosity=2)

  runner.run(suite)

生成HTML版的测试报告:

with open(‘HTMLReport.html‘, ‘wb‘) as f:

  runner = HTMLTestRunner(stream=f,

              title=‘MathFunc Test Report‘,

              description=‘generated by HTMLTestRunner.‘,

              verbosity=2 )

  runner.run(suite)

 

 

以上是关于python单元测试之unittest框架的主要内容,如果未能解决你的问题,请参考以下文章

Python单元测试框架unittest之深入学习

python之单元测试框架—unittest(补充)

python单元测试之unittest

python单元测试框架-unittest之断言

unittest-前后置和断言

python——unittest(单元测试)