py.test
命令在我的情况下失败,而pytest
运行完全正常。
我使用pytest-flask插件:
platform linux -- Python 3.5.2, pytest-3.0.2, py-1.4.31, pluggy-0.3.1
rootdir: /home/sebastian/develop/py/flask-rest-template, inifile:
plugins: flask-0.10.0
当我调用$ py.test
时,我收到以下错误:
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/_pytest/config.py", line 301, in _getconftestmodules
return self._path2confmods[path]
KeyError: local('/home/sebastian/develop/py/flask-rest-template')
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/_pytest/config.py", line 332, in _importconftest
return self._conftestpath2mod[conftestpath]
KeyError: local('/home/sebastian/develop/py/flask-rest-template/conftest.py')
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/_pytest/config.py", line 338, in _importconftest
mod = conftestpath.pyimport()
File "/usr/local/lib/python3.5/dist-packages/py/_path/local.py", line 650, in pyimport
__import__(modname)
File "/usr/local/lib/python3.5/dist-packages/_pytest/assertion/rewrite.py", line 207, in load_module
py.builtin.exec_(co, mod.__dict__)
File "/home/sebastian/develop/py/flask-rest-template/conftest.py", line 2, in <module>
from app.app import create_app
File "/home/sebastian/develop/py/flask-rest-template/app/app.py", line 1, in <module>
from flask import Flask
ImportError: No module named 'flask'
ERROR: could not load /home/sebastian/develop/py/flask-rest-template/conftest.py
这是我的实际conftest.py
文件:
import pytest
from app.app import create_app
@pytest.fixture
def app():
app = create_app()
return app
我的项目结构如下:
.
├── app
│ ├── __init__.py
│ ├── app.py
│ └── config.py # flask configuration objects
├── conftest.py # pytest configruation
├── requirements.txt
├── ...
└── tests
└── ...
那么,这两个命令有什么区别?为什么一个失败而另一个失败?
更新1
1)我必须将相对导入from .config import Config
或from config import Config
更改为from app.config import Config
2)使用python3 -m app.app
3)现在pytest
和py.test
正常工作
非常感谢你的帮助,伙计们!
更新2
这很奇怪......当使用绝对导入时,使用-m
选项运行python并使用debug=True
运行烧瓶,那么werkzeug
库不会按预期重新加载源:< / p>
http://chase-seibert.github.io/blog/2015/06/12/flask-werkzeug-reloader-python-dash-m.html
https://github.com/pallets/werkzeug/issues/461
https://github.com/pallets/flask/issues/1246
这帮助了我app/app.py
:
if __name__ == '__main__':
app.run(debug=True, use_reloader=False)
然后python -m app.app
正常工作。
答案 0 :(得分:45)
更详细地回答有关实际命令的问题(意味着在命令行上调用工具):
py.test
调用是旧的和破坏的联合。 pytest
是新的热点(自3.0起)。我猜py.test
和pytest
次调用将共存很长时间,但在某些时候py.test
可能会被弃用。所以我建议#dropthedot。
[...]所以从pytest 3.0我们将支持并建议使用pytest作为主命令而不是py.test。将来我们可能会弃用py.test甚至可能删除它。
向后兼容性对于pytest社区来说是一个非常重要的问题,因此旧的方式可能永远不会消失,无论如何都要保持它的维护负担不大(它只是被定义为一个不同的入口点) setup.py)。
答案 1 :(得分:4)
使用pytest ...
甚至更好python -m pytest ...
。
你可以忘记旧名称,如果你仍然在某个地方发现它,它显然是一个错误。