加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

如何使用范围会话pytest-aiohttp fixtures

发布时间:2020-12-16 22:32:28 所属栏目:Python 来源:网络整理
导读:我正在尝试为aiohttp应用程序编写测试.我正在使用pytest-aiohttp插件.我的目的是在第一次测试执行之前初始化并运行应用程序,并在所有测试完成后拆除.像loop,test_client这样的pytest-aiohttp灯具非常有用,但它们有scope =function,这意味着我不能在我自己的

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

@pytest.fixture()
def client(test_client,loop):
    app = init(loop)
    return loop.run_until_complete(test_client(app))

我的测试然后使用它

class TestGetAlerts:
async def test_get_login_url(self,client):
    resp = await client.get('/api/get_login_url')
    assert resp.status == 200

所以我的夹具“客户端”运行每次测试,这是我想要避免的

最佳答案
test_client fixture是一个简单的包装,来自aiohttp.test_utils的TestServer和TestClient类.

您可以使用“会话”范围制作自己的灯具版本.

但这种方式有自己的问题:测试应该是隔离的,实际上它意味着每个测试的事件循环重新创建.

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

在我的实践中,aiohttp应用程序立即启动,但DB模式迁移和DB fixture应用等需要时间.这些活动可以作为单独的固定装置在会话范围内轻松实现,但应在每次测试中执行应用程序启动/停止.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读