Pytest 跳过测试说 "asyncio not installed"
Pytest skips test saying "asyncio not installed"
测试以下代码时
@pytest.mark.asynico
async def test_handle_DATA(mocker):
handle_mock = mocker.MagicMock()
envelope_mock = mocker.MagicMock(mail_from="Test@From", rcpt_tos=["Test@To"], content=b"TestContent")
result = SendToDictHandler.handle_DATA(handle_mock, "TestServer", "TestSession", envelope_mock)
assert result == "250 Message accepted for delivery"
assert email_core.testing_emails_dict == {
"Test@To": {
"from": "Test@From",
"to": ["Test@To"],
"msg": "TestContent",
}
}
我在项目环境中 运行 pytest -vvv
时收到的警告:
PytestWarning: Coroutine functions are not natively supported and have been skipped.
You need to install a suitable plugin for your async framework, for example:
- pytest-asyncio
- pytest-trio
- pytest-tornasync
warnings.warn(PytestWarning(msg.format(pyfuncitem.nodeid)))
我确实安装了 pytest-asyncio
。我在项目的虚拟环境
中通过运行pytest --trace-config
验证
================== test session starts ======================
platform win32 -- Python 3.7.1, pytest-4.4.1, py-1.8.0, pluggy-0.9.0
using: pytest-4.4.1 pylib-1.8.0
...
setuptools
registered plugins:
- pytest-randomly-3.0.0 at \lib\site-packages\pytest_randomly.py
- pytest-mock-1.10.2 at \lib\site-packages\pytest_mock.py
- pytest-asyncio-0.10.0 at \lib\site-packages\pytest_asyncio\plugin.py
active plugins:
- pytest_mock : \lib\site-packages\pytest_mock.py
- asyncio : \lib\site-packages\pytest_asyncio\plugin.py
...
plugins: randomly-3.0.0, mock-1.10.2, asyncio-0.10.0
我会留下这个问题,以防其他人遇到这个问题。我最初的问题是我在标记中拼错了 asyncio
:pytest.mark.asyncio
一旦我确定我需要等待我的回复,所以我不得不将我的测试更改为:
@staticmethod
@pytest.mark.asyncio
async def test_handle_DATA(mocker):
handle_mock = mocker.MagicMock()
envelope_mock = mocker.MagicMock(mail_from="Test@From", rcpt_tos=["Test@To"], content=b"TestContent")
assert "250 Message accepted for delivery" == await SendToDictHandler.handle_DATA(
handle_mock, "TestServer", "TestSession", envelope_mock
)
assert email_core.testing_emails_dict == {
"Test@To": {
"from": "Test@From",
"to": ["Test@To"],
"msg": "TestContent",
}
}
测试以下代码时
@pytest.mark.asynico
async def test_handle_DATA(mocker):
handle_mock = mocker.MagicMock()
envelope_mock = mocker.MagicMock(mail_from="Test@From", rcpt_tos=["Test@To"], content=b"TestContent")
result = SendToDictHandler.handle_DATA(handle_mock, "TestServer", "TestSession", envelope_mock)
assert result == "250 Message accepted for delivery"
assert email_core.testing_emails_dict == {
"Test@To": {
"from": "Test@From",
"to": ["Test@To"],
"msg": "TestContent",
}
}
我在项目环境中 运行 pytest -vvv
时收到的警告:
PytestWarning: Coroutine functions are not natively supported and have been skipped.
You need to install a suitable plugin for your async framework, for example:
- pytest-asyncio
- pytest-trio
- pytest-tornasync
warnings.warn(PytestWarning(msg.format(pyfuncitem.nodeid)))
我确实安装了 pytest-asyncio
。我在项目的虚拟环境
pytest --trace-config
验证
================== test session starts ======================
platform win32 -- Python 3.7.1, pytest-4.4.1, py-1.8.0, pluggy-0.9.0
using: pytest-4.4.1 pylib-1.8.0
...
setuptools
registered plugins:
- pytest-randomly-3.0.0 at \lib\site-packages\pytest_randomly.py
- pytest-mock-1.10.2 at \lib\site-packages\pytest_mock.py
- pytest-asyncio-0.10.0 at \lib\site-packages\pytest_asyncio\plugin.py
active plugins:
- pytest_mock : \lib\site-packages\pytest_mock.py
- asyncio : \lib\site-packages\pytest_asyncio\plugin.py
...
plugins: randomly-3.0.0, mock-1.10.2, asyncio-0.10.0
我会留下这个问题,以防其他人遇到这个问题。我最初的问题是我在标记中拼错了 asyncio
:pytest.mark.asyncio
一旦我确定我需要等待我的回复,所以我不得不将我的测试更改为:
@staticmethod
@pytest.mark.asyncio
async def test_handle_DATA(mocker):
handle_mock = mocker.MagicMock()
envelope_mock = mocker.MagicMock(mail_from="Test@From", rcpt_tos=["Test@To"], content=b"TestContent")
assert "250 Message accepted for delivery" == await SendToDictHandler.handle_DATA(
handle_mock, "TestServer", "TestSession", envelope_mock
)
assert email_core.testing_emails_dict == {
"Test@To": {
"from": "Test@From",
"to": ["Test@To"],
"msg": "TestContent",
}
}