背景
博主在写自动化的过程中,有遇到有的用例运行缓慢的问题,想起在上一家公司的的“自动化工厂”有一个指标:两小时内运行完所有的用例才算合格。所以想计算每一个用例的运行时间。
思路
因为使用的POM模型,每一个用例都是一个函数,所以实际需要得到的是函数运行的时间
在每一个函数运行开始的时候打一个标记,结束的时候打一个标记可以得到结果,但是比较麻烦,所以想到了装饰器
所有的函数都是可调用对象。使用__call__()函数可以将一个类实例变成一个可调用对象
在使用装饰器的时候,遇到了各种问题,都已经一一解决,最终代码如下:
import time
from logging_save import logger
class time_count(object):
def __init__(self):
pass
def __call__(self,func):
def _call(*args, **kw):
begintime = time.clock()
func(*args, **kw)
end_time = time.clock()
runtime = end_time -begintime
logger.info('ran %s cost %.3f s' % (func.__name__, runtime))
return _call
class bss(object):
@time_count() # 直接进行调用
def runfunc(self):
time.sleep(3)
print 'runfunc running'
bs = bss()
bs.runfunc()