选择从哪个目录运行pytest



我正在使用Pytest、Pycharm和gitlab-ci开发一个Python应用程序。

我的项目文件夹结构如下:

├── config
│   └── config.yaml
├── models
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-38.pyc
│   │   └── models.cpython-38.pyc
│   └── models.py
├── modules
│   ├── __init__.py
│   ├── sliceconfigbuilder.py
│   └── slicefailoverhandler.py
├── slicefailover.py
└── test
├── __init__.py
├── config
│   ├── 50-project.conf
│   ├── hosts
│   ├── slicefailoverconfig.yaml
│   ├── systemconfig-1.xml
│   ├── systemconfig-12.xml
│   └── systemconfig.xml
├── locks
├── original
│   └── systemconfig.xml
├── test_sliceconfigbuilder.py
└── test_slicefailoverhandler.py

我的一些(py(测试涉及加载一个外部yaml文件,即config.yaml。此外,config.yaml指定了在测试期间加载的更多外部文件的路径。

我的问题是找出正确的相对路径,所以这在Pycharm和gitlab-ci中都有效。用";播放";符号出pycharm非常方便。问题是pycharm中的play符号似乎在tests目录之外运行pytest,而gitlab-ci中的pytest则在根目录之外运行。

我在pytest中找不到合适的选项来更改";基本目录";pytest在其中启动。pytest确实提供了";rootdir";选项(https://docs.pytest.org/en/stable/customize.html),但这似乎不能满足我的要求。

我发现的一个变通方法是通过";cd测试";与我的.gitlab-ci.yaml争论,但由于这似乎是一个常见的问题,我正在寻找一个更好的解决方案——如何处理这个问题,以及如何在整个测试过程中处理外部路径。

值得一提的是,如果将其添加到所有测试文件的顶部,那么这里有一些样板文件可以实现这一点;"动态改变目录";,通过为您提供一个全局,您可以使用该全局作为文件路径的前缀。

# --- Globals for config
if os.path.exists("config/config.yaml"):
# - Running from git
NAV2ROOT = "config/"
else:
# - Running directly from file in PyCharm
NAV2ROOT = "../config/"
CONFIG_PATH = os.path.join(NAV2ROOT,config.yaml)

我同意在PyCharm中用不同的根单独运行测试文件(带有播放符号(的选项是有用的,而且它似乎应该存在,但AFAIK没有。

更普遍地说,这似乎是PyCharm&Pytest使用conftest.py fixture来加载许多测试中常见的东西(可能是config.yaml(。

最新更新