测试执行—setup()/tearDown()

#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='' mode='w' encoding='UTF-8'>, 
'_original_stderr': <_io.TextIOWrapper name='' 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断言的方法远远不止以上所述,但其核心的原理和用法都是想通的。"""

你可能感兴趣的:(unittest)