Pytest - python testing with asyncio
是否可以从函数将执行返回到
我正在尝试使用
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | @pytest.mark.asyncio async def test_async1(event_loop): print('start 1') res = event_loop.create_task( send_async_request("http://test.com", limit=1000))) # here I need to return execution to event loop and continue only after getting response from send_async_request function print('end1',res) @pytest.mark.asyncio async def test_async2(event_loop): print('start 2') res = event_loop.create_task( send_async_request("http://test2", limit=1000))) # here I need to return execution to event loop and continue only after getting response from send_async_request function print('end2', res) |
1 2 3 4 5 6 7 8 | @asyncio.coroutine def send_async_request(url, method='GET'): with aiohttp.ClientSession() as session: resp = yield from session.get(url, timeout=60) if resp.status == 200: return resp.status, response else: return resp.status, False |
将测试标记为
1 2 3 4 | @pytest.mark.asyncio async def test_sleep(event_loop): result = await asyncio.sleep(1, result=3, loop=event_loop) assert result == 3 |
编辑:另一个示例,具有多个
1 2 3 4 5 6 | @pytest.mark.asyncio async def test_multiple_sleep(event_loop): tasks = [event_loop.create_task(asyncio.sleep(1, result=x)) for x in range(10)] results = await asyncio.gather(*tasks) assert results == list(range(10)) |