问题描述:
用unittest设计一个类,类中包含3个测试用例,使用测试套件的方式设计,(类前、类后、用例前、用例后)观察执行顺序,最后生成测试报告。
先上代码:
import unittest
@classmethod
#继承unittest.TestCase类
class NumberTest(unittest.TestCase):
def setUpClass(cls):#类的前置条件
print("-----开始-----")
def setUp(self):# 每次执行用例的前置条件
self.a = 10
self.b = 15
# Unittest默认运行以test开头的测试用例
def test_a(self):
# 使用unittest.TestCase类下面的断言方法对测试结果的判断
self.assertEqual(self.a+self.b, 25, msg="输入的数字不是10")
def test_b(self):
self.assertEqual(self.a-self.b, -5, msg="输入的数字不是20")
def test_c(self):
self.assertEqual(self.a*self.b, 150, msg="输入的数字不是30")
def tearDown(self):# 每次执行用例的后置条件
print("结束")
def tearDownClass(cls):#类的后置条件
print("-----结束-----")
if __name__ == "__main__":
unittest.main(verbosity=2)
import HTMLTestRunner
import os
import unittest
from number_test import NumberTest
#设置报告文件保存路径
cur_path = os.path.dirname(os.path.realpath(__file__))
report_path = os.path.join(cur_path, "report")
if not os.path.exists(report_path): os.mkdir(report_path)
#构造测试套件
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(NumberTest))
#构造HTMLTestRunner实例
if __name__ == '__main__':
html_report = report_path + r"\杨如杰_result.html"
fp = open(html_report, "wb")
runner = HTMLTestRunner.HTMLTestRunner(stream = fp, verbosity = 2,
title = "实验报告三_杨如杰", description = "用例执行情况")
runner.run(suite)
TestCase类中定义的几个特殊方法:
1、setUp():用例前置条件。 每个测试方法运行前运行,测试前的初始化工作。
2、tearDown():用例后置条件。 每个测试方法运行结束后运行,测试后的清理工作。
3、setUpClass():类的前置。 所有的测试方法运行前运行,单元测试前期准备,必须使用 @classmethod装饰器进行修饰,setUp()函数之前执行,整个测试过程只执行一次。
4、tearDownClass():类的后置。 所有的测试方法运行结束后执行,单元测试后期清理,必须使用 @classmethod装饰器进行修饰,tearDown()之后执行,整个测试过程只执行一次.
执行顺序:
setUpClass() 类的前置
setUp()用例前置 test_a()测试用例_a tearDown()用例后置
setUp()用例前置 test_b()测试用例_b tearDown()用例后置
setUp()用例前置 test_c()测试用例_c tearDown()用例后置
tearDownClass() 类的后置
生成测试报告:
|