繁体   English   中英

pytest:源文件和测试文件在另一个目录中

[英]pytest: source files and test files in a different directory

我有一个项目,其中包含源代码和测试代码。 源代码存储在一个目录中,而我的测试存储在另一个目录中。

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目录有限制?

编辑:从这个问题的帮助下解决了。

我最终制作了一个批处理脚本,该脚本查找以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 

为什么在运行pytest之前不将当前目录添加到PYTHONPATH

export PYTHONPATH="$PYTHONPATH:$PWD"

或者,您可以通过以下方式将目录添加到test .py的PYTHONPATH中:

import sys
import os
sys.path.append(os.path.abspath('../src/pkg'))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM