Переопределить стандартный обмен сообщениями Assert в Pytest Assert - PullRequest
0 голосов
/ 13 сентября 2018

Я использую Pytest для тестирования некоторых SQL-запросов, которые моя команда выполняет программно в течение определенного времени.

Мои SQL-запросы представляют собой списки JSON - один JSON соответствует одной строке данных.

IУ нас есть функция, которая различает пары ключ JSON: значение, чтобы мы могли точно указать, какие значения отличаются для данной строки.В идеале я бы вывел список этих различий вместо стандартного вывода оператора assert, что в конечном итоге выглядит неуклюжим и не очень полезным для конечного пользователя.

Ответы [ 2 ]

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

Pytest дает нам хук pytest_assertrepr_compare, чтобы добавить собственное объяснение того, почему утверждение не удалось.

Вы можете создать класс для переноса строки JSON и реализовать алгоритм компаратора, перегружающий оператор равенства.

class JSONComparator:
    def __init__(self, lst):
        self.value = value

    def __eq__(self, other):
        # Here your algorithm to compare two JSON strings
        ...

        # If they are different, save that information
        # We will need it later
        self.diff = "..."

        return True

# Put the hook in conftest.py or import it in order to make pytest aware of the hook.
def pytest_assertrepr_compare(config, op, left, right):

    if isinstance(left, JSONComparator) and op == "==":
        # Return the diff inside an array.
        return [left.diff]

# Create a reference as an alias if you want
compare = JSONComparator

Использование

def test_somethig():
    original = '{"cartoon": "bugs"}'
    expected = '{"cartoon": "bugs"}'

    assert compare(original) == expected
0 голосов
/ 13 сентября 2018

Вы можете использовать встроенную возможность Python для отображения настраиваемого сообщения об исключении:

assert response.status_code == 200, "My custom message: actual status code {}".format(response.status_code)

Проверьте его: https://wiki.python.org/moin/UsingAssertionsEffectively

...