2015-06-11 142 views
1

對不起,它發佈之前,我想...Python:終止一個導入的腳本而不會終止導入的腳本

我有一噸硒測試,我想過夜運行。但是,到目前爲止,每個測試都要求我登錄到服務器(這很慢 - 大約需要整個測試的一半時間)。我試圖通過使用相同的IE驅動程序來避免這種情況。當我有一個嚴重失敗的測試時,我想停止那個特定的測試並繼續前進。但是,我似乎無法立即殺死所有的測試。

例如,下面是簡化我有(我在這裏粘貼代碼太多其他)問題的腳本:

# Wrapper.py: 
driver = webdriver.Ie() 
try: 
    import test1 
    test1.setup(driver) 
except Exception as e: 
    print e 

try: 
    import test2 
    test2.setup(driver) 
except Exception as e: 
    print e 

try: 
    import test3 
    test3.setup(driver) 
except Exception as e: 
    print e 


# test1.py 
def setup(driver): 
    # do stuff in test1 

# test2.py 
def setup(driver): 
    # do stuff in test2 

# test3.py 
def setup(driver): 
    # do stuff in test3 

這可能看起來愚蠢,而且很舒服,所以可以,但它可以讓我使用一個常用的IE瀏覽器運行多個Selenium測試。但是,有時候需要殺死一個測試(無論是嚴重錯誤還是太多錯誤)。這通常是用做:

sys.exit(0) 

然而,使用test2.py爲例,使用該命令將殺害test2.py腳本和wrapper.py腳本;我希望它只能殺死test2,讓我繼續測試3。這與有一個批處理文件可以分別調用每個測試並等待前一個完成相似。但是,在批處理文件中,驅動程序不能像每個驅動程序一樣被傳入。

我使用:

Python 2.7 
Windows 7 64-bit 
Selenium 2.44 

回答

0

通常你會通過返回假

# test2.py 
def setup(driver): 
    # do stuff in test2 
    if should_fail: 
     return False 
    ... 
    return True 

但其完全有可能提前終止測試我沒有正確理解你的問題......

另一種選擇是提出例外

def setup(driver): 
    assert ContitionIsTrue,"Failed Condition Check!" 

這將被您的異常處理程序捕獲

+0

aha!這個斷言對我正在嘗試做的事情起作用。謝謝 – user2869231