Python中如何使用PyCharm运行unittest进行自动化测试?

调用 unittest 每次在 pycharm 里面运行都会跑 utrunner.py 这是为什么?

D:\Python\python.exe "D:\Program Files\JetBrains\PyCharm 2016.1.4\helpers\pycharm\utrunner.py" E:\python_project\PO_DEMO\testcase\testSearchPage.py::TestSearchPage::testSearch true

这样子跑的话就会执行前面那个 utrunner.py


Python中如何使用PyCharm运行unittest进行自动化测试?

1 回复

在PyCharm里跑unittest,直接右键运行就行,但想自动化、批量跑或者集成到流程里,得写个脚本。下面是个完整的例子,展示了怎么组织测试用例并用代码执行。

假设你的项目结构是这样的:

my_project/
│
├── calculator.py
├── tests/
│   ├── __init__.py
│   └── test_calculator.py
└── run_tests.py

1. 先写个简单的被测模块 calculator.py

class Calculator:
    def add(self, a, b):
        return a + b

    def subtract(self, a, b):
        return a - b

2. 写对应的单元测试 tests/test_calculator.py

import unittest
import sys
import os
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))

from calculator import Calculator

class TestCalculator(unittest.TestCase):
    def setUp(self):
        self.calc = Calculator()

    def test_add(self):
        self.assertEqual(self.calc.add(2, 3), 5)
        self.assertEqual(self.calc.add(-1, 1), 0)

    def test_subtract(self):
        self.assertEqual(self.calc.subtract(5, 3), 2)
        self.assertEqual(self.calc.subtract(0, 5), -5)

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

在PyCharm里,你可以在test_calculator.py里右键选Run 'Unittests in test_calculator'直接跑这个文件。

3. 关键来了,写一个自动化运行脚本 run_tests.py

import unittest
import sys
import os

def run_all_tests():
    # 1. 发现测试:自动找到当前目录下所有以'test'开头的文件里的测试用例
    #    你也可以指定目录,比如 `start_dir='./tests'`
    test_loader = unittest.defaultTestLoader
    test_suite = test_loader.discover(start_dir='.', pattern='test_*.py')

    # 2. 执行测试:用TextTestRunner输出文本结果到控制台
    test_runner = unittest.TextTestRunner(verbosity=2) # verbosity=2 显示详细信息
    result = test_runner.run(test_suite)

    # 3. 根据测试结果返回退出码(0成功,1失败),这对CI/CD流程很重要
    return 0 if result.wasSuccessful() else 1

if __name__ == '__main__':
    sys.exit(run_all_tests())

怎么用:

  1. 在PyCharm的Terminal里,直接在项目根目录下执行:python run_tests.py
  2. 或者,在PyCharm里右键run_tests.py,选择Run 'run_tests'

核心解释:

  • unittest.defaultTestLoader.discover() 是自动发现测试用例的核心方法,它会递归搜索指定目录,找到所有匹配命名规则(如test_*.py)的测试文件,并加载其中的unittest.TestCase子类。
  • unittest.TextTestRunner 是标准的文本测试运行器,verbosity=2会让你看到每个测试方法的通过/失败详情。
  • 脚本最后返回退出码(sys.exit),如果所有测试通过返回0,否则返回1。这样你就可以在命令行、批处理脚本或CI/CD工具(如Jenkins、GitHub Actions)中调用它,并根据退出码判断测试是否全部通过。

总结一下:unittestdiscover方法自动收集用例,再用TextTestRunner执行并获取结果。

这样你就有了一个可以脱离PyCharm界面、在命令行或自动化流程中一键运行所有unittest测试的脚本了。

回到顶部