La commande py.test
Échoue dans mon cas, tandis que pytest
fonctionne parfaitement.
J'utilise le plugin 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
Lorsque j'appelle $ py.test
, J'obtiens l'erreur suivante:
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
Voici mon fichier conftest.py
Réel:
import pytest
from app.app import create_app
@pytest.fixture
def app():
app = create_app()
return app
Ma structure de projet est comme:
.
├── app
│ ├── __init__.py
│ ├── app.py
│ └── config.py # flask configuration objects
├── conftest.py # pytest configruation
├── requirements.txt
├── ...
└── tests
└── ...
Alors, quelle est la différence entre les deux commandes? Et pourquoi l'un échoue et l'autre non?
mise à jour 1
1) J'ai dû changer mes importations relatives from .config import Config
Ou from config import Config
En absolues comme from app.config import Config
2) Exécution flask avec python3 -m app.app
3) maintenant pytest
et py.test
Fonctionnent normalement
Merci beaucoup pour votre aide, mes amis!
mise à jour 2
Cela devient bizarre ... lors de l'utilisation d'importations absolues, en exécutant python avec l'option -m
Et flask avec debug=True
alors la bibliothèque werkzeug
ne recharge pas les sources comme prévu:
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
Cela m'a aidé dans mon app/app.py
:
if __== '__main__':
app.run(debug=True, use_reloader=False)
Alors python -m app.app
Fonctionne très bien.
Pour répondre plus en détail à la question sur la commande réelle (c'est-à-dire l'invocation de l'outil sur la ligne de commande):
Le py.test
l'invocation est l'articulation ancienne et éclatée. pytest
est la nouvelle nouveauté (depuis 3.0). py.test
et pytest
les invocations coexisteront longtemps je suppose, mais à un moment donné py.test
est peut-être obsolète. Je recommanderais donc # dropthedot .
[...] donc à partir de pytest 3.0, nous prendrons en charge et recommanderons l'utilisation de pytest comme commande principale au lieu de py.test. Il est possible qu'à l'avenir, nous déconseillions py.test et que nous puissions même le supprimer.
La rétrocompatibilité est une préoccupation très importante pour la communauté pytest, donc l'ancienne méthode pourrait ne jamais disparaître et ce n'est pas beaucoup de la charge de la maintenance de la conserver de toute façon (elle est simplement définie comme un point d'entrée différent dans setup.py ).
Utilisation pytest ...
ou mieux encore le python -m pytest ...
.
Vous pouvez oublier l'ancien nom, c'est clairement un bug si vous le repérez quelque part.