Python unittest 如何运行子目录下的测试用例集
目录结构如下
- module_a.py
- module_b.py
- test-suite.py
- tests/
- test_a.py
- test_b.py
请问如何在不使用命令行(它会自动设置 PATH )的情况下,让测试用例跑通?
- 保证 test_a.py 可以 import module_a.py
- 保证调用 python test-suite.py 就可以成功调用所有测试用例
- 保证仅使用 Python 标准库中的东西,无额外依赖
本来以为应该自己能解决的,但是搞了一个多小时还没搞定。在此请教 Python 高手。
PS: 发回复前请确认方案可行哦
问题解决了,就像 @zhuangzhuang1988 给的代码一样:
import unittest suite = unittest.TestLoader().discover("tests") unittest.TextTestRunner(verbosity = 2).run(suite)
- tests/ 目录下不需要放置 __init__.py
- 测试用例 import 模块不需要 from .. import xxx ,直接 import 就行
- 测试用例文件名必须以 test 开头,一般就用驼峰小写方法命名,不能有连字符 (hyphen)
- 每个测试用例是 unittest.TestCase 的一个子类,测试方法名也需要以 test 开头
- 执行的时候运行 python test-suite.py 即可
把结果整理后贴在这里,希望可以帮到和我一样的初学者 :)
----------------------- 以下是精选回复-----------------------
答:pip install nose
答:发回复前谁知道可行不可行啊
a) 你得把这项目打包成 project 再 pip install 之才可以 import project.module_a
b) 你 tests 目录里没有__init__.py
c) 装个 nose 不会怀孕,又不是项目本身的依赖, 2016 年(没拼错吧)了还不用 virtualenv ?
另外你的 test_a.py 里如果需要调用 tests/下面的东西, os.path 或者 os.Path 用的是相对路径么?
答:https://docs.python.org/2.7/library/unittest.html#unittest.TestLoader.discover
答:楼上说得都没啥问题,但是我司的某个项目结构恰好是这样的,没有任何依赖
- test.py
- module
|- a
|- b
-testcases
|-test_a
|-test_b
楼主基础不牢啊
sys.path 第一个就是当前目录,所以在 test_a 里写 import module_a 肯定可以正常执行的
然后你就可以在 test-suite.py 里用 lululau 说的 discover 方法
单独跑 test_a 可以用 python -m unittest testcases.test_a
答:import unittest
tests = unittest.TestLoader().discover('test')
unittest.TextTestRunner(verbosity=2).run(tests)
0条评论