#python-3.x #pytest
#python-3.x #pytest
Вопрос:
Я передаю два приспособления setup_registered_consultant и setup_registered_customer в мой тестовый пример, но последний аргумент setup_registered_customer не распознается. Мой тестовый пример HTTP_AUTHORIZATION='Token ' registered_response2.json()['token_key']
завершается ошибкой test_userdetail_logged_in_customer_accesses_consultant_user_detail_view_success - KeyError: 'token_key'
def test_userdetail_logged_in_customer_accesses_consultant_user_detail_view_success(db, client, setup_registered_consultant, setup_registered_customer):
registered_response = setup_registered_consultant
registered_response2 = setup_registered_customer
userdetail_response = client.get(path=reverse('user-detail', args=(str(registered_response.json()['id']),)),
HTTP_AUTHORIZATION='Token ' registered_response2.json()['token_key'])
assert userdetail_response.status_code == status.HTTP_200_OK
Как я могу передать несколько приспособлений через тестовый пример?
Отредактировано:
@pytest.fixture
def setup_registered_customer(db, client):
client.post(path=reverse('auto-signup-anonymous-user'),
data={"device_serial": "device1", "device_brand": "Apple",
"device_version": "1.0", "device_country": "US"})
response = client.post(path=reverse('register'),
data={"device_serial": "device1", "username": "registereduser1",
"email": "registereduser1@example.com", "password": "12345678"})
return response
@pytest.fixture
def setup_registered_consultant(db, client):
client.post(path=reverse('auto-signup-anonymous-user'),
data={"device_serial": "device1", "device_brand": "Apple",
"device_version": "1.0", "device_country": "US"})
response = client.post(path=reverse('register'),
data={"device_serial": "device1", "username": "registereduser1",
"email": "registereduser1@example.com", "password": "12345678"})
get_user_model().objects.filter(username="registereduser1").update(is_consultant=True)
ConsultantProfile.objects.create(user=get_user_model().objects.get(username="registereduser1"))
return response
Комментарии:
1. Можете ли вы показать код
setup_registered_customer
? Я почти уверен, что вы можете передать столько приспособлений, сколько захотите, точно так же, как в вашем коде. Я бы предположилKeyError
, что это означает, что с самим приспособлением что-то не так, что ответ не содержит ожидаемого ключа.2. Снова смотрите сообщение. Я продолжаю получать эту ошибку, если переключаю setup_registered_consultant вместо setup_registered_customer . Последний аргумент всегда терпит неудачу, независимо от того, является ли он консультантом или клиентом… Если я переключу последние два аргумента, эта часть завершится ошибкой args=(str(registered_response.json()[‘id’])
3. Я думаю, что последний аргумент всегда терпит неудачу, потому что вы назначаете его
registered_response2
, иregistered_response2
это то, что вы пытаетесь извлечьtoken_key
, и, по-видимому, этого нет в ответе. Может быть, попробуйте напечатать весь ответ в верхней части теста или внутри приспособления для проверки?4. Исправлено. Мое имя пользователя / адрес электронной почты setup_registered_consultant конфликтовало с именем пользователя и адресом электронной почты setup_registered_customer . Мне просто нужно было указать setup_registered_consultant другое имя пользователя / адрес электронной почты. Вы можете написать это в разделе ответа, и я выберу ваш ответ как лучший. Спасибо
Ответ №1:
Тестовый пример должен принимать любое количество приспособлений в списке аргументов, и порядок не имеет значения. Ваш код выглядит совершенно правильно в этом отношении.
KeyError: 'token_key'
предполагает, что с переменной может быть что-то не так registered_response2
, т. Е. JSON, по-видимому, не содержит ключа «token_key», поэтому в конечном итоге это будет означать проблему с самим приспособлением, а не с тем, как оно передается в функцию тестового примера.
Как обсуждалось в комментариях к вопросу, это действительно имело место здесь: сервер возвращал неожиданный ответ из-за конфликта с размером серверной части, который был вызван тем, как сервер был вызван устройством.