2017-08-29 22 views
6

我想为以下异步,等待方法写pytest,但我无处可去。Python pytest案例的异步和等待方法

class UserDb(object): 
    async def add_user_info(self,userInfo): 
     return await self.post_route(route='users',json=userInfo) 

    async def post_route(self,route=None,json=None,params=None): 
     uri = self.uri + route if route else self.uri  
     async with self.client.post(uri,json=json,params=params) as resp:    
     assert resp.status == 200 
     return await resp.json() 

有人可以帮助我吗? TIA

+0

你使用aiohttp? – Juggernaut

+0

@Juggernaut:是的,我正在使用aiohttp。 –

回答

6

pip install pytest-aiohttp,然后创建这样

from pytest import fixture 

def make_app(): 
    app = Application() 
    # Config your app here 
    return app 

@fixture 
def test_fixture(loop, test_client): 
    """Test fixture to be used in test cases""" 
    app = make_app() 
    return loop.run_until_complete(test_client(app)) 

夹具现在写你的测试

f = test_fixture 

async def test_add_user_info(f): 
    resp = await f.get('/') 
    assert resp.status == 200 
    assert await resp.json() == {'some_key': 'some_value'} 

此外,我注意到你的add_user_info协同程序不返回任何东西。 更多的信息是here

+0

我是pytest的初学者。你能给我更多关于配置应用程序和测试装置的信息吗? –

+1

配置是可选的。它包括添加会话管理或数据库配置管理等中间件。简单地创建你的测试用例,并使用'test_fixture'作为你的测试用例的参数。就像我在答案中提到的那样。并在终端中运行'py.test test_module.py'。 – Juggernaut

+1

明白了。非常感谢 :) –