需求:領導想知道,該測試用例執行,用例的執行時間是多少,我們怎麼實現該**?
如下:想要實現下面用例的執行時間是多少,怎麼做?
defcreat_oder():
"""這個是原**,一條測試用例
"""print("
執行測試用例")
time.sleep(1)
你可能會想到,記錄開始時間,結束時間,然後計算差就行了唄,好,那我們來看看
#第一種方法在函式內去修改
importtime
defcreat_oder():
start_time=time.time() #
開始時間
print("
執行測試用例
") #
假設它是需要執行的測試用例
time.sleep(1) #
為了增加顯示效果
end_time=time.time() #
結束時間
print("
用例的執行時間是:
",end_time-start_time)
creat_oder()
分析:這樣做真的可以嗎,看起來好像是沒有錯,但是已經修改了原來的**結構,要是有其他同事也呼叫這個函式,是不是看見**被改了,想錘你。那怎麼辦?
你可能會想到,那我寫個重新寫個函式,然後呼叫這個creat_oder函式不就行了吧。好,那我們繼續看。
#第二種方法、把函式當作引數傳遞給另乙個函式
importtime
defcreat_oder():
print("
執行測試用例")
time.sleep(1)
defshow_time(func):
start_time=time.time()
func()
end_time=time.time()
print("
用例的執行時間是:
",end_time-start_time)
show_time(creat_oder)
#分析:以上的方法邏輯沒有問題,也可以實現。但是修改了函式名字.因為我們每次都需要將函式creat_oder作為乙個引數傳遞給show_time函式 、之前的執行邏輯是直接執行creat_oder函式,但是現在不得不執行show_time(creat_oder)。 假設有10個方法呼叫需要creat_oder函式去統計執行時間,那是不是得修改10處地方,很麻煩怎麼辦?
#第三種方法,裝飾器的使用(繞了這麼久就是為了講這個)
#定義裝飾器
def show_time(func): #
func引數
def inner(): #
將需要對creat_oder增加的**寫到這裡面
start_time=time.time()
func()
end_time=time.time()
print("
用例的執行時間是:
", end_time -start_time)
return
inner
#使用裝飾器
@show_time #
語法糖@ 等價於 creat_oder=show_time(creat_oder)
defcreat_oder():
print("
執行測試用例")
time.sleep(1)
creat_oder()
分析:就是將需要增加的**寫在inner裡面,然後給它定義乙個裝飾器名字,使用的時候在原來**上加上@語法糖和裝飾器名稱,就到達了裝飾目的。
看完以上**,你應該明白了,裝飾器就是對我們原有的**進行增強,修飾的作用,就好像裝修房子一樣,不對房子的結構做改變,但是需要貼桌布,置辦家具讓房子變得更好看更舒適。
那再補充一點,這個時候,老闆又提出了要求,說需要知道這個用例的執行人是誰??怎麼做?
第四種方法、帶引數的函式裝飾器(強化)
importtime
defwho_body_run(name):
defshow_time(func):
definner():
start_time=time.time()
func()
end_time=time.time()
print("
用例的執行時間是:
", end_time -start_time)
print("
執行者是:
",name)
return
inner
return
show_time
@who_body_run(
'tom
')
defcreat_oder():
print("
執行測試用例")
time.sleep(1)
creat_oder()
#等價於who_body_run('tom')(creat_oder)()
分析:發現只需要在方法三中的**外包裹一層函式,就可以實現裝飾器的引數化。至此,老闆有要求你也不用擔心做不了了。。
Python裝飾器詳細舉例
coding utf 8 author mr.luo date 2021 2 19 15 23 def too print 豬八戒 基礎的函式呼叫操作 print 豬八戒到底是哪八戒 center 20,too a too print type a a 基本的函式引數傳遞操作 print 豬八戒到底...
Python裝飾器Decorator的使用簡析
裝飾器 decorator 裝飾器的方便在於可以在不修改原 基礎上,新增其他功能。例如,可以函式加乙個輸出函式執行時間的功能 import math import time defdisplay time func 裝飾器也就是乙個函式 def args 再來乙個函式 t1 time.time re...
python裝飾器講解筆記
公共 判斷乙個數是否是質數def is prime num if num 2 return false elif num 2 return true else for i in range 2 num if num i 0 return false return true1 不帶有裝飾器def pr...