2015-07-01 26 views
0

我試圖退出一個運行成功的Python運行結果的Python測試用例。我有一個程序使用我創建的函數來查看一個表是否包含標識符。退出成功運行結果的Python程序(從函數)

def test_LogsIdentifiersApache(driver, url): 
     loginToWebsite(driver, url).confirmLoginAndUnlocked() 
     driver.get(url('/LogsPage/')) 
     selectIdentifier(driver, "gdm-simple-greeter") 

在該函數[位於不同的文件]中,它在表中搜索標識符。如果發現它,那麼它會執行一些其他檢查並返回到運行測試用例。如果它沒有在表格中找到標識符,那麼它將向屏幕發送一條消息,通知測試人員標識符不在表格&中,併成功運行。

def selectIdentifier(driver, identifier): 
    << Code to search for identifier here >> 

    # If identifier not found, print message to window & exit test case with successful run 
    if isIdentifierPresent == False: 
     print "\nNOTICE: IDENTIFIERS OBJECT \""+identifier+"\" NOT LISTED IN TABLE" 
     return 

當測試用例中包含所有代碼時,使用'return'可以正常工作。一旦我開始創建函數,測試就會停止併成功運行。我明白'return'會讓它返回到測試用例並繼續運行,這是我不想要的。 (1)打印標識符未找到的消息,並......(2)退出此功能[並且正在運行的測試用例],成功運行&,繼續運行測試套件。我怎樣才能做到這一點?而且,這個測試用例是直接從文件夾中用'py.test'命令運行的,而不是從測試套件文件中運行,如果這很重要的話。

+0

方案已經更新,@alecxe – rwbyrd

回答

2

我覺得最好的方法是定義一個異常類:

class noIdentifier(Exception): 
    pass 

現在修改代碼以看起來像這樣:

if isIdentifierPresent == False: 
    print "\nNOTICE: IDENTIFIERS OBJECT \""+identifier+"\" NOT LISTED IN TABLE" 
    raise noIdentifier("<Optional message>") 

在測試套件,包裝測試請嘗試以下情況除外:

try: 
    testCase() 
except noIdentifier: 
    pass 

我相信還有其他方法可以做到這一點。不過,我覺得這真的很方便。

編輯:要使用可選的消息,

try: 
    testCase() 
except noIdentifier as e: 
    print e.message # or use print str(e) 
+0

是的,引發異常是一次性執行「多次返回」的好方法。 – kindall

+0

好的,還有一個問題。當我嘗試這種方法並在with ... raise noIdentifier(「<< message here >>」)中放置可選消息時...消息未打印。任何想法爲什麼!? – rwbyrd

+1

@rwbyrd編輯我的答案以使用該消息。 –

0

如果你在Python 3中,你可以使用sys.exit()去掉。這樣的事情可能嗎?

if isIdentifierPresent == False: 
    print "\nNOTICE: IDENTIFIERS OBJECT \""+identifier+"\" NOT LISTED IN TABLE" 
else: 
    print("Hooray!") 
    sys.exit() 
+0

感謝您的回覆,@Kernel_Panic。這裏有幾個問題:(1)我需要它打印消息,然後退出函數[和位於不同文件中的測試用例],如果找不到類似於上面顯示的標識符。 (2)sys.exit()導致測試用例失敗,這是我不想要的。 – rwbyrd

+1

如果不是isIdentifierPresent:'if isIdentifierPresent == False:' – dm295