[英]Soft Asserts in unittest python
當前,我有一個測試用例,它遍歷字典詞典,每個詞典包含我要在網頁上測試的單獨值(我正在使用Selenium Webdriver,盡管不一定與問題相關)。 該測試用例本質上將檢查產品的所有可能購買途徑是否正常工作,結果表明大約有200種不同的途徑。 我想保持代碼簡單,而不要對每個代碼進行測試。 以下是我為縮短代碼所做的一個示例:
self.templates = {"sales": self.sales", ...)
self.template_keys = ["sales",....]
self.sales - {"locator1": "<locataor info>, ...)
.... <more dictionaries>
for key in self.template_keys:
for template in self.templates[key]:
<do purchase path in selenium webdriver>
assert end_url == expected_end_url # Would like failure to not end test
我的問題是如何在嵌套的for循環中獲取斷言,以確保不會致命失敗並繼續進行下一步。 我已經閱讀了這篇stackoverflow文章 ,似乎他似乎決定做自己的事情,而沒有提供有關他所做的任何信息。 我知道這是一種反模式,但是我不值得花時間單獨將它們全部寫出來。 我想知道是否有人有一個好的解決方案, 就像Groovy中的軟斷言那樣工作。
收集有關多個故障的報告 :用if
替換assert
,並為其主體中的每個故障創建一個描述符。 將這些描述符收集在一個列表中(最初為空: failures = []
):
if end_url != expected_end_url:
failures.append(end_url + ' != ' + expected_end_url)
最后, assert
列表為空,如果不是,則將其用作錯誤消息:
assert(failures == [], str(failures))
比捕獲異常更具可讀性-而且非常靈活。
為什么不僅僅捕獲異常:
for key in self.template_keys:
for template in self.templates[key]:
<do purchase path in selenium webdriver>
try: assert end_url == expected_end_url # Would like failure to not end test
except AssertionError: // do something.
今天,我對軟斷言的需求完全相同,這在我上一次使用Java和TestNG時偶爾使用。 令我有些驚訝的是pytest內置的東西。 但是我發現有(至少)兩個Python庫。
第一個是最軟的: https : //pypi.org/project/softest/
第二個是Python-Delayed-Assert: https : //github.com/pr4bh4sh/python-delayed-assert
我還沒有親自使用過它們中的任何一個,但是查看示例,看起來它們以基本相同的方式解決了相同的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.