Python 带参数的装饰器应用python通过装饰器统一处理函数结果

前些日子,当使用Python  locust做压测的时候,不想在每个接口调用的地方写请求结果判断,于是就考虑搞波装饰器啥的玩一下。

当时就搞成了这样:

『『需自动化项目源码\交流学习添加v:ct-xiaozhou

免费提供的。行业变迁,多个好友多点可能性。非机构』』

def locustCommonAssert(request_type, name, conditionfunc):

def wrapper(func):

@wraps(func)

def inner_wrapper(*args, **kwargs):

start_time = time.time()

info =None

            try:

info = func(*args, **kwargs)

log.info(f'业务动作返回信息:{info}')

funcassert = conditionfunc(info)# len(info) < 2,条件成立则算为成功

                if funcassert:

total_time =int((time.time() - start_time) *1000)

events.request_success.fire(request_type=request_type, name=name, response_time=total_time,

                                                response_length=1,

                                                exception=info)

log.info(f'业务:{name},成功')

else:

total_time =int((time.time() - start_time) *1000)

log.error(f'业务:{name},失败,主方法返回值:{info}')

events.request_failure.fire(request_type=request_type, name=name, response_time=total_time,

                                                response_length=1,

                                                exception=info)

except Exception as e:

total_time =int((time.time() - start_time) *1000)

log.error(f'业务:{name},失败,异常信息为:{e}')

events.request_failure.fire(request_type=request_type, name=name, response_time=total_time,

                                            response_length=1,

                                            exception=e)

return info

return inner_wrapper

return wrapper


需要用到的地方直接就@上它就行,感觉起来是很方便啊//

装饰器资料各种深入浅出的,我只是把它当成一个高阶函数用。传入目标函数。

可以清晰的看到上述方法的执行就是后面三个return倒序执行的。勉强实现了我想要的功能


『『需源码\交流学习添加v:ct-xiaozhou

免费提供的。行业变迁,多个好友多点可能性。非机构』』

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容