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())
怎么用:
- 在PyCharm的Terminal里,直接在项目根目录下执行:
python run_tests.py - 或者,在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)中调用它,并根据退出码判断测试是否全部通过。
总结一下: 用unittest的discover方法自动收集用例,再用TextTestRunner执行并获取结果。
这样你就有了一个可以脱离PyCharm界面、在命令行或自动化流程中一键运行所有unittest测试的脚本了。

