问题标签 [pytest-asyncio]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
9105 浏览

python - Pytest 跳过测试说“未安装异步”

测试以下代码时

pytest -vvv在项目环境中运行时收到的警告:

我确实pytest-asyncio安装了。我通过pytest --trace-config在项目的虚拟环境中运行进行了验证

0 投票
2 回答
3969 浏览

python - 使用 @pytest.fixture(scope="module") 和 @pytest.mark.asyncio

我认为下面的示例是一个非常常见的用例:

  1. 一次创建到数据库的连接,
  2. 传递此连接以测试哪些插入数据
  3. 将连接传递给验证数据的测试。

改变@pytest.fixture(scope="module")原因的范围ScopeMismatch: You tried to access the 'function' scoped fixture 'event_loop' with a 'module' scoped request object, involved factories

此外,test_insertandtest_find协程不需要 event_loop 参数,因为通过传递连接已经可以访问循环。

任何想法如何解决这两个问题?

0 投票
3 回答
1966 浏览

pytest - 同时运行测试

我想使用 asyncio (/curio/trio) 和 pytest 同时运行几个测试,但我找不到任何相关信息。我需要自己安排吗?如果我这样做了,有没有办法有一个很好的输出来分隔(子)测试用例?

这是我正在尝试的一个小玩具示例:

0 投票
0 回答
246 浏览

pytest - 如何使用 pytest 对 asyncio call_later 进行单元测试?

我正在编写一些基于异步的代码,并且正在尝试完成预定的操作。我想为我的代码编写一些单元测试。对涉及call_later()动作的代码进行单元测试的“好”方法是什么?我想避免实际等待几秒钟,所以我需要以某种方式模拟时间。

最小的例子:

这个例子有多个问题:

  • 由于run_forever(),它不会在do_more_stuff()被调用后终止。我想一直event_loop运行,直到没有更多的回调计划。这可能吗?

  • 即使我将来破解并使用event_loop.run_until_complete(fut),这个测试仍然需要 2 秒才能完成。我只想运行do_stuff()和检查预定的回调;或提前时间来加快回调的触发。这些都可能吗?

0 投票
2 回答
5265 浏览

python-3.x - 'pytest.mark.asyncio' 用于什么用途?

我不明白装饰器可以用于哪些目的@pytest.mark.asyncio

我尝试在安装了插件的情况下运行以下代码片段,pytestpytest-asyncio它失败了,所以我得出结论 pytest 在没有装饰器的情况下收集测试协程。为什么会这样存在?

0 投票
1 回答
566 浏览

python - Django-Channels 2 Communicator 接收输出()不起作用

我有一个基本的消费者,它从 websocket 接收消息,然后将这些消息广播到消息中指定的通道。

消费者.py

然后我想用 pytest 和 pytest-asyncio 像这样测试它

我的理解是,communicator.receive_output()将检索消费者发送到通道层的事件。但是我收到以下错误:

在我的测试中我需要做更多的设置/配置吗?还是我用receive_output()错了?

我正在InMemoryChannelLayer用于测试和所有最新发布的版本。

0 投票
0 回答
504 浏览

python - pytest-asyncio 猴子补丁 requests.post 不起作用

我正在尝试对 test_app 中的 requests.post 做猴子补丁,我正在使用来自 quart(rest-api) 的 test_client ,它是 async 。我从响应中得到的对象是好的,但是测试崩溃了

结果是:

即使来自模拟的值是好的值,它也会失败,这意味着函数将好的值返回给断言

0 投票
1 回答
1849 浏览

python - 如何使用 pytest 中的 setUp 作为异步方法?

我有以下代码:

测试通过,因为它根本没有进入测试。它只说:

RuntimeWarning:从未等待协程“TestDummy.setUp”

如何使设置功能异步?

观察:如果我从 TestCase 中删除继承,测试会运行,但之前不会进入 setUp 函数,这是必需的。

0 投票
0 回答
145 浏览

python - pytest 在启动时标记异步补丁默认事件循环

我有my_module.py我想测试的。

在模块顶级代码中,我有:

测试1.py:

问题是测试冻结,因为设置的 event_looppytest-asynciomymodule.pyevent loop 不一样。

这可以通过移动import mymodule到测试函数内部来解决,但我不喜欢这样做。

pytest 有没有办法在导入和执行测试代码之前修补默认事件循环?

0 投票
0 回答
1322 浏览

python - aiohttp_client - RuntimeError:超时上下文管理器应该在任务中使用

我在做什么

我正在通过构建一个 REST api 来学习 aiohttp,我正在使用 Pytest(及其 async 和 aiohttp 插件)对其进行测试。

对于我的第一个测试(我从一开始就使用 TDD),我有以下代码:

  • aiohttp_client是来自的客户端夹具pytest-aiohttp
  • init_test_app是一个基本上反映了我将要构建的应用程序的夹具
  • create_test_user_table是我在测试数据库中为用户创建表的装置

它出了什么问题

我的第一个测试是在上面代码块的最后一行抛出以下运行时错误:

从错误消息中,我了解到客户端正在尝试使用异步超时上下文管理器,但这失败了,因为我没有在任务中调用它。

我不知道我的推论是否正确。

而且,我对 asyncio 不太满意,不知道如何解决这个问题。

如果有人告诉我出路,我将不胜感激。


更多信息

这是我的测试文件的源代码:

这是运行时错误的完整跟踪(以及弃用警告 - 我也会很感激获得帮助:))