2011-03-26 98 views
0

我已經在Python中編寫了自定義測試工具(由於大量的自定義邏輯,現有的工具並不適合)。 Windows任務調度程序每天每小時啓動一次。由於我的測試現在需要超過2個小時才能運行並且正在增長,所以我遇到了問題。現在我只是檢查系統時間,除非hour % 3 == 0什麼都不做,但我不喜歡那樣。我有一個包含一個文本文件:使用Python對一個Windows文件進行RW鎖定,以便每晚至多運行一個測試實例

# This is a comment 
LatestTestedBuild = 25100 

# Blank lines are skipped too 
LatestTestRunStartedDate = 2011_03_26_00:01:21 

# This indicates that it has not finished yet. 
LatestTestRunFinishDate = 

有時候,當我手動揭開序幕的測試,它可以發生在任何時間,包括12:59:59.99 我想刪除競態條件儘可能。我寧願花一些額外的努力,而不用擔心事情發生的實際可能性。所以,我認爲自動鎖定這個文本文件是最好的方法。

我正在使用Python 2.7,Windows Server 2008R2 ProWindows 7 Pro。我更喜歡不安裝額外的庫(Python尚未「出售」給我的同事,但我可以在本地複製一個實現它的文件,並授予許可證)。

所以,請提出一個好的,防彈的方法來解決這個問題。

回答

1

當您開始運行測試時,請創建一個名爲__LOCK__的文件。完成後刪除它,使用try ... finally塊來確保它總是被清除。如果文件存在,請不要運行測試。如果電腦崩潰或類似情況,請手動刪除文件。我懷疑你需要比這更聰明。

您確定需要2小時的測試嗎?我認爲2分鐘是一個更合理的花費時間,但我猜如果你正在運行一些複雜的數字,你可能需要更多。

示例代碼:

import os 
if os.path.exists("__LOCK__"): 
    raise RuntimeError("Already running.") # or whatever 
try: 
    open("__LOCK__", "w").write("Put some info here if you want.") 
finally: 
    if os.path.exists("__LOCK__"): 
     os.unlink("__LOCK__") 
+0

感謝。單元測試通常很快,但一旦你得到數千個單元測試,時間開始明顯增加。如果你正在開發一個GUI應用程序,這對於其他許多原因而言是一種痛苦,那麼每次測試可能需要2分鐘。如果出現問題,GUI測試也可以拒絕停止運行。最複雜的是有幾個窗口服務和GUI應用程序交互。 這就是爲什麼我希望能夠檢測舊鎖並嘗試殺死東西並清理東西和/或發送一封電子郵件,通知有關方面關於此特定事件。還有什麼想法? – 2011-03-26 22:45:07

相關問題