前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AIOHTTP的实战(一)

AIOHTTP的实战(一)

作者头像
无涯WuYa
发布2020-07-24 14:57:07
1.3K0
发布2020-07-24 14:57:07
举报

aiohttp是基于asyncio和Python的异步HTTP客户端以及服务器,在这里主要介绍aiohttp在客户端应用请求中的案例应用和案例实战。在使用前需要安装该第三方的库,安装的命令为:

代码语言:javascript
复制
pip3 install aiohttp

安装成功后可以直接使用。在Python的异步编程模式中,特别是想使用,最好保持Python版本是在Python3.5以上的版本,这是因为asyncio是在Python3.4的版本中开始引入。

我们使用aiohttp发送一个简单的网络请求,如请求http://httpbin.org/get,获取到它的响应数据,那么首先需要定义协程函数,在函数中,在函数名前加关键字async,这样的函数我们称为协程函数。先来看一个案例,源码如下:

代码语言:javascript
复制
#!/usr/bin/env python
#!coding:utf-8
import  asyncio
import  aiohttp

async  def getPage():
   async  with aiohttp.ClientSession() as session:
      async with session.get(url='http://httpbin.org/get') as r:
         print(r.status)
         print(await r.text())

if __name__ == '__main__':
   loop=asyncio.get_event_loop()
   loop.run_until_complete(getPage())

代码

代码语言:javascript
复制
loop=asyncio.get_event_loop()
loop.run_until_complete(getPage())

是创建事件循环,然后把任务添加到事件循环中进行执行,当然在异步中,与同步到区别是同步只能是等待一个任务执行结束后,再执行另外一个任务,而在异步到,遇到IO的堵塞立刻就会切换到其他的任务。相对而言,在微服务架构中它的通信模式也是基于同步通信和异步通信,而同步通信最大的缺陷是可能导致任务堵塞,如请求前面的任务请求超时,导致后面的任务会堵塞中,而异步的通信会立刻MQ来进行管理,客户端以及服务端也不会知道对方的存在,客户端和服务端只需要关注自己的MQ消息即可。这方面的知识体系在《Python接口自动化测试实战》课程体系里面有讲到,这里不再详细的扩散。刚才说到事件循环,那么也就意味着如果有批量的任务,那么批量的任务可以放到事件循环中然后进行执行,见如下案例源码:

代码语言:javascript
复制
#!/usr/bin/env python
#!coding:utf-8
import  asyncio
import  aiohttp
import  time


async  def get_httpbin():
   async  with aiohttp.ClientSession() as session:
      async with session.get(url='http://httpbin.org/get') as r:
         print(r.status)
         print(await r.text())

async  def get_taobao():
   async  with aiohttp.ClientSession(connector=aiohttp.TCPConnector(ssl_context=False)) as session:
      async with session.get(url='https://www.taobao.com/') as r:
         print(r.status)

if __name__ == '__main__':
   task_list=[
      get_httpbin(),
      get_taobao()
   ]
   asyncio.run(asyncio.wait(task_list))

下面演示aiohttp在post请求的应用,其实aiohttp发送post请求和requests发送post请求在参数上都是一样的,唯一的区别就是aiohttp是基于异步的,还是以一个登录的案例作为案例来演示aiohttp在发送post请求中的应用,源码如下:

代码语言:javascript
复制
#!/usr/bin/env python
#!coding:utf-8
import  asyncio
import  aiohttp

async def login():
   '''发送post的请求方法'''
   async with aiohttp.ClientSession() as session:
      async with session.post(
            url='http://127.0.0.1:8000/auth/login',
            json={"username":"134*****195","password":"asd888"},
            headers={'Content-Type':'application/json;charset=UTF-8'}) as r:
         print(r.status)
         print(await r.json())

if __name__ == '__main__':
   asyncio.run(login())

执行代码成功后就会显示登录成功后的响应结果信息。

后续会持续介绍AIOHTTP的案例实战应用和服务端稳定性测试的知识体系。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档