2017-08-29 45 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

明白了。非常感謝 :) –