如何解决选择从哪个目录运行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中运行带有“ play”符号的测试非常方便。问题是pycharm中的play符号似乎在tests目录之外运行了pytest,而gitlab-ci中的pytest不在根目录中了。
我无法在pytest中找到适当的选项来更改pytest在其中启动的“基本目录”。 pytest确实提供了“ rootdir”选项(https://docs.pytest.org/en/stable/customize.html)
,但这似乎并不能满足我的要求。
我发现一个解决方法是将“ cd test”参数传递给我的.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 固定装置加载许多测试通用的内容(大概是 config.yaml)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。