- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试进行一个简单的测试来对抗真实的 django_db
不是使用 django rest framework
的测试数据库.
基本测试设置:
import pytest
from django.urls import reverse
from rest_framework import status
from rest_framework.test import APIClient
@pytest.mark.django_db
def test_airport_list_real():
client = APIClient()
response = client.get(reverse('query_flight:airports-list'))
assert response.status_code == 200
assert len(response.json()) > 0
___________________________ test_airport_list_real ____________________________
@pytest.mark.django_db
def test_airport_list_real():
client = APIClient()
response = client.get(reverse('query_flight:airports-list'))
assert response.status_code == 200
> assert len(response.json()) > 0
E assert 0 > 0
E + where 0 = len([])
E + where [] = functools.partial(<bound method Client._parse_json of <rest_framework.test.APIClient object at 0x000001A0AB793908>>, <Response status_code=200, "application/json">)()
E + where functools.partial(<bound method Client._parse_json of <rest_framework.test.APIClient object at 0x000001A0AB793908>>, <Response status_code=200, "application/json">) = <Response status_code=200, "application/json">.json
query_flight\tests\query_flight\test_api.py:60: AssertionError
pipenv run python manage.py shell
在 shell 中运行时我得到了预期的结果:
In [2]: from rest_framework.test import APIClient
In [3]: client = APIClient()
In [4]: response = client.get(reverse('query_flight:airports-list'))
In [5]: len(response.json())
Out[5]: 100
pytest-django==3.2.1
pytest [required: >=2.9, installed: 3.5.1]
djangorestframework==3.8.2
django [required: >=1.8, installed: 2.0.5]
pytest
以这种方式访问真正的数据库?
最佳答案
django_db
标记只负责为标记的测试提供到测试数据库的连接。 django 设置传递给 pytest-django
全权负责选择用于测试运行的数据库。
您可以覆盖 pytest-django
中的数据库使用情况通过定义 django_db_setup
fixture 。创建一个 conftest.py
如果您还没有项目根目录中的文件并覆盖数据库配置:
# conftest.py
import pytest
@pytest.fixture(scope='session')
def django_db_setup():
settings.DATABASES['default'] = {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'path/to/dbfile.sqlite3',
}
python manage.py dumpdata > testdata.json
) 并将其加载到空的测试数据库中以在测试运行之前填充它:
# conftest.py
import pytest
from django.core.management import call_command
@pytest.fixture(scope='session')
def django_db_setup(django_db_setup, django_db_blocker):
with django_db_blocker.unblock():
call_command('loaddata', 'testdata.json')
testdata.json
你的测试很顺利。
pytest-django
docs .
关于django - Pytest 使用 django_db 和 rest 框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50381739/
早上好,我正在使用从 django.test.TestCase 继承的测试,我在使用 setupclass 方法时遇到问题,因为访问数据库并引发此错误“失败:不允许访问数据库,使用“django_db
我正在使用 pytest,我在下面的 fixture 中遇到数据库访问问题。我到处都有 django_db 标记。 [test_helpers.py] import pytest from dja
我正在使用 pytest,我在下面的 fixture 中遇到数据库访问问题。我到处都有 django_db 标记。 [test_helpers.py] import pytest from dja
我正在尝试进行一个简单的测试来对抗真实的 django_db不是使用 django rest framework 的测试数据库. 基本测试设置: import pytest from django.u
我的一项 celery 任务遇到了一些奇怪的行为。 def run_single_test(test_name_or_decorator): # get dict of test names,
我正在尝试运行 pytest 并收到此错误:RuntimeError: Database access not allowed, use the "django_db" mark, or the "d
我的问题是下面那个。如果我尝试运行测试,它会说没有数据库权限,我必须添加该 fixture 。问题是我已经将该固定装置添加到我拥有的任何可能的方法中,但仍然没有。所以我假设我不知道在哪里添加这个标记。
调用期间 pytest 从 shell 我得到以下输出,因为我的测试存储在 apps.business.metrics.tools.tests.py , 并在导入模块期间 apps/business/
我是一名优秀的程序员,十分优秀!