编写装饰器实现python请求错误重试功能
在做接口自动化测试的时候,总会遇到,因连接超时等错误导致,接口脚本失败。
官方给出的方法:
max_retries=5 出错重试5次
注意的是,这个只对DNS,连接错误进行重试。
from requests.adapters import HTTPAdapter
s = requests.Session()
s.mount('http://',HTTPAdapter(max_retries=5))
s.mount('https://',HTTPAdapter(max_retries=5))
s.get('https://www.baidu.com')
自编写装饰器一
from requests.exceptions import ConnectionError
import requests
def retry(**kw):
def war(func):
def w(*args,**kwargs):
try:
ret = func(*args,**kwargs)
except ConnectionError:
kw['reNum'] = int(kw['reNum']) - 1
if kw['reNum'] >=0:
print kw['reNum']
ret = w(*args,**kwargs)
else:
ret = ConnectionError
return ret
return w
return war
自编写装饰器二
from requests.exceptions import ConnectionError def retry(**kw):
def wrapper(func):
def _wrapper(*args,**kwargs):
raise_ex = None
for _ in range(kw['reNum']):
print _
try:
return func(*args,**kwargs)
except ConnectionError as ex:
raise_ex = ex
#raise raise_ex
return _wrapper
return wrapper
使用方法:reNum = 5 代表,出现ConnectionError时最多可重试5次。
@retry(reNum=5)
def demo():
raise ConnectionError
总结:
1.编写装饰器,其实没有那么难,只要掌握方法。 这个可以参考,我之前写的关于装饰器的文章
2.装饰器的通熟解释,就是在函数之前后之后做点什么。通过这个我们可以做很多。
3.关于请求连接错误,重试,装饰器;原理就是做一个循环,只要捕获到有ConnectionError 错误,就进入下一次循环
调用;只要有正确的时候,直接返回函数。
qq技术交流群,期待你的加入:
python|测试|技术交流群:563227894
python|测试|技术交流群:563227894
python|测试|技术交流群:563227894
编写装饰器实现python请求错误重试功能的更多相关文章
- Atitit php java python nodejs错误日志功能的比较
Atitit php java python nodejs错误日志功能的比较 1.1. Php方案 自带 1 1.2. Java解决方案 SLF4J 1 1.3. Python解决方案 自带lo ...
- Flask10 登录模块、表单框架、表单渲染、表单验证、bookie、请求之前钩子、g对象、编写装饰器
from flask import Flask from flask import request from flask import render_template from flask_wtf i ...
- python :编写装饰器
简单装饰器 def log_time(func): # 此函数的作用时接受被修饰的函数的引用test,然后被内部函数使用 def make_decorater(): print('现在开始装饰') f ...
- python装饰器实现HTTP请求耗时和入参返回日志记录
装饰器方法: 1 def decoArgs(server_name): 2 def deco(func): 3 def wrapper(view, request, *args, **kwargs): ...
- [Python之路] 使用装饰器给Web框架添加路由功能(静态、动态、伪静态URL)
一.观察以下代码 以下来自 Python实现简易HTTP服务器与MINI WEB框架(利用WSGI实现服务器与框架解耦) 中的mini_frame最后版本的代码: import time def in ...
- 装饰器(python)
一,装饰器定义:本质就是函数,功能是为其他函数添加新功能原则:1.不修改被装饰函数的源代码(开放封闭原则)2.为被装饰函数添加新功能后,不修改被修饰函数的调用方式3.装饰器=高阶函数+函数嵌套+闭包高 ...
- 递归,装饰器,python常用内置方法
**递归** def calc(n): print(n) if int(n / 2) == 0: 条件判断 r ...
- Python装饰器,Python闭包
可参考:https://www.cnblogs.com/lianyingteng/p/7743876.html suqare(5)等价于power(2)(5):cube(5)等价于power(3)(5 ...
- <每日一题>题目2:编写装饰器,为多个函数加上认证功能(用户账号和密码来源于文件)
这里做个最简单的账号密码验证,主要为了实现装饰器同时对多个函数起作用 FLAG = False #加一个变量防止多次登录验证 def wrapper(f): def inner(*args,**kwa ...
随机推荐
- HTML Table to Json
HTML 表格输出JSON <table class="table table-striped table-bordered table-hover dataTable no-foot ...
- HTTP 04 web 服务器
用单台虚拟主机实现多个域名 HTTP/1.1 允许一台 HTTP 服务器搭建多个 web 站点, 例如提供 web 托管服务的供应商, 可以用一台服务器为多位客户服务, 也可以以每位客户持有的域名运行 ...
- C语言 结构体(联合体)对齐规则
/* 结构体(联合体)对齐规则 */ #include <stdio.h> #include <stdlib.h> #include <string.h> /* * ...
- LeetCode 51 N-Queens II
Follow up for N-Queens problem. Now, instead outputting board configurations, return the total numbe ...
- OpenGL矩阵变换,坐标空间变换
- 【IEEE会议论文】格式规范问题
- Text area: The height of the text should not be much smaller than 23.5 cm and the width should no ...
- VBA 全局常量定义
Public Const INDEX As Integer = 16 Public Const RESULT_SHEET As String = "result" Public C ...
- vue.config.js
const path = require('path'); const vConsolePlugin = require('vconsole-webpack-plugin'); // 引入 移动端模拟 ...
- Python——rrdtool模块的安装
一.Centos环境yum命令安装 yum install rrdtool rrdtool-devel 二.源码安装 wget https://pypi.python.org/packages/99/ ...
- react 路由导航栏 withRouter
codesandbox https://codesandbox.io/s/9l6prnyxjy app.js import React, { Component, Fragment } from &q ...