簡體   English   中英

單元測試python中的軟斷言

[英]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.

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