2017-09-18 24 views
2

我想,當我遇到異常如何明確地失敗了一步一步的行爲實施

如明確無法在behave步驟。我寫這封信根據行爲文檔代碼 -

from behave import * 

@when('verify test fails.*?(?P<param_dict>.*)') 
def test_logger(context, param_dict): 
    try: 
     logger.info("testing the logger. this is info message") 
     logger.info(1/0) 
    except Exception as e: 
     logger.error("arrived at exception: "+str(e)) 
     fail("failed with exception: "+str(e)) 

但它拋出這個錯誤:

NameError: name 'fail' is not defined

我試過其他方式也一樣,但沒有任何工程 如。 context.failed = True(也沒有工作)

如果我不明確失敗,最終測試結果變成PASS,即使它進入異常塊......這很奇怪。

回答

3

context.failed只是由Behave設置的一個屬性,並不做任何事情。這是一個信息屬性,雖然可以用它來確定失敗案例併發出斷言錯誤,但它本身不會執行任何操作。請參閱context.failed

至於您提到的fail方法,可能是從unittest模塊,如here所示。這個模塊也用於Behave的開發測試(參見他們的Github)。我同意,但這應該在他們的文檔中澄清。

要解決您的錯誤,您需要導入unittest模塊。要明確地失敗這一步,在記錄完消息之後,您只會提出異常,如下所示:

except Exception as e: 
    logger.error("arrived at exception: "+str(e)) 
    fail("failed with exception: "+str(e)) 
    raise 
+1

添加raise語句起作用。謝謝! – pythonuser

+1

對於通過Google發現此問題並且感到困惑的任何人 - 明確表達失敗行爲的方式是拋出異常;提問者也希望使用「失敗」方法,但您不必這樣做。 – Sam