#1:测试执行
"""
这类方法用于测试的执行过程,比如在测试之前连接数据库,测试之后用于清除增加的字段,
跳过某个测试用例等。利用这些方法,可以降低测试用例代码的复杂度,减少 耦合度,结构也更加清晰。
setup()与tearDown()。顾名思义。setip和tearDown分别是安装和卸载的意思。setup()方法用于初始化工作,
比如在执行测试用例之前进行的系统连接。身份认证等。相反tearDown()方法用于测试后的清理工作,比如数据还原,、
断开连接等。
"""
# import unittest
# class TestDemo(unittest.TestCase):
# def setUp(self): #执行每个用例前都会调用setup()方法
# print("******setUp********")
# def tearDown(self): #每个测试用例后都调用了tearDown()方法
# print("*******tearDoen**********")
# def test01(self):
# print("this is tese01")
# def test02(self):
# print("this is test02")
# def test03(self):
# print("this is test03")
#
# if __name__ == "__main__":
# unittest.main()
"""setUpClass()和tearDownClass().setUp()he tearDown()方法对比,
加了一个单词Class,相对应的初始化和清理工作不是针对每一个测试用例,而是针对于整个类
"""
# import unittest
# class TestDemo(unittest.TestCase):
# @classmethod
# def setUpClass(cls):
# print("******setUp********")
# @classmethod
# def tearDownClass(cls):
# print("*******tearDoen**********")
# def test01(self):
# print("this is tese01")
# def test02(self):
# print("this is test02")
# def test03(self):
# print("this is test03")
# if __name__ == "__main__":
# unittest.main()
"""从运行后的结果看,初始化方法运行后,紧接着运行所有的测试用例,最后运行清理方法
整个过程中,初始化和清理方法均只运行一次,与内部测试方法的个数无关。
"""
"""run(result = None) 方法可以帮助运行某个测试用例,与前面的例子不同的是,该方法提供了参数result
来保存测试的结果,主要运行了一下两种方法;
"""
#1:如果为默认值None,会将测试结果到后续提到的defaultTestResult()方法中,通俗的说,即直接输出到控制台中。
# import unittest
# class TestDemo(unittest.TestCase):
# def test01(self):
# print("this is test01")
#
# def test02(self):
# print("this is test02")
#
# def test03(self):
# print("this is test03")
# if __name__ == "__main__":
# TestDemo('test02').run()
"""将测试结果保存到unittest.testResult()实例化的对象中,输出该对象的字典,
结果显示出是失败、错误、已运行、跳过、运行字符集等详细信息"""
# import unittest
#
# class TestDemo(unittest.TestCase):
# def test01(self):
# print("this is test01")
#
# def test02(self):
# print("this is test02")
#
# def test03(self):
# print("this is test03")
#
# if __name__ == "__main__":
# r = unittest.TestResult()
# TestDemo('test01').run(result = r)
# print(r.__dict__) #__dict__是用来存储对象属性的一个字典,其键为属性名,值为属性的值。
"""
运行结果:
this is test01
{'failfast': False, 'failures': [], 'errors': [], 'testsRun': 1, 'skipped': [], 'expectedFailures': [],
'unexpectedSuccesses': [], 'shouldStop': False, 'buffer': False, 'tb_locals': False, '_stdout_buffer': None, '
_stderr_buffer': None, '_original_stdout': <_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'>,
'_original_stderr': <_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'>, '_mirrorOutput': False}
"""
#断言:
# def asseertTrue(self,expr,msg= None):
# """Check that the expression is true"""
# if not expr:
# msg = self._formatMessag(msg,"%s is not true" % safe_repr(expr))
# raise self.failureException(msg)
#使用addertTest 的简单实例。“1==10”是一个表达式,结果是False,会导致断言失败
# import unittest
# class TestDemo(unittest.TestCase):
# def test01(self):
# self.assertTrue(1==10 , msg ='this is a test msg')
#
# if __name__ =="__main__":
# if __name__ == '__main__':
# if __name__ == '__main__':
# unittest.main()
# """运行结果,上述代码展现了断言失败的情况,还是输出了“this is a test msg”。事实上每个断言的方法都有msg参数,
# 灵活的使用此参数可以在测试失败时向团队提供更多的信息和线索"""
"""比如assertIsInstance(a,b)。从字面意思理解为判断实例,即a如果为b实例化出来的对象,则结果为True,否则为False。下面的
例子中定义了三个类,TestDemo为测试类,继承于unittest.TestCase,内部有两个测试方法,每个方法均先实例化一个队形,再判断
该对象和某个类的关系"""
import unittest
class Demo1:
pass
class Demo2:
pass
class TestDemo(unittest.TestCase):
def test01(self):
d = Demo1()
self.assertIsInstance(d,Demo1,msg='##tis is test01 ##') #这一步是断言
def test02(self):
d = Demo2()
self.assertIsInstance(d,Demo1,msg='##tis is test02 ##')
#由于对象d不是Demo1实例化出来的,所以test02测试不通过
#换成Demo2就对了。
if __name__ == "__main__":
unittest.main()
"""在UnitTest框架中,assert断言的方法远远不止以上所述,但其核心的原理和用法都是想通的。"""
测试执行—setup()/tearDown()
最新推荐文章于 2025-03-16 08:00:00 发布