Как получить доступ к БД 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 и т.д.), и тесты могут не сработать.

Вернуться на верх