前言
requests是Python发送接口请求非常好用的一个三方库,由K神编写,简单,方便上手快。但是requests发送请求是串行的,即阻塞的。发送完一条请求才能发送另一条请求。
为了提升测试效率,一般我们需要并行发送请求。这里可以使用多线程,或者协程,gevent或者aiohttp,然而使用起来,都相对麻烦。
grequests是K神基于gevent+requests编写的一个并发发送请求的库,使用起来非常简单。
安装方法: pip install gevent grequests
项目地址:https: / / github. com/ spyoungtech/ grequests
grequests简单使用
首先构造一个请求列表,使用grequests.map()并行发送,得到一个响应列表。示例如下。
import grequests
req_list = [ # 请求列表
grequests. get ( 'http://httpbin.org/get?a=1&b=2' ) ,
grequests. post ( 'http://httpbin.org/post' , data= { 'a' : 1 , 'b' : 2 } ) ,
grequests. put ( 'http://httpbin.org/post' , json= { 'a' : 1 , 'b' : 2 } ) ,
]
res_list = grequests. map ( req_list) # 并行发送,等最后一个运行完后返回
print ( res_list[ 0 ] . text) # 打印第一个请求的响应文本
grequests支持get、post、put、delete等requests支持的HTTP请求方法,使用参数和requests一致,发送请求非常简单。
通过遍历res_list可以得到所有请求的返回结果。
grequests和requests性能对比
我们可以对比下requests串行和grequests并行请求100次github.com的时间,示例如下。
使用requests发送请求
import requests
import time
start = time. time ( )
res_list = [ requests. get ( 'https://github.com' ) for i in range ( 100 ) ]
print ( time. time ( ) - start)
实际耗时约100s+
使用grequests发送
import grequests
import time
start = time. time ( )
req_list = [ grequests. get ( 'https://github.com' ) for i in range ( 100 ) ]
res_list = grequests. map ( req_list)
print ( time. time ( ) - start)
实际耗时约3.58s
异常处理
在批量发送请求时难免遇到某个请求url无法访问或超时等异常,grequests.map()方法还支持自定义异常处理函数,示例如下。
import grequests
def err_handler ( request, exception) :
print ( "请求出错" )
req_list = [
grequests. get ( 'http://httpbin.org/delay/1' , timeout= 0.001 ) , # 超时异常
grequests. get ( 'http://fakedomain/' ) , # 该域名不存在
grequests. get ( 'http://httpbin.org/status/500' ) # 正常返回500 的请求
]
res_list = grequests. map ( reqs, exception_handler= err_handler)
print ( res_list)
运行结果:
请求出错
请求出错
[ None, None, < Response [ 500 ] > ]
我是个自动化测试人员,上面是我收集的一些视频资源,在这个过程中帮到了我很多。如果你不想再体验一次自学时找不到资料,没人解答问题,坚持几天便放弃的感受的话,可以加入我们扣扣群【313782132 】,里面有各种软件测试资源和技术讨论。
软件测试是IT相关行业中最容易入门的学科~不需要开发人员烧脑的逻辑思维、不需要运维人员24小时的随时待命,需要的是细心认真的态度和IT相关知识点广度的了解,每个测试人员从入行到成为专业大牛的成长路线可划分为:软件测试、自动化测试、测试开发工程师 3个阶段。
如果你不想再体验一次自学时找不到资料,没人解答问题,坚持几天便放弃的感受的话,可以加我们的软件测试交流群,里面有各种软件测试资料和技术交流。