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)

相关推荐