结合实例,联系单元测试。
文件结构:
|----Python_unittest
|--------math_operation.py # 定义了类【class MathOperation:】,类里面定义了初始化函数,以及加减乘除4个实例方法
|--------two_num_delete.py # 定义了类【class TestDelete(unittest.TestCase):】,类里面定义了测试减法的用例
|--------two_num_divide.py # 定义了类【class TestDivide(unittest.TestCase):】,类里面定义了测试除法的用例
|--------unittest_suite.py
1.two_num_delete.py
_import unittes
from Python_unittest.math_operation import MathOperation
class TestDelete(unittest.TestCase):
@classmethod
def setUpClass(cls):
"""
在执行所有用例之前,会调用setUpClass类属性
:return:
"""
log\_file\_name = "math\_operation\_result\_log.txt"
cls.one\_file = open(log\_file\_name, mode="a", encoding="utf-8")
print(f"打开【{log\_file\_name}】文件")
cls.one\_file.write("\\n{:=^40s}\\n".format("开始执行【减法】的测试用例"))
@classmethod
def tearDownClass(cls):
"""
在所有用例执行之后, 会调用一次tearDownClass类属性
:return:
"""
cls.one\_file.write("{:=^40s}\\n".format("【减法】的测试用例执行结束"))
cls.one\_file.close()
def test\_delete0(self):
real\_result = MathOperation(9, 6).delete()
expect\_value = 3
try:
self.assertEqual(expect\_value, real\_result, msg="两数相减异常")
print("a>b>0, a-b的结果正常")
self.one\_file.write("a>b>0时, a-b测试的结果为:Pass\\n")
except AssertionError as err:
print(f"具体异常为:{err}")
self.one\_file.write(f"a>b>0时, a-b测试的结果为:Fail\\n具体异常为{err}")
raise err
def test\_delete1(self):
real\_result = MathOperation(-9, -6).delete()
expect\_value = -3
try:
self.assertEqual(expect\_value, real\_result, msg="两数相减异常")
print("a<b<0, a-b的结果正常")
self.one\_file.write("a<b<0时, a-b的测试结果为:Pass\\n")
except AssertionError as err:
print(f"具体异常为:{err}")
self.one\_file.write(f"a<b<0时, a-b的测试结果为:Fail\\n具体异常为{err}")
raise err_
2.two_num_divide.py
import unittest
from Python_unittest import MathOperation
class TestDivide(unittest.TestCase):
@classmethod
def setUpClass(cls):
"""
在执行所有用例之前都会执行的文件
:return:
"""
log\_file\_name = "math\_operation\_result\_log.txt"
cls.one\_file = open(log\_file\_name, mode="a", encoding="utf-8")
print(f"打开【{log\_file\_name}】文件")
cls.one\_file.write("\\n{:=^40s}\\n".format("开始执行【除法】的测试用例"))
@classmethod
def tearDownClass(cls):
"""
在所有用例执行之后, 会调用一次tearDownClass类属性
:return:
"""
cls.one\_file.write("{:=^40s}\\n".format("【除法】的测试用例执行结束"))
cls.one\_file.close()
def test\_divide0(self):
real\_result = MathOperation(9, 3).divide()
expect\_result = 3
try:
self.assertEqual(expect\_result, real\_result, msg="两数相除异常")
print("a>b>0,a/b的结果正常")
self.one\_file.write("a>b>0,a/b的测试结果为:Pass\\n")
except AssertionError as err:
print(f"具体异常为:{err}")
self.one\_file.write(f"a>b>0时, a/b测试的结果为:Fail\\n具体异常为{err}")
raise err
def test\_divide1(self):
real\_result = MathOperation(9, -3).divide()
expect\_result = 9
try:
self.assertEqual(expect\_result, real\_result, msg="两数相除异常")
print("a>0>b,a/b的结果正常")
self.one\_file.write("a>b>0,a/b的测试结果为:Pass\\n")
except AssertionError as err:
print(f"具体异常为:{err}")
self.one\_file.write(f"a>b>0时, a/b测试的结果为:Fail\\n具体异常为{err}\\n")
raise err
3.unittest_suite.py
import unittest
from Python_unittest import two_num_divide as num_divide
from Python_unittest import two_num_delete as num_delete
one_suite = unittest.TestSuite()
one_loader = unittest.TestLoader()
one_suite.addTest(one_loader.loadTestsFromModule(num_divide))
one_suite.addTest(one_loader.loadTestsFromModule(num_delete))
# 定义【运行器】 one_runner = unittest.TextTestRunner() one_runner.run(one_suite)
【知识点】
one_suite.addTest(one_loader.loadTestsFromModule(num_divide)) 是向套件中一个一个地添加加测试模块的用例
one_suite.addTests(one_loader.loadTestsFromModule(num_divide),one_loader.loadTestsFromModule(num_delete)) 可以同时添加多个模块测试用例
执行顺序与添加顺序有关。
4.运行结果:
【知识点】
注意捕获异常时一定要抛出异常,用例的总数是:以test_开头的所有方法的个数,失败数则是根据抛出的【断言异常AssertionError】来统计的。
.代表运行成功,F代表运行失败。
用例执行的顺序:
loadTestsFromModele()方法先添加哪个模块就先执行哪个。
在加载的模块内部,是根据方法的ASCII码的顺序执行测试用例。
defaultTestLoader.discover()默认根据ASCII码的顺序加载测试用例。
5.unittest_discover.py
import unittest
one_suite = unittest.defaultTestLoader.discover(".")
one_runner = unittest.TextTestRunner()
one_runner.run(one_suite)
【知识点】
def discover(self, start_dir, pattern='test*.py', top_level_dir=None):
默认加载路径下以“test”开头的模块,所以测试用例的模块应当都是以test开头。
.代表当前py文件所在的路径。
也可以指定绝对路径:one_suite = unittest.defaultTestLoader.discover(r"C:\Users\zfy\PycharmProjects\Python_unittest")
6. 生成的log文件
math_operation_result_log.txt
手机扫一扫
移动阅读更方便
你可能感兴趣的文章