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() # positive 2 # zero 3 # negative 1 # abcdefghijklmnopqrstuvwxyz

 

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

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)

 

 

上一篇:用ibatis的ScriptRunner执行sql程序 ,失效


下一篇:unittest(2)-加载用例的3种方式