как проверить два json файла с pytest в python3 .6 - PullRequest
1 голос
/ 28 апреля 2020

Каков наилучший способ проверить приведенный ниже случай с помощью pytest с помощью python3 (3.6} +)?

json_data_one = {
   "id": 1,
   "status": True,
   "name": "Jhon"
}

json_data_two = {
   "id": 2,
   "status": False,
   "name": "Dave"
}
def foo(json_data_one, json_data_two):
    # not the best way to show this
    # but i want to loop through each json data then
    # show the result based on `status` is either `True` or `False`
    if json_data_one["status"] == True:
        return json_data_one
    elif json_data_two["status"] == False:
        return json_data_two

@pytest.mark.parametrize("status, name", [(True, "John"), (False, "dave")])
def test_foo(status, name):
    assert foo(status) == name

Приведенное выше генерирует ошибку

status = True, name = 'John'

    @pytest.mark.parametrize("status, name", [(True, "John"), (False, "dave")])
    def test_foo(status, name):
>       assert foo(status) == name
E    TypeError: foo() missing 1 required positional argument: 'json_data_two'

test_start.py:46: TypeError
___________________________________________________________________________________________ test_foo[False-dave] ___________________________________________________________________________________________

status = False, name = 'dave'

    @pytest.mark.parametrize("status, name", [(True, "John"), (False, "dave")])
    def test_foo(status, name):
>       assert foo(status) == name
E    TypeError: foo() missing 1 required positional argument: 'json_data_two'

test_start.py:46: TypeError
========================================================================================= short test summary info ==========================================================================================
FAILED test_start.py::test_foo[True-John] - TypeError: foo() missing 1 required positional argument: 'json_data_two'
FAILED test_start.py::test_foo[False-dave] - TypeError: foo() missing 1 required positional argument: 'json_data_two'

Я немного растерялся, как его реализовать, но я хочу, чтобы sh проверял каждые json данные, тогда, если status == True return "name" == "John", но если status == False return "name" == "dave"

Я полагаю, что можно использовать parametrize, но мне трудно понять это.

Спасибо.

1 Ответ

2 голосов
/ 28 апреля 2020

Во-первых, ваша фактическая функция, вероятно, должна выглядеть примерно так:

def foo(json_data):
    if json_data["status"]:
        return json_data["name"]
    elif:
        return "Nope"

Я не знаю, что вы на самом деле хотите сделать, но функция как есть не имеет смысла. Конечно, вы должны заменить свою фактическую функцию.

Тогда ваш тест может выглядеть следующим образом:

@pytest.mark.parametrize("data, result", [(json_data_one, "John"), 
                                          (json_data_two, "Nope")])
def test_foo(data, result):
    assert foo(data) == result

Опять же, ваш фактический результат, безусловно, является чем-то другим, но я не понял что вы пытаетесь сделать, поэтому вы должны адаптировать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...