基于Unittest的单元测试

基于 Unittest 的功能测试
1.写用例 :TestCase
2.执行用例 :
①TestSuite 存储用例
②TestLoader 找用例,加载用例,存到TestSuite中
3.对比实际和期望结果 判断用例是否通过:断言 Assert
常用的断言函数:
assertEqual/assertNotEqual 判断a==b/a!b
asserIsNone/assertIsNotNone 判断a is(not)None
assertIn/assertNotIn 判断a (not)in b
4.出具测试报告 TextTestRunner

1:新建python file【math_method.py】,
新建【MathMethod】类并写几个简单的方法

class MathMethod:
    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

2:新建另一个python file【class_unittest_cases.py】

# 导入unittest 包
import unittest
# from 包名.文件名 import 函数(方法)名
from class_unittest.math_method import MathMethod
# 创建一个测试类【模块】,继承 TestCase  专门写用例(方法)
class TestMathMethod(unittest.TestCase):
# 编写测试用例
# 1:【一个用例就是一个函数 不能传参 只有self关键字】
# 2:【所有的用例(函数)都是test开头 test_否则无法识别为用例】
    def test_add_two_xiangjia(self):
        res = MathMethod(1,2).add()
        print("1+2结果为",res)
        # 捕捉异常
        try:
            # 断言 (期望值,实际值,错误提示msg信息)
            self.assertEquals(3,res,"1+2计算出错了")
        except AssertionError as e:
            print("断言错误是{}".format(e))
            # 异常处理结束后,抛出异常
            raise e

    def test_multi_two_xiangcheng(self):
        res_multi = MathMethod(3,2).multi()
        print("3*2乘法结果为",res_multi)
        try:
            # 断言 (期望值,实际值,错误提示msg信息)
            self.assertEquals(3, res_multi, "3*2计算出错了")
        except AssertionError as e:
            print("断言错误是{}".format(e))
            # 异常处理结束后,抛出异常
            raise e

if __name__ == '__main__':
    # 用例执行顺序按照函数名的 ASCII 码顺序
    unittest.main() # 执行所有用例
# !!!注意:光标如果停留在某个用例(方法)上,则只执行单一用例

3:再次新建python file【class_unittest_run.py】

import unittest
# from 包名.文件名 import 方法名
from class_unittest.class_unittest_cases import TestMathMethod

# 方法一:
# 先用suite容器存储用例
suite = unittest.TestSuite()
# ①suite套件使用 .addTest 增加存储用例【用例较少使用】
# ②必须先创建实例,再调用方法  测试类名:TestMathMethod
#  ---------- suite.addTest(TestMathMethod('方法名'))
suite.addTest(TestMathMethod('test_add_two_xiangjia'))
suite.addTest(TestMathMethod('test_multi_two_xiangcheng'))

# 方法二:TextTestRunner【用例较多使用 找到所有test开头的用例】
# 创建一个加载器,寻找所有的用例【方法】
loader = unittest.TestLoader()
# 用 suite.addTest 将所有的用例【方法】加载到suite容器中
suite.addTest(loader.loadTestsFromTestCase(TestMathMethod))

# 具体到【文件名所在】模块并加载所有的用例
# from 包名 import 文件名 【具体到类名则无法加载模块用例】
from class_unittest import class_unittest_cases
# 通过 Modules 模块加载所用用例通过 .addTest 把所有用例存储在suite容器中
suite.addTest(loader.loadTestsFromModule(class_unittest_cases))

# 执行代码
# 使用with open...as 上下文编辑器,就解决执行结束忘记 file.close()
with open("test.txt",'w+',encoding='utf-8') as file:
    runner = unittest.TextTestRunner(stream=file,verbosity=2) # 2报告最详细
    runner.run(suite)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值