python 装饰器 自动化辅助输出log

装饰器的作用是给已有的函数增加功能,在自动化领域经常会用到,比如你写的一个接口,想要输出一种固有的log,又想减少代码行数,那么装饰器再好不过了。
他可以声明一种规则,输出你想要的固有的log,从而暴露出去,更好的加以利用,比如,设计平台接收它。
写下代码:

def functrack(func)@wraps(func)
    def wrapper(*args,**kwargs):
        printLog("[FUNC CALL TRACK INFO]:{}()".format(func.__name__))
        flag=false
        try:
	        res=func(*args,**kwargs)
	        if "expect" in kwargs:
	            expect_res=kwargs["expect"]
	            if expect_res!=None and type(res)==bool and expect_res!=res:
	               printLog("[FUNC CALL TRACK ERROR INFO]:Result is different from expected"+",when call {}")
	               printFail()
	               #截图保存
	               #如果配置了screencap参数,若该参数screencap参数,若该参数screencap==True才会截图到PIC目录
	               if "screencap" in kwargs:
	                   screencap=kwargs["screencap"]
	                   if screencap:
	                       _screencap_save()
	                       #如果没有配置screencap参数,默认截图到PIC目录
	                   else:
	                       _screencap_save()
	                       #抛出异常标志位
	                       flag=True
	                       raise Exception("Result is different from expected")
	                       return res
        except Exception as e:  
            if not flag:
            	print(e)
            	printFail()
            	 #如果配置了screencap参数,若该参数screencap参数,若该参数screencap==True才会截图到PIC目录
            	 if "screencap" in kwargs:
	                   screencap=kwargs["screencap"]
	                   if screencap:
	                       _screencap_save()
	                       #如果没有配置screencap参数,默认截图到PIC目录
	                   else:
	                       _screencap_save()
	                       printLog("[FUNC CALL TRACK ERROR INFO]:"+str(e)+",when call {}()".format(func.__name__))
	                   rasie e
	      return wrapper

import time
testcase_index=""
timestamp=time.time()
LOG_PATH='你存储的log路径'

def printLog(*data,**kargs):
	if testcase_index:
		logpath=LOG_PATH+os.sep+testcase_index+'.py_'+timestamp+'.log'
    else:
		logpath=LOG_PATH+os.sep+timestamp+'.log'
	logLine=time.time()
	for ele in data:
		logLine=logLine+str(ele)+","
	for k,v in kargs.items():
		logLine=logLine+str(k)+"."+str(v)+","
	if logLine and len(logLine)>= 0 and logLine[-1]==",":
		logLine=logLine[:-1]
		print(logLine)
		logLine=logLine+"\n"
		with open(logpath,mode='a') as f:
			try:
				f.write(logLine)
			except:
				print('Write log failed\n')
			finally:
				f.close()		

然后,再其他类里就可以用这个装饰器了,比如,你的方法为:
@functrack
def getName():

这样,getName就有了特定输出log的功能了!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值