单元测试系列篇(一):unittest

本文介绍了Python单元测试框架unittest,包括其功能、组成、断言方法和基本使用。unittest支持编写测试用例,提供丰富的断言,如assertEqual、assertTrue等。文章详细解释了Test Case、Test Suite、Test Runner和Test Fixture的概念,并指导如何组织和运行测试用例。此外,还讨论了测试用例的执行顺序和如何创建测试套件。
摘要由CSDN通过智能技术生成

点击上方“Python自动化社区”,选择“加为星标”

第一时间关注 Python 自动化技术干货!

10b8b896353fa6631e2f75ef1185d694.jpeg

1. 前言

4b0611db28f4f2d800d0c31c8a080d86.jpeg

测试金字塔中,单元测试 处于测试的最底层,开发测试成本最低,产生的效率最高,因此,单元测试在软件测试中的地位最为重要。

Python 中常用的单元测试框架包含:unittest 和 pytest。

今天先聊聊 unittest 单元测试框架。

2. 功能介绍

unittest 单元测试框架可以通过编写测试用例,来完成平常的自动化测试工作,包含:App 端、Web 端、接口自动化测试。

pycharm 内置 unittest,该测试框架内置了丰富的断言方法,帮助我们更加灵活的生成测试日志。

测试日志内容包含:测试 case 执行总时间、成功和失败的测试用例数。

unittest 可以使用 TestLoader 通过查找匹配的文件,执行里面所有的测试用例。

不仅如此,unittest 也内置了 常用的装饰器、Fixture、帮助我们在自动化测试过程中处理一些业务逻辑场景。

3. 组成

unittest 包含 4 个重要的概念,分别是:Test Case、Test Suite、Test Runner、Test Fixture

4ec4c9bb937f9205a37dbf6d9cce67b6.jpeg

Test Case,又名:测试用例,是一个独立且最小的测试框架,用于检测特定输入集合的特定的返回值。

unittest 只需要自定义一个类,继承于 TestCase 类,然后就可以在内部编写测试用例了。

Test Suite,测试套件,用于组装一组要运行的测试用例,使用 TestSuite 类创建测试套件。

Test Runner 是 unittest 中的一个组件,用来执行测试用例并展示测试的结果,包含:文本和图形界面。

使用 unittest 提供的 TextTestRunner 类运行测试用例,可以使用 HTMLTestRunner 生成 HTML 格式的测试报告。

Test Fixture 基于模块运行的,一般在测试用例执行之前和执行完成之后,特定初始化或者清理一些对象。

4. 断言

unittest 框架内置大量的断言方法,具体可以查看该框架中 unittest.TestCase 实现的方法。

7333232e6f77190d6b48a80bc3ea4043.jpeg

常用的断言方法包含:assertEqual()、assertTrue()、assertFalse()、assertIs()、assertIn()、assertIsInstance,根据需要选中一种进行断言即可。

5. 基本使用

使用 unittest 编写单元测试用例按下面 3 步:

第 1 步,需要编写一个类继承自 unittest.TestCase 类

# 导入依赖
import unittest

# 自定义类,继承于 TestCase
class TestFoo(unittest.TestCase):
   pass

第 2 步,编写测试方法,方法名必须以:test 字符串开头,然后在方法内部编写测试逻辑,最后使用 断言 来输出结果

# 测试方法
def test_fun(self):
  """
  编写测试方法
  :return:
  """
  # 1、编写测试逻辑

  # 2、断言
  self.assertEqual(result, "Hello World")

第 3 步,在 main 执行函数中,使用 unittest.main() 执行测试用例

if __name__ == '__main__':
    # 运行所有的测试用例
    unittest.main()

需要注意的是,如果一个测试类中定义了多个测试用例,执行顺序按照测试用例对应的测试方法名的 ASCII 值升序 来运行。

6. 套件使用

也可以使用另外一种方式,将多个测试用例加入到 TextSuite 测试套件中

首先,我们编写多个测试用例。

import unittest

class TestFoo(unittest.TestCase):

    def test_fun1(self):
        pass

    def test_fun2(self):
        pass

    def test_fun3(self):
        pass

然后,新建一个测试运行器:TextTestRunner,使用测试运行器来运行测试套件

if __name__ == '__main__':
    # 创建测试套件
    suit = unittest.TestSuite()
    # 新增测试用例
    suit.addTest(TestFoo("test_fun1"))
    suit.addTest(TestFoo("test_fun2"))
    suit.addTest(TestFoo("test_fun3"))

    # 创建测试运行器
    runner = unittest.TextTestRunner()
    # 运行测试套件,执行顺序可控
    runner.run(suit)

这样就保证了测试用例的执行顺序按照加入的顺序来执行了。

下一节将对 unittest 进阶的功能进行讲解。

8960958d0ccf30e5e014f0950d4bbeaf.png

喜欢本教程系列的同学

欢迎长按下图订阅!

⬇⬇⬇

c8b519be2ab67488b5ae41dfd13a7987.jpeg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值