首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在scope会话中使用pytest-aiohttp fixture

如何在scope会话中使用pytest-aiohttp fixture
EN

Stack Overflow用户
提问于 2017-08-17 21:17:42
回答 1查看 1.3K关注 0票数 8

我正在尝试为aiohttp应用程序编写测试。我正在使用pytest-aiohttp插件。我的目的是在第一次测试执行之前初始化并运行一次应用程序,并在所有测试完成后拆除。诸如'loop','test_client‘之类的pytest-aiohttp fixture非常有用,但是它们有scope='function’,这意味着我不能在我自己的fixture中使用它们。有没有办法解决这个问题?如果没有,那么在不使用内置夹具的情况下实现我的目标的合适方法是什么?我的代码如下(conftest.py)

代码语言:javascript
复制
@pytest.fixture()
def client(test_client, loop):
    app = init(loop)
    return loop.run_until_complete(test_client(app))

然后,我的测试将使用以下内容

代码语言:javascript
复制
class TestGetAlerts:
async def test_get_login_url(self, client):
    resp = await client.get('/api/get_login_url')
    assert resp.status == 200

所以我的fixture 'client‘在每次测试时都会运行,这是我想要避免的

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-18 06:42:44

test_client fixture是一个简单的包装器,包装了来自aiohttp.test_utilsTestServerTestClient类。

您可以使用'session'作用域定制您自己的fixture版本。

但这种方式也有自己的问题:测试应该是隔离的,在实践中,这意味着为每个测试重新创建事件循环。

但是会话级别的aiohttp应用程序不支持这样的循环重建。因此,应用程序应该在单独的线程中运行,这使得编写测试断言变得更加困难。

在我的实践中,aiohttp应用程序立即启动,但是像DB模式迁移和DB fixture应用这样的事情需要时间。这些活动可以在会话范围内轻松实现,作为单独的fixture,但是应用程序的启动/停止应该在每个测试中执行。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45736201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档