unittest 执行测试用例的常见方式

发布于:2025-07-31 ⋅ 阅读:(21) ⋅ 点赞:(0)

unittest 执行测试用例的常见方式

unittest 框架中,执行测试用例的方式有多种,可根据项目规模、执行需求选择合适的方式。以下是常见的执行方式及示例:

一、直接执行单个模块(最基础)

适用于测试用例写在单个 .py 文件中,直接通过脚本入口执行。

方式 1:使用 unittest.main()

在测试模块末尾添加 unittest.main(),运行脚本时自动执行所有测试用例:

# test_demo.py

import unittest

class TestDemo(unittest.TestCase):

    def test_add(self):

        self.assertEqual(1 + 2, 3)

if __name__ == "__main__":

    unittest.main()  # 自动发现并执行当前模块的所有测试用例

执行命令

python test_demo.py

方式 2:通过命令行指定模块

无需在脚本中写入口,直接通过 python -m unittest 命令执行模块:

python -m unittest test_demo.py  # 执行 test_demo.py 中的所有用例

二、通过 TestSuite 手动组织用例(灵活控制)

当需要选择性执行部分用例或按特定顺序执行时,使用 TestSuite 手动组织用例。

步骤
  1. 创建 TestSuite 实例。
  2. 通过 addTest() 或 addTests() 添加用例。
  3. 使用 TextTestRunner 执行套件。
示例

# test_suite.py

import unittest

class TestLogin(unittest.TestCase):

    def test_success(self):

        print("登录成功")

class TestPay(unittest.TestCase):

    def test_success(self):

        print("支付成功")

if __name__ == "__main__":

    # 创建测试套件

    suite = unittest.TestSuite()

    # 添加单个用例(格式:类名("方法名"))

    suite.addTest(TestLogin("test_success"))

    # 批量添加类中所有用例

    suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestPay))

    # 执行套件

    runner = unittest.TextTestRunner(verbosity=2)  # verbosity=2 显示详细日志

    runner.run(suite)

执行效果:可精确控制执行哪些用例,忽略不需要的用例。

三、批量发现并执行用例(适合大型项目)

当项目中有多个测试模块(如 test_login.pytest_order.py),可通过 unittest.discover() 自动发现并执行所有用例。

核心参数
  • start_dir:开始搜索的目录(通常为项目的测试目录,如 tests/)。
  • pattern:匹配测试文件的模式(默认 test*.py,即文件名以 test 开头的 .py 文件)。
  • top_level_dir:项目顶层目录(可选,一般与 start_dir 一致)。
示例

假设项目结构如下:

project/

└── tests/

    ├── test_login.py

    ├── test_order.py

    └── sub_tests/

        └── test_pay.py

执行方式
方式 1:在脚本中使用 discover

# run_all.py

import unittest

if __name__ == "__main__":

    # 发现 tests 目录下所有 test*.py 中的用例

    suite = unittest.defaultTestLoader.discover(

        start_dir="tests",

        pattern="test*.py",

        top_level_dir=None

    )

    # 执行发现的用例

    unittest.TextTestRunner(verbosity=2).run(suite)

执行命令

python run_all.py

方式 2:通过命令行直接发现

无需编写脚本,直接通过命令行执行:

# 发现并执行 tests 目录下的所有用例

python -m unittest discover -s tests -p "test*.py"

四、结合命令行参数执行(灵活筛选)

通过命令行参数可指定执行特定模块、类或方法,无需修改代码。

常用命令

命令示例

说明

python -m unittest test_demo

执行 test_demo.py 模块中的所有用例

python -m unittest test_demo.TestDemo

执行 test_demo.py 中 TestDemo 类的所有用例

python -m unittest test_demo.TestDemo.test_add

执行单个用例 test_add

python -m unittest -v test_demo

显示详细执行日志(-v 等价于 verbosity=2

python -m unittest -f test_demo

第一个用例失败后立即停止执行(-f 即 failfast

五、使用第三方工具执行(扩展功能)

结合 pytest 等工具执行 unittest 用例,支持更多功能(如并行执行、生成报告)。

示例:用 pytest 执行 unittest 用例
  1. 安装 pytest:

pip install pytest

  1. 执行命令:

pytest test_demo.py  # 自动识别并执行 unittest 用例

pytest tests/ -n auto  # 并行执行 tests 目录下的用例(需安装 pytest-xdist)

六、在 IDE 中执行(可视化操作)

主流 IDE(如 PyCharm、VS Code)支持直接点击运行按钮执行 unittest 用例:

  • PyCharm:在测试方法、类或模块旁点击绿色运行箭头,选择执行方式(如 “Run 'TestDemo'”)。
  • VS Code:安装 Python 插件后,测试文件中会出现运行按钮,或通过 “测试” 面板批量执行。

七、总结:不同场景的选择建议

场景需求

推荐执行方式

单个模块快速测试

unittest.main() 或命令行执行模块

选择性执行用例或控制顺序

TestSuite 手动组织

大型项目批量执行所有用例

unittest.discover() 或 IDE 批量执行

需要详细日志或失败立即停止

命令行加 -v 或 -f 参数

扩展功能(并行、报告)

结合 pytest 等第三方工具

通过以上方式,可满足从简单脚本到大型项目的各种测试执行需求。实际使用中,建议结合项目结构和团队习惯选择最合适的方式。如果需要某类方式的进阶用法(如生成 HTML 报告),可以补充需求进一步说明~


网站公告

今日签到

点亮在社区的每一天
去签到