Как получить доступ к БД Django ORM в pytest?
Я пишу дымовой тест для POST-запроса к API Django с помощью pytest. С помощью Post-запроса я записываю значение в БД и проверяю его появление. Данные из POST-запроса появляются в базе данных, но тест не проходит из-за ошибки, приведенной ниже.
import requests
from datetime import datetime
from json_import.models import Sensor
import pytest
BASE_URL = "http://localhost:8000"
POST_URL = "/api/write_values"
@pytest.mark.django_db
class TestAPI:
def test_smoke(self):
body = {
"timestamp": f"{datetime.now()}",
"sensor_values": [
{
"sensor_id": "sensor1",
"value": "1.1"
}
]
}
response = requests.post(f'{BASE_URL}{POST_URL}', json=body)
sensor1 = Sensor.objects.get(sensor_id='sensor1')
sensor_value1 = sensor1.sensor_values.last()
assert sensor_value1.sensor_value == 1.1
Полученная ошибка
E json_import.models.Sensor.DoesNotExist: Sensor matching query does not exist.
/usr/local/lib/python3.9/site-packages/django/db/models/query.py:435: DoesNotExist
Миграции выполнены, файл py test.ini создан.
В чем может быть проблема? Я искал решение проблемы в документации и на форуме.
Привет, как дела? Каков ответ от вашего response api, когда вы отправляете пост? Ответ 200? или 201? или что-то еще? Он создан
Другая вещь, попробуйте изменить BASE_URL на имя ресурса, вы можете сделать это с помощью python manage.py show_urls, но это расширение https://pypi.org/project/django-showurls/
Я говорю это потому, что ваш url не всегда будет тем, который у вас есть, и он может измениться в зависимости от используемой среды (prod, qa, devel и т.д.), и тесты могут не сработать.