Unittest框架

限于喜欢 提交于 2020-04-07 08:00:23

import unittest
from assertpy import assert_that

"""
Testcase:

一个TestCase的实例就是一个测试用例。什么是测试用例呢?就是一个完整的测试流程,包括测试前准备环境的搭建(setUp),
执行测试代码 (run),以及测试后环境的还原(tearDown)。元测试(unit test)的本质也就在这里,一个测试用例是一个完整
的测试单元,通过运行这个测试单元,可以对某一个问题进行验证。

Test suite:

多个测试用例集合在一起,就是TestSuite,而且TestSuite也可以嵌套TestSuite。

Test runner:

是来执行测试用例的,其中的run(test)会执行TestSuite/TestCase中的run(result)方法。

TestLoader:

是用来加载TestCase到TestSuite中的,其中有几个loadTestsFrom__()方法,就是从各个地方寻找TestCase,创建它们的实例,
然后add到TestSuite中,再返回一个TestSuite实例。

Test fixture:

对一个测试用例环境的搭建和销毁,是一个fixture,通过覆盖 TestCase的setUp()和tearDown()方法来实现。
这个有什么用呢?比如说在这个测试用例中需要访问数据库,那么可以在setUp() 中建立数据库连接以及进行一些初始化,
在tearDown()中清除在数据库中产生的数据,然后关闭连接。注意tearDown的过程很重要,要为以后的 TestCase留下一
个干净的环境。关于fixture,还有一个专门的库函数叫做fixtures,功能更加强大。

unittest.skip():

装饰器,当运行用例时,有些用例可能不想执行等,可用装饰器暂时屏蔽该条测试用例。
一种常见的用法就是比如说想调试某一个测试用例,想先屏蔽其他用例就可以用装饰器屏蔽。

使用unittest编写python的单元测试代码,包括如下几个步骤:

1、编写一个python类,继承 unittest模块中的TestCase类,这就是一个测试类

2、在上面编写的测试类中定义测试方法(这个就是指的测试用例),每个方法的方法名要求以 test 打头,没有额外的参数。 
在该测试方法中 调用被测试代码,校验测试结果,TestCase类中提供了很多标准的校验方法,如 最常见的assertEqual。
这里使用assertpy

3、执行 unittest.main() ,该函数会负责运行测试,它会实例化所有TestCase的子类,并运行其中所有以test打头的方法。
"""


class TestCase(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        print('前提条件,只会执行一次,比如登录获取cookie')

    @classmethod
    def tearDownClass(cls) :
        print('结束测试,做一些清理工作,执行一次')

    def setUp(self) -> None:
        print('每一个test执行 前都会执行的')

    def tearDown(self) -> None:
        print('每一个test执行后都会执行')

    def test_1(self):
        print('1111')
        assert_that(2).is_equal_to(2)

    def test_2(self):
        print('2222')
        assert_that(2, description='ERROR').is_equal_to(4)

    @unittest.skip("ssss")
    def test_3(self):
        print('333')
        assert_that(2, description="错误").is_equal_to(3)


if __name__ == '__main__':
    suit1 = unittest.TestSuite()
    suit1.addTest(TestCase('test_2'))
    suit1.addTest(TestCase('test_1'))
    suit1.addTest(TestCase('test_3'))
    runner = unittest.TestRunner()
    runner.run(suit1)

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!