背景

博主在写自动化的过程中,有遇到有的用例运行缓慢的问题,想起在上一家公司的的“自动化工厂”有一个指标:两小时内运行完所有的用例才算合格。所以想计算每一个用例的运行时间。

思路

因为使用的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()

【Python】模块学习之(__call__)实现准确计算函数运行时间的更多相关文章

  1. 【转】Python模块学习 - fnmatch & glob

    [转]Python模块学习 - fnmatch & glob 介绍 fnmatch 和 glob 模块都是用来做字符串匹配文件名的标准库. fnmatch模块 大部分情况下使用字符串匹配查找特 ...

  2. 【目录】Python模块学习系列

    目录:Python模块学习笔记 1.Python模块学习 - Paramiko  - 主机管理 2.Python模块学习 - Fileinput - 读取文件 3.Python模块学习 - Confi ...

  3. Python模块学习filecmp文件比较

    Python模块学习filecmp文件比较 filecmp模块用于比较文件及文件夹的内容,它是一个轻量级的工具,使用非常简单.python标准库还提供了difflib模块用于比较文件的内容.关于dif ...

  4. 使用python装饰器计算函数运行时间的实例

    使用python装饰器计算函数运行时间的实例 装饰器在python里面有很重要的作用, 如果能够熟练使用,将会大大的提高工作效率 今天就来见识一下 python 装饰器,到底是怎么工作的. 本文主要是 ...

  5. python模块学习第 0000 题

    将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果. 类似于图中效果: 好可爱>%<! 题目来源:https://github.com/Yixiao ...

  6. Python模块学习:logging 日志记录

    原文出处: DarkBull    许多应用程序中都会有日志模块,用于记录系统在运行过程中的一些关键信息,以便于对系统的运行状况进行跟踪.在.NET平台中,有非常著名的第三方开源日志组件log4net ...

  7. 解惑Python模块学习,该如何着手操作...

    Python模块 晚上和朋友聊天,说到公司要求精兵计划,全员都要有编程能力.然后C.Java.Python-对于零基础入门的,当然是选择Python的人较多了.可朋友说他只是看了简单的语法,可pyth ...

  8. Python模块学习

    6. Modules If you quit from the Python interpreter and enter it again, the definitions you have made ...

  9. [转载]Python模块学习 ---- subprocess 创建子进程

    [转自]http://blog.sciencenet.cn/blog-600900-499638.html 最近,我们老大要我写一个守护者程序,对服务器进程进行守护.如果服务器不幸挂掉了,守护者能即时 ...

随机推荐

  1. Swift学习——A Swift Tour 枚举和结构体

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zhenyu5211314/article/details/28588095 Enumerations ...

  2. 360UI 界面框架 即QUI框架与EXT比较

    EXTJS框架是非常全面和成熟的,这是因为它发展的年头久远,并且有全世界的EXTJS爱好者为其出谋献策,它的组件库尤其是DataGrid组件无人能出其右.我在最初也考虑过使用EXTJS来做项目,学习了 ...

  3. JavaScript日期处理

    一.Date类型 在讲述常见日期问题之前,先梳理一下Date类型的方法. ECMAScript中的Date类型使用自UTC(Coordinated in Universal Time,国际协调时间)1 ...

  4. webuploader 多图片上传

    WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件. 具体接口参考 webuploader接口文档地址 一.图片上传功能 ...

  5. docker+MySQL+读写分离

    一.拉取mysql镜像文件docker pull mysql二.查看镜像docker images三.创建配置文件目录mkdir /data/docker/mysql/{master,slave} - ...

  6. APICloud常用方式

    新打开一个窗口: api.openWin({ name: 'unlogin', url: 'widget://html/unlogin.html', pageParam: { } }); 新打开一个F ...

  7. vertical-align和line-height的深入应用

    vertical-align和line-height的深入应用 本文的重点是了解vertical-align和line-height的使用 涉及到的名词:基线,底端,行内框,行框,行间距,替换元素及非 ...

  8. android 带listview对话框

    package com.example.dialog2; import android.os.Bundle;import android.app.Activity;import android.app ...

  9. centos7使用中文输入法

    centos7自带中文输入法,可能我们在安装时会跳过选择汉语拼音,我们来重新设置一下吧 假如你在命令行界面,输入Ctrl+Alt+F1进入图形界面 点击左上角系统工具   --> 设置 --&g ...

  10. Mybatis 中 update 语句 动态 语句

    <update id="updateAdministrationAsset" parameterType="com.opple.fa.assetcard.entit ...