簡體   English   中英

“py.test”vs“pytest”命令

[英]“py.test” vs “pytest” command

在我的情況下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 Configfrom config import Config更改為絕對的from app.config import Config ,例如from app.config import Config

2)使用python3 -m app.app運行燒瓶

3)現在pytestpy.test工作正常

伙計們,非常感謝你們的幫助!


更新2

這變得很奇怪......當使用絕對導入時,使用-m選項運行python並使用debug=True運行燒瓶,那么werkzeug庫不會按預期重新加載源:

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工作正常。

要更詳細地回答關於實際命令的問題(意味着在命令行上調用工具):

py.test調用是舊的和破壞的聯合。 pytest是新的pytest (從3.0開始)。 我猜想py.testpytest調用會共存很長時間,但在某些時候py.test可能會被棄用。 所以我建議#dropthedot

[...]所以從pytest 3.0我們將支持並建議使用pytest作為主命令而不是py.test。 將來我們可能會棄用py.test甚至可能刪除它。

- 戴夫亨特

向后兼容性對於pytest社區來說是一個非常重要的問題,因此舊的方式可能永遠不會消失,無論如何都要保持它的維護負擔(它只是定義為setup.py中的不同入口點)。

使用pytest ...甚至更好的python -m pytest ...

你可以忘記舊的名字,如果你仍然在某個地方發現它,這顯然是一個錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM