我有一个项目,该项目由源代码和测试代码组成。源代码存储在一个目录中,而我的测试存储在另一个目录中。
root
|- src
| |- pkg
| | | - __init__.py
| | | - src1.py
| | | - src2.py
|- test
| |- tests_for_pkg
| | | - __init__.py
| | | - first_test.py
| | | - second_test.py
运行测试时,需要将所有源代码导入_test.py
文件中。
from pkg.src1 import src1
from pkg.src2 import src2
我想使用python -m pytest <tests>
或运行脚本来一次运行所有测试,但是我不断收到关于导入的错误。
之前,我在Eclipse IDE中遇到了Python路径问题,因此我选择使用相对路径,并根据文件夹结构中的相对路径将它们作为外部库添加到Python路径中。
例如,我的包含路径为:
../src/pkg
如何在Python命令行中/作为Python脚本实现这样的相对路径?
编辑:使用提供的链接,我可以通过添加一个conftest.py
文件并附加代码的位置来使测试正常进行。
但是,我的实际项目具有如下庞大的源代码树:
root
| - projectdir
| | - projectone
| | | - datedir
| | | | - trunk
| | | | | - sd
| | | | | | - code
| | | | | | | src
| | | | | | | - pkg
| | | | | | | | - __init__.py
| | | | | | | | - src1.py
| | | | | | | | - src2.py
| | | | | | - model
| | | | | | | - testdir
| | | | | | | | - testware
| | | | | | | | | - unittest_pkg
| | | | | | | | | | - test
| | | | | | | | | | | - tests_for_pkg
| | | | | | | | | | | | - first_test.py
| | | | | | | | | | | | - second_test.py
conftest.py
第一个源代码树(允许我从测试目录运行测试):
import sys
sys.path.append('..\..\src')
conftest.py
第二个源代码树(无法从任何目录运行任何测试):
import sys
sys.path.append('..\..\..\..\..\..\..\code\src')
当我使用与以前完全相同的方法时,它不起作用。 conftest.py
是否可以限制搜索src
目录的范围?
编辑:在this问题的帮助下解决了此问题。
我最终制作了一个批处理脚本,该脚本查找以test.py
结尾的所有文件并运行它们。
@echo off
for /r %%i in (*test.py) do (
setlocal
set PYTHONPATH=../../../src/pkg
python -m pytest --junitxml=%%~pi/JUnit_%%~ni.xml %%i
endlocal
)
@RD /S /Q .pytest_cache
答案 0 :(得分:3)
为什么在运行pytest之前不将当前目录添加到PYTHONPATH
?
export PYTHONPATH="$PYTHONPATH:$PWD"
或者,您可以通过以下方式将目录添加到测试.py
中的PYTHONPATH中:
import sys
import os
sys.path.append(os.path.abspath('../src/pkg'))