現(xiàn)象描述:

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:域名注冊、網(wǎng)絡空間、營銷軟件、網(wǎng)站建設、江蘇網(wǎng)站維護、網(wǎng)站推廣。
1、time.clock 在win系統(tǒng)和linux系統(tǒng)下對相同程序的計時結(jié)果不一致
2、到底應該用什么時間計時?為什么用time.time與time.clock計時會有那么大的差異
在計算機領域有多種時間。
第一種稱作CPU時間或執(zhí)行時間,用于測量在執(zhí)行一個程序時CPU所花費的時間。第二種稱作掛鐘時間,測量執(zhí)行一個程序時的總時間。掛鐘時間也被稱作流逝時間或運行時間。與CPU時間相比,掛鐘時間通常長些,因為CPU執(zhí)行測量的程序可能同時還在執(zhí)行其它程序的指令。
另一個重要概念是所謂的系統(tǒng)時間,由系統(tǒng)時鐘測量。系統(tǒng)時間表示計算機系統(tǒng)時間傳遞的概念。要記住系統(tǒng)時鐘是可以由操作系統(tǒng)修改的,就是修改系統(tǒng)時間。
在Unix系統(tǒng)上,time.time的作用與Windows相同,但time.clock的意義不同。
在Unix系統(tǒng)上,time.clock以秒為單位返回當前處理器時間,例如,執(zhí)行當前線程所花費的CPU時間。而在Windows上,它是以秒為單位的返回自首次調(diào)用該函數(shù)以來所流逝的系統(tǒng)時間。
以我遇到的Ubuntu系統(tǒng)上運行time.time和time.clock的例子:
time.time()顯示系統(tǒng)時間過去大概1秒,而time.clock()顯示花費在當前進程上的CPU時間只有于1毫秒。
而win下time.time()和time.clock()顯示系統(tǒng)時間都是大致過去了1秒
在測量程序準確性能時應該使用哪一個呢?
這要視情況而定。如果程序運行的系統(tǒng)能夠提供足夠的資源給程序,例如,一個運行基于Python的web應用程序的web服務器,則使用time.clock()來測量程序會更有意義,因這個web應用程序可能是服務器上的主要程序 。如果程序運行的系統(tǒng)上還同時運行著其它大量程序,則使用time.time()進行測量會更有意義。 如果不是這樣,就應該使用基于掛鐘的計時器來測量程序的性能,因為這樣通常能反應程序的環(huán)境。
放結(jié)論,一般情況下:
1、win用time.clock或time.time
2、linux 下用time.time? 或 datetime.datetime.now().timestamp()
【1】(重要)? ? Python測量時間,用time.time還是time.clock?
1. 使用裝飾器來衡量函數(shù)執(zhí)行時間
有一個簡單方法,那就是定義一個裝飾器來測量函數(shù)的執(zhí)行時間,并輸出結(jié)果:
import time
from functoolsimport wraps
import random
def fn_timer(function):
@wraps(function)
def function_timer(*args, **kwargs):
? t0= time.time()
? result= function(*args, **kwargs)
? t1= time.time()
? print("Total time running %s: %s seconds" %
? ? ? (function.__name__, str(t1- t0))
)
? return result
return function_timer
@fn_timer
def random_sort(n):
return sorted([random.random() for i in range(n)])
if __name__== "__main__":
random_sort(2000000)
輸出:Total time running random_sort: 0.6598007678985596 seconds
使用方式的話,就是在要監(jiān)控的函數(shù)定義上面加上 @fn_timer 就行了
或者
# 可監(jiān)控程序運行時間
import time
import random
def clock(func):
def wrapper(*args, **kwargs):
? ? start_time= time.time()
? ? result= func(*args, **kwargs)
? ? end_time= time.time()
? ? print("共耗時: %s秒" % round(end_time- start_time, 5))
? ? return result
return wrapper
@clock
def random_sort(n):
return sorted([random.random() for i in range(n)])
if __name__== "__main__":
random_sort(2000000)
輸出結(jié)果:共耗時: 0.65634秒
2. 使用timeit模塊
另一種方法是使用timeit模塊,用來計算平均時間消耗。
執(zhí)行下面的腳本可以運行該模塊。
這里的timing_functions是Python腳本文件名稱。
在輸出的末尾,可以看到以下結(jié)果:4?loops, best of?5:?2.08?sec per loop
這表示測試了4次,平均每次測試重復5次,最好的測試結(jié)果是2.08秒。
如果不指定測試或重復次數(shù),默認值為10次測試,每次重復5次。
3. 使用Unix系統(tǒng)中的time命令
然而,裝飾器和timeit都是基于Python的。在外部環(huán)境測試Python時,unix time實用工具就非常有用。
運行time實用工具:
輸出結(jié)果為:
Total?time running random_sort:?1.3931210041?seconds
real?1.49
user?1.40
sys?0.08
第一行來自預定義的裝飾器,其他三行為:
real表示的是執(zhí)行腳本的總時間
user表示的是執(zhí)行腳本消耗的CPU時間。
sys表示的是執(zhí)行內(nèi)核函數(shù)消耗的時間。
注意:根據(jù)維基百科的定義,內(nèi)核是一個計算機程序,用來管理軟件的輸入輸出,并將其翻譯成CPU和其他計算機中的電子設備能夠執(zhí)行的數(shù)據(jù)處理指令。
因此,Real執(zhí)行時間和User+Sys執(zhí)行時間的差就是消耗在輸入/輸出和系統(tǒng)執(zhí)行其他任務時消耗的時間。
4. 使用cProfile模塊
5. 使用line_profiler模塊
6. 使用memory_profiler模塊
7. 使用guppy包
測試函數(shù)是用于自動化測試,使用python模塊中的unittest中的工具來測試
附上書中摘抄來的代碼:
#coding=utf-8import unittestfrom name_function import get_formatted_nameclass NamesTestCase(unittest.TestCase): def test_first_last_name(self): formatted_name=get_formatted_name('janis','joplin') self.assertEqual(formatted_name,'Janis Joplin') def test_first_last_middle_name(self): formatted_name=get_formatted_name('wolfgang','mozart','amadeus') self.assertEqual(formatted_name,'Wolfgang Amadeus Mozart')#注意下面這行代碼,不寫會報錯哦~~~書中沒有這行if __name__=="__main__": unittest.main()
函數(shù)的使用:
(1).函數(shù)是具有獨立功能的代碼塊,是一個整體(封裝了函數(shù)功能的代碼), 完成某個功能的小工具
特點: 函數(shù)最大的特點是封裝
(2).作用: 提高開發(fā)效率,實現(xiàn)代碼的重用
(3).函數(shù)使用步驟:
① 定義函數(shù): 把代碼的功能封裝成一個整體
② 調(diào)用函數(shù): 享受封裝的結(jié)果
(4).函數(shù)調(diào)用流程: ☆ ☆ ☆
① 函數(shù)定義時 不會執(zhí)行函數(shù)體中代碼
② 函數(shù)調(diào)用時,才會執(zhí)行函數(shù)體中代碼
③ 函數(shù)調(diào)用完成以后,一定要回到函數(shù)調(diào)用的地方繼續(xù)向下執(zhí)行
有關(guān)于軟件測試的學習知識,可以看黑馬程序員軟件測試知識,有視頻、文章、學習文檔等等!
                網(wǎng)站標題:包含測試函數(shù)用時python的詞條
                
                當前網(wǎng)址:http://www.yijiale78.com/article0/docjioo.html
            
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、關(guān)鍵詞優(yōu)化、外貿(mào)建站、軟件開發(fā)、電子商務、品牌網(wǎng)站建設
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)