我正在尝试为aiohttp应用程序编写测试。我正在使用pytest-aiohttp插件。我的目的是在第一次测试执行之前初始化并运行一次应用程序,并在所有测试完成后拆除。诸如'loop','test_client‘之类的pytest-aiohttp fixture非常有用,但是它们有scope='function’,这意味着我不能在我自己的fixture中使用它们。有没有办法解决这个问题?如果没有,那么在不使用内置夹具的情况下实现我的目标的合适方法是什么?我的代码如下(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所以我的fixture 'client‘在每次测试时都会运行,这是我想要避免的
发布于 2017-08-18 06:42:44
test_client fixture是一个简单的包装器,包装了来自aiohttp.test_utils的TestServer和TestClient类。
您可以使用'session'作用域定制您自己的fixture版本。
但这种方式也有自己的问题:测试应该是隔离的,在实践中,这意味着为每个测试重新创建事件循环。
但是会话级别的aiohttp应用程序不支持这样的循环重建。因此,应用程序应该在单独的线程中运行,这使得编写测试断言变得更加困难。
在我的实践中,aiohttp应用程序立即启动,但是像DB模式迁移和DB fixture应用这样的事情需要时间。这些活动可以在会话范围内轻松实现,作为单独的fixture,但是应用程序的启动/停止应该在每个测试中执行。
https://stackoverflow.com/questions/45736201
复制相似问题