【二、自动化测试】unittest测试框架简介

发布时间:2024年01月14日

你好啊!我是程序员山茶,你也可以称我为测试开发Guide。本文首发“unittest

每个语言都包含有自己的测试框架,python中同样有很多测试框架,具体如下

  • unittest: unittest是Python自带的单元测试框架,它提供了类和方法来编写和组织测试用例,以及各种断言方法用于验证结果

  • pytest: 是一个第三方的Python测试框架,它具有简洁的语法和丰富的功能集。支持自动发现测试文件和函数,提供了强大的断言方法,以及插件生态系统,可以扩展测试功能

  • nose:是另一个流行的第三方测试框架,它建立在unittest之上,提供了更简洁的语法和额外的功能,如自动发现测试、测试生成器、测试覆盖率报告等

  • doctest: doctest是Python标准库中的一个模块,它允许在文档字符串中编写测试用例。doctest将文档中的示例代码提取出来,并自动运行并验证结果,以确保示例代码的正确性

  • Testify: 一个相对较新的Python单元测试框架,它提供了一套简洁而强大的工具和断言方法,用于编写单元测试和集成测试

  • behave:behave是一个行为驱动开发(BDD)框架,它使用自然语言来描述系统行为,并将这些描述转化为可执行的测试用例

本文主要介绍unittest框架。

unittest框架是一个功能强大的单元测试工具,不仅适用于单元测试,还可用于web自动化测试。它提供了丰富的断言方法,可组织和执行测试用例,并生成测试结果

unittest基础概念

  • TestCase测试用例,一个TestCase就是一条测试用例

  • TestSuite测试套件,多条TestCase测试用例集合。TestSuite可以嵌套TestSuite,即测试用例集合数据可以是测试用例集合

  • TestRunner执行测试,执行测试用例套件

  • TestFixture对一个测试环境的搭建和销毁,被称为一个Fixture,比如数据库连接关闭、测试环境数据清理、启动关闭服务进程

  • TestLoader是unittest框架中的一个类,用于将TestCase加载到TestSuite中。它提供了几个loadTestsFrom__()方法,这些方法用于从不同的源中寻找TestCase并创建它们的实例。它们会将这些TestCase实例添加到TestSuite中,并返回一个包含TestCase的TestSuite实例

unittest使用原则

使用原则

  • 测试模块引入 import unittest

  • 测试类必须继承 unittest.TestCase

  • 测试方法必须以“test开头”,执行顺序按照开头字符串ASCII码升序执行。

测试类和测试方法

断言方法

以下断言方法是unittest框架中的一部分,用于在测试过程中进行验证和断言

序号

方法

校验内容

1

assertEqual(a, b)

断言a等于b

2

assertNotEqual(a, b)

断言a不等于b

3

assertTrue(x)

断言x为True

4

assertFalse(x)

断言x为False

5

assertls(a, b)

断言a和b是同一个对象

6

assertlsNot(a, b)

断言a和b不是同一个对象

7

assertlsNone(x)

断言x为None

8

assertlsNotNone(x)

断言x不为None

9

assertln(a, b)

断言a包含在b中

10

assertNotln(a, b)

断言a不包含在b中

11

assertlslnstance(a, b)

断言a是b的实例

12

assertNotlsInstance(a, b)

断言a不是b的实例

执行测试

执行测试全局执行测试使用" unittest.main()"方法

一个简单的unittest示例

如下测试用例,用到了上文中的使用原则,继承了unittest.TestCase同时测试方法以test开头,且增加了测试类setUpClass、tearDownClass及测试方法setUp、tearDown

# 引入unittest模块
import unittest


# 创建测试类,继承unittest.TestCase
class TestApi(unittest.TestCase):

    #   测试方法,每执行一次test的测试方法就会执行一次
    def setUp(self) -> None:
        print("setUp方法")

    def tearDown(self) -> None:
        print("tearDown方法")

    #   测试类,以@classmethod修饰测试类,且在过程中仅执行一次
    #   如果遇到问题请联系我,添v加x:test_shancha01 私信公众号:程序员山茶
    @classmethod
    def setUpClass(cls) -> None:
        print("setUpClass每个类执行一次")

    @classmethod
    def tearDownClass(cls) -> None:
        print("tearDownClass每个类执行一次")

    def test_01(self):
        a = 1
        b = 2
        c = a + b
        # 断言 判断c和3是否相同
        self.assertEqual(c, 3)

    def test_02(self):
        a = 2
        b = 3
        c = a * b
        #断言 判断c和6是否相同
        self.assertEqual(c, 6)


if __name__ == '__main__':
    # 执行所有的以test为开头的测试用例
    unittest.main()

作者简介:

程序员山茶,一个工作5年,并坚持探索测试之路的测试开发工程师。曾混迹于互联网大厂、IOTA行业领航企业、安全行业、大数据行业领航企业,欢迎和我一起沟通交流。

欢迎关注我, ?和我一起探索测试之路,终身成长

?

文章来源:https://blog.csdn.net/weixin_53991455/article/details/135585688
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。