Python_unittest_软件测试_单元测试_(17)

一、关于测试

我们来看看百度百科怎么说的

软件测试(英语:Software Testing)
描述一种用来促进鉴定软件的正确性、完整性、安全 性和质量的过程。换句话说,软件测试是一种实际输出与预期输出之间的审核或者比较过程。 软件测试的经典定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量, 并对其是否能满足设计要求进行评估的过程


软件测试是软件开发中不可或缺的一个非常重要的环节,在一个成熟软件开发过程中, 根据开发所处的不同的进度,需要做不同的一些测试,以保障软件的可用性,如下图所示

在这里插入图片描述
作为开发人员,需要关注的是前三个步骤的标准测试,在这三个测试步骤中尤其要掌握需求 分工和多功能合并的单元测试,Python 针对这样的需要提供了专门用于单元测试的模块:unittest

二、单元测试

1、单元测试核心及步骤

  • 单元测试 :是用来对一个模块/一个函数/一个类来进行正确性检验的测试工作

  • 单元测试的四个核心:

    test case(测试用例):一个py文件就是一个测试用例

    test suite(测试套件):测试用例的集合

    test runner(测试运行器):执行测试套件

    test fixture(测试环境数据准备和数据清理或者测试脚手架)


  • test case(测试用例):一条用例就是一个完整的测试流程

    1.步骤

    1)导入 unittest 模块,被测文件或者其中的类

    2)创建一个测试类,被继承 unittest.TestCase

    3)重写 setUp 和 tearDown 方法(如果有初始化条件和结束条件)

    4)定义测试函数,函数名以 test_开头。测试用例

    5)在函数体中使用断言来判断测试结果是否符合预期结果

    6)调用 unittset.main()方法运行测试用例--------无此方法也是可以运行

    2.设置 setup 和 teardown:每次用例执行前都会执行初始化条件和结束条件

2、断言

设置断言,当一条测试用例执行失败,不会影响其他测试用例的执行
在这里插入图片描述

3、单元测试简单尝试 【Pycahrm】

遵循测试步骤

3.1 第一个测试

import unittest

class MyTest(unittest.TestCase):

    def test_01(self):
        print("Case--->test_01方法被执行")

    def test_02(self):
        print("Case--->test_02方法被执行")

右键直接运行,会弹出个画面,一般来说无需配置,除非特殊要求,直接点run
在这里插入图片描述
可以看到测试成功,并且是两个函数参与测试
在这里插入图片描述

3.2 第二个测试

import unittest

class MyTest(unittest.TestCase):

    def test_01(self):
        print("Case--->test_01方法被执行")


    def test_02(self):
        print("Case--->test_02方法被执行")

    # 该方法没有以test开头,没有执行
    def t_03(self):
        print("Case--->test_03方法被执行")

可以看到,我们这里加入了t_03,因为命名没有遵循测试步骤,所以并不会参与测试
在这里插入图片描述

3.3 第三个测试

可能你们都注意到了,说遵循步骤,可是少了setUptearDown
哪,我们加入这两个看下会有什么情况

import unittest

class MyTest(unittest.TestCase):

    def setUp(self) -> None:
        print("测试用例初始化")

    def tearDown(self) -> None:
        print("测试用例回收资源")

    def test_01(self):
        print("Case--->test_01方法被执行")


    def test_02(self):
        print("Case--->test_02方法被执行")

可以看到下图结果,每测试一个函数,都要重新初始化,回收资源
在这里插入图片描述

3.4 第四个测试

import unittest

class MyTest(unittest.TestCase):

    @classmethod
    def setUpClass(cls) -> None:
        print("测试用例初始化")

    @classmethod
    def tearDownClass(cls) -> None:
        print("测试用例回收资源")

    def test_01(self):
        print("Case--->test_01方法被执行")


    def test_02(self):
        print("Case--->test_02方法被执行")


看下图结果,可以看到,只需要初始化回收资源一次,为啥要应用类方法,因为不需要调用访问实例属性
在这里插入图片描述

3.5 第五个测试 【使用断言,测试函数,完整基础测试】

因为断言太多了

使用一个assertEqual(a,b) a 是否等于 b

import unittest


def web_search():
    print("网站搜索功能")
    return 10

class MyTest(unittest.TestCase):

    @classmethod
    def setUpClass(cls) -> None:
        print("测试用例初始化")

    @classmethod
    def tearDownClass(cls) -> None:
        print("测试用例回收资源")

    def test_01(self):
        print("Case--->test_01方法被执行")
        ret = web_search()
        self.assertEqual(ret,10)

    def test_02(self):
        print("Case--->test_02方法被执行")

可以看到执行
在这里插入图片描述

如果测试的值与预期不符合呢:
在这里插入图片描述
那么就会报错,并且我们来看下下图
在这里插入图片描述
在这里插入图片描述
让我们点击 click to see difference 看看不同
在这里插入图片描述

可以告诉你的参数错误不同

猜你喜欢

转载自blog.csdn.net/weixin_44238683/article/details/106222966
今日推荐