使用unittest进行单元测试的步骤
功能测试的流程来看单元测试:
1、写用例 TestCase
2、执行用例 a、TestSuite存储用例 b、TestLoader 找用例,加载用例,存到1的TestSuite
3、对比实际结果 期望结果 判定用例是否通过 #断言 Assert
4、出具测试报告 TextTestRunner
一、编写一个被测试的类mathtest.py
class MathMathod:
def __init__(self,a,b):
self.a=a
self.b=b
def add(self):#加法
return self.a+self.b
二、写一个测试类 danyuanceshi_35.py 对mathtest模块里面的 MathMathod类,进行单元测试 相当于测试用例
import unittest
from class_33.mathtest import MathMathod #测试的目标类
# 1+1
# 0+1
# -1+-2
class TestMathMethod(unittest.TestCase):#继承了unittest里面的TestCase 专门用来写用例
# 编写测试用例
# 1、一个用例就是一个函数,不能传参,只有self关键字
# 2、所有的用例(所有的函数 都是test开头 test_)
def test_add_two_positive(self):#两个正数相加1+1
res=MathMathod(1,1).add()
print("1加1的结果值是:",res)
# 加一个断言:判断期望值与实际值的比对结果一致就算通过,不一致就算失败
try:#异常处理
self.assertEqual(1,res)#期望值,结果值,返回信息
except AssertionError as e:
print("出错了!断言错误{0}".format(e))
raise e #异常处理完成之后,记得要把错误抛出去
def test_add_two_zero(self):#两个0相加1+1
res=MathMathod(0,0).add()
print("0加0的结果值是:",res)
#断言
self.assertEqual(0,res,"0加0出错了")#期望值,结果值,返回信息meg,断言里面msg是用例执行失败的时候才会显示
def test_add_two_negative(self):#两个负数相加-1+-2
res=MathMathod(-1,-2).add()
print("-1加-2的结果值是:",res)
self.assertEqual(-3,res)#期望值,结果值,返回信息
if __name__ == '__main__':
unittest.main()#默认执行所有的用例,按照函数名的ASCII编码顺序跑的
常用的断言语法:
三、执行用例 用于执行TestMathMethod类里面的用例(此处使用HTMLTestRunnerNew模板,可以从网上随意下一个)
import unittest
import HTMLTestRunnerNew#写好的一个模板 你可以直接调用
suite=unittest.TestSuite() #存储用例的容器
# 只执行一条 两个正数相加
# 方法一:
# suite.addTest(TestMathMethod('test_add_two_positive'))
# suite.addTest(TestMathMethod('test_add_two_zero'))
# 方法二:TestLoader
loader=unittest.TestLoader()#创建一个加载器
# 1从测试类里面去找
from class_33.danyuanceshi_35 import TestMathMethod #具体到类名
suite.addTest(loader.loadTestsFromTestCase(TestMathMethod))
# 2从模块类里面去找
# from class_33 import danyuanceshi_35 #具体到模块
# suite.addTest(loader.loadTestsFromModule(danyuanceshi_35))
# 执行———原始的
#上下文管理器,只要是":"后面的代码,执行完之后会自动关闭
# with open("test.txt","a",encoding="utf-8") as file:
# runner=unittest.TextTestRunner(stream=file,descriptions=True, verbosity=2)#verbosity:0、1、2其中2最详细
# runner.run(suite)
# 新鲜的可以生成html格式的报告
with open("test_report.html",'wb') as file:
runner=HTMLTestRunnerNew.HTMLTestRunner(stream=file,
verbosity=2,
title='python单元测试报告',
description='单元测试报告',
tester='小白')
runner.run(suite)
运行结果: