aiohttp及asyncio的简单使用
aiohttp是一个异步的请求库,类似于requests库的异步版本,asyncio是一个python标准库自带的协程框架,可以用于高并发异步编程,两者结合使用效果十分理想,可以用于编写测试接口的高并发脚本。
aiohttp 调用get类型接口实例
async def aiohttpget_test(url, num=0):
'''
get 方法测试
:param url:
:param num:
:return:
'''
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0',
}
params = {"num": num}
async with aiohttp.ClientSession() as session:
async with session.get(url, params=params, headers=headers) as resp:
return await resp.json()
asyncio调用aiohttp方法
async def main_single(url):
'''
单次调用main方法
:return:
'''
task_get = asyncio.create_task(aiohttpget_test(url=url, num=1))
await task_get
按顺序并发执行任务
async def main_gather(url):
'''
按顺序并发执行任务main方法
:return:
'''
task_gets = [asyncio.create_task(aiohttpget_test(url=url, num=i)) for i in range(100)]
done = await asyncio.gather(*task_gets)
print(len(done))
for d in done:
print(d)
无序并发执行任务
async def main_wait(url):
'''
无序并发执行任务main方法
:return:
'''
task_gets = [asyncio.create_task(aiohttpget_test(url=url, num=i)) for i in range(500)]
done, pending = await asyncio.wait(task_gets, timeout=1, return_when="ALL_COMPLETED")
print(len(done))
for d in done:
print(d.result())
最后在main方法中调用执行这些方法,接口可以httpbin搭建测试服务
if __name__ == '__main__':
url = "http://192.168.127.133/get"
asyncio.run(main_gather(url))