首页 > 解决方案 > $ pytest 和 $ python -m pytest 测试之间的区别

问题描述

我想了解跑步之间有什么区别:

$ pytest

$ python -m pytest tests

我在 Mac 上的虚拟环境中工作。第一个解决方案给了我一个错误:

ModuleNotFoundError: No module named 'app'  

第二个解决方案工作正常。

为什么第二个解决方案有效而第一个解决方案无效?我怎样才能使它与 just 一起工作$ pytest

我的文件夹结构:

├── app.py   
├── requirements.txt  
├── templates  
├── tests  
│   ├── conftest.py  
│   ├── functional  
│   │   ├── __init__.py  
│   │   └── test_s.py   
│   └── unit   
│       ├── __init__.py   
│       └── test_app.py   
└── venv   

在 test_app.py 中,这一行失败:

from app import app

标签: pythonpytest

解决方案


python -m pytest将当前目录添加到 sys.path,即允许您从那里导入模块。

这暗示有些东西 - 让我们称之为 - 对于您的目录结构来说不是最佳的。

为什么这可能不是一件好事,您可以阅读这篇精彩的博客文章

https://blog.ganssle.io/articles/2019/08/test-as-installed.html

我还写了一篇关于这个主题的简短博客文章:

https://jugmac00.github.io/til/what-is-the-difference-between-invoking-pytest-and-python-m-pytest/


推荐阅读