Python утверждать с повтором - PullRequest
       5

Python утверждать с повтором

0 голосов
/ 07 сентября 2018

Я пытаюсь использовать для создания своего рода пакета автоматизации.Набор продуктов, который я пытаюсь описать, связывается через сетевой интерфейс.Я использую операторы assert, такие как

assert A == B

Основная проблема, которую я хочу решить, заключается в следующем:

B требуется различное количество времени для достижения желаемого значения (например, иногда 2 секунды, иногда5 секунд)

Можно ли реализовать оператор assert, который выполняет заданное условие определенное количество раз с задержкой, а затем утверждает?

assert A == B, 5, 5.0, "Still it failed"

Вышеуказанный оператор будетозначает: «попробуйте A == B 5 раз с 5,0 секундной задержкой между каждой итерацией и после этого выдавайте заданную ошибку, если она все еще не удается».

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Для лучшего и более удобочитаемого кода вы можете использовать декоратор retry для внутренней функции. Сделайте pip install retry для установки retry модуля

from retry import retry

def test_abc():
    # <my test code>

    @retry(AssertionError, tries=5, delay=5.0)
    def _check_something():
        assert A == B, "Still failing even after 5 tries"

    # Validate
    _check_something()
0 голосов
/ 07 сентября 2018

Нет, но вы можете написать цикл, который делает то же самое.

import time
failed = True
i = 0

while i < 5 and failed:
    failed = (A == B)
    time.sleep(5.0)

assert not failed, "Still it failed"

Оберните это в функцию для удобства чтения ...

...