前些日子,当使用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
免费提供的。行业变迁,多个好友多点可能性。非机构』』