Le site py.test
échoue dans mon cas, alors que pytest
fonctionne très bien.
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'invoque $ py.test
Je reçois 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
C'est mon actuel conftest.py
fichier :
import pytest
from app.app import create_app
@pytest.fixture
def app():
app = create_app()
return app
La structure de mon projet est la suivante :
.
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 pas l'autre ?
mise à jour 1
1) J'ai dû changer mes importations relatives from .config import Config
ou from config import Config
à ceux qui sont absolus comme from app.config import Config
2) Faire tourner le ballon avec python3 -m app.app
3) maintenant pytest
y py.test
travail normal
Merci beaucoup pour votre aide, les amis !
actualisation 2
Cela devient bizarre... lors de l'utilisation d'importations absolues, l'exécution de python avec la commande -m
et flask avec debug=True
alors le 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 __name__ == '__main__':
app.run(debug=True, use_reloader=False)
Entonces python -m app.app
fonctionne bien.
6 votes
pytest
est la commande nouveau et vous avez probablement une ancienne version de pytest qui traîne.1 votes
Merci pour l'astuce ! Je vais donc utiliser uniquement
pytest
à l'avenir...0 votes
Qu'est-ce que
which pytest
ywhich py.test
dire ?0 votes
/usr/local/bin/py.test
et/usr/local/bin/pytest
. Tous deux sont accompagnés depytest-3.0.2-py2.py3-none-any.whl
quand j'installe commesudo pip3 install pytest
.0 votes
Ha ! C'est une question d'importations relatives... Quand je fais
from .config import Config
puispytest
fonctionne bien. Mais lors de l'importation commefrom config import Config
qu'il échoue...0 votes
Mais pour faire fonctionner l'application
python app/app.py
J'ai besoinfrom config import Config
. Comment puis-je faire fonctionner les deux (flask et pytest) ?0 votes
Mais cela ne fonctionne même pas avec
pip install -e .
oupip3 install -e .
...0 votes
Hmm sry... Je n'y arrive pas. Quand je le fais
from app.config import Config
Je reçoisImportError: No module named 'app.config'; 'app' is not a package
.0 votes
app
n'est pas reconnu comme un paquet, bien qu'il contienne un fichier__init__.py
0 votes
Merci à tous pour votre aide ! Je l'ai... donc je dois vraiment le faire tourner toujours comme ça :
python3 -m app.app
comme mentionné dans stackoverflow.com/questions/16981921/ . Ainsi, avec des importations absolues comme celle-cifrom app.config import Config
qu'égalementpy.test
fonctionne très bien.0 votes
J'utilise
python3 -u -m pytest --color=auto
et ça marche comme sur des roulettes.