2017-08-29 2 views
6

J'essaie d'écrire pytest pour l'async suivant, j'attends des méthodes mais je n'arrive à rien.Python pytest cas pour async et attendre la méthode

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() 

Quelqu'un peut-il m'aider? TIA

+0

utilisez-vous aiohttp? – Juggernaut

+0

@Juggernaut: oui, j'utilise aiohttp. –

Répondre

6

pip install pytest-aiohttp, puis créez un appareil comme celui-ci

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)) 

Maintenant, écrivez vos tests

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'} 

J'ai aussi remarqué votre add_user_info coroutine est rien de retour. Plus d'infos est here

+0

Je suis un débutant à pytest. Pouvez-vous me donner plus d'informations sur la configuration de l'application et des appareils de test? La configuration –

+1

est facultative. il s'agit d'ajouter des middle-wares comme la gestion de session ou la gestion de configuration db. Créez simplement vos cas de test et utilisez 'test_fixture' comme argument pour votre test. comme celui que j'ai mis dans la réponse. et exécutez 'py.test test_module.py' dans votre terminal. – Juggernaut

+1

l'ai eu. Merci beaucoup :) –