整理 unittest、pytest、coverage、parameterized 等测试工具,并保留常用命令与参数。

导航

收录来源

  • raw/langs/pythons/tools/tester.rst
  • raw/langs/pythons/tools/testers/unittest.rst
  • raw/langs/pythons/tools/testers/parameterized.rst
  • raw/langs/pythons/tools/testers/Coverage.rst
  • raw/langs/pythons/tools/testers/Pytest.rst

条目内容

unittest

  • unittest 是 Python 标准库中自带的一个单元测试框架,它提供了组织和执行测试的基础设施。
  • unittest 原名为PyUnit,基于 JUnit(Java 的单元测试框架)设计,支持测试自动化、分享设置和关闭代码、独立于测试框架的测试,以及测试集合。

基本概念和功能

  • Test Case(测试用例): unittest.TestCase 是所有测试用例的基类,编写测试方法时,需要继承这个类。
  • Test Suite(测试套件): 用于将多个测试用例组合在一起。
  • Test Runner(测试运行器): 用于执行测试用例,并提供测试结果。
  • Test Fixture(测试固件): 在测试方法执行前后的准备和清理工作,通过 setUp 和 tearDown 方法实现。

parameterized

  • parameterized 是一个用于 Python 单元测试框架中的库,主要用于对测试用例进行参数化。

示例:

import unittest
from parameterized import parameterized

def add(a, b):
    return a + b

class TestAdd(unittest.TestCase):
    # 参数化测试
    @parameterized.expand([
        ("test_case_1", 1, 2, 3),
        ("test_case_2", -1, 1, 0),
        ("test_case_3", 0, 0, 0),
        ("test_case_4", 1.5, 2.5, 4.0),
    ])
    def test_add(self, name, a, b, expected):
        result = add(a, b)
        self.assertEqual(result, expected)

if __name__ == "__main__":
    unittest.main()

Coverage

  • Coverage是一个衡量你的测试覆盖你的代码的多大程度的工具。它生成一份报告,显示哪些部分在测试期间执行了代码,并突出显示缺乏测试覆盖范围的区域。

Pytest-测试框架

  • Pytest是一个强大的Python测试框架。它通过提供简洁的语法和广泛的功能来简化编写和执行测试的过程,例如测试发现、固定装置和断言。

Note

详情参见 demo-python

Pytests/normal Pytests/plugin Pytests/hook Pytests/conftest.py Pytests/pytest.fixture Pytests/pytest.hookimpl Pytests/pytest.mark