簡體   English   中英

Python:終止導入的腳本而不會終止正在執行導入的腳本

[英]Python: Terminate an imported script without killing the script that is doing the import

抱歉,在我完成之前閱讀此內容的人; 它在我想要...之前發布了...

我有大量的硒測試,想過夜進行。 但是,到目前為止,每個測試都要求我登錄到服務器(速度很慢-大約需要整個測試時間的一半)。 我試圖通過使用相同的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,讓我繼續test3。 這類似於擁有一個批處理文件,該文件將分別調用每個測試並等待之前的測試完成。 但是,在批處理文件中,無法傳遞驅動程序,就好像每個驅動程序都是相同的驅動程序一樣。

我正在使用:

Python 2.7
Windows 7 64-bit
Selenium 2.44

通常您會通過返回False提前終止測試

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

但是完全有可能我沒有正確理解您的問題...

另一種選擇是提出一個例外

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM