Python 3.x pytest失败:不允许访问数据库,请使用;django_db";标记,或;db";或;事务性“数据库”;要启用它

Python 3.x pytest失败:不允许访问数据库,请使用;django_db";标记,或;db";或;事务性“数据库”;要启用它,python-3.x,pytest,django-testing,pytest-django,Python 3.x,Pytest,Django Testing,Pytest Django,在从shell调用pytest期间,我得到以下输出,因为我的测试存储在apps.business.metrics.tools.tests.py中,并且在导入模块期间 apps/business/metrics/widgets/employees/utilization.py 在模块调用期间对SQL进行实时调用。这是由 get\u metric\u列('employeeuse',shapers=shapers) 和pytest投诉: ➜ pytest =======================

在从shell调用pytest期间,我得到以下输出,因为我的测试存储在apps.business.metrics.tools.tests.py中,并且在导入模块期间

apps/business/metrics/widgets/employees/utilization.py

在模块调用期间对SQL进行实时调用。这是由

get\u metric\u列('employeeuse',shapers=shapers)

和pytest投诉:

➜ pytest
=========================================================================== test session starts ===========================================================================
platform linux -- Python 3.6.8, pytest-4.0.0, py-1.7.0, pluggy-0.8.0
Django settings: config.settings.local (from ini file)
rootdir: /home/dmitry/Projects/analytics/backend, inifile: pytest.ini
plugins: django-3.4.7, pylama-7.6.6, django-test-plus-1.1.1, celery-4.2.1
collected 60 items / 1 errors                                                                                                                                             

================================================================================= ERRORS ==================================================================================
__________________________________________________________ ERROR collecting apps/business/metrics/tools.tests.py __________________________________________________________
../../../.pyenv/versions/3.6.8/envs/cam/lib/python3.6/site-packages/py/_path/local.py:668: in pyimport
    __import__(modname)
apps/business/metrics/__init__.py:3: in <module>
    from .widgets import *  # noqa
apps/business/metrics/widgets/__init__.py:1: in <module>
    from . import help  # noqa
apps/business/metrics/widgets/help.py:1: in <module>
    from .employees.utilization import EmployeeSwarmUtilization
apps/business/metrics/widgets/employees/utilization.py:19: in <module>
    get_metric_columns('EmployeeUtilization', shapers=SHAPERS)
apps/business/metrics/tools.py:132: in get_metric_columns
    m = get_metric(metric, period=p, shapers=shapers)
apps/business/metrics/data/__init__.py:23: in get_metric
    return metrics[name](*args, **kwargs)
apps/business/metrics/data/abstract.py:441: in __init__
    self._to_dataframe(self.sql or self._ingest())
apps/business/metrics/data/abstract.py:472: in _to_dataframe
    source, connection, params=query_params, index_col=self.index
../../../.pyenv/versions/3.6.8/envs/cam/lib/python3.6/site-packages/pandas/io/sql.py:381: in read_sql
    chunksize=chunksize)
../../../.pyenv/versions/3.6.8/envs/cam/lib/python3.6/site-packages/pandas/io/sql.py:1413: in read_query
    cursor = self.execute(*args)
../../../.pyenv/versions/3.6.8/envs/cam/lib/python3.6/site-packages/pandas/io/sql.py:1373: in execute
    cur = self.con.cursor()
../../../.pyenv/versions/3.6.8/envs/cam/lib/python3.6/site-packages/django/db/backends/base/base.py:255: in cursor
    return self._cursor()
../../../.pyenv/versions/3.6.8/envs/cam/lib/python3.6/site-packages/django/db/backends/base/base.py:232: in _cursor
    self.ensure_connection()
E   Failed: Database access not allowed, use the "django_db" mark, or the "db" or "transactional_db" fixtures to enable it.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 1 errors during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
========================================================================= 1 error in 2.43 seconds =========================================================================
➜ 皮特斯特
===========================================================================================================================测试会话开始===========================================================================
平台linux——Python 3.6.8、pytest-4.0.0、py-1.7.0、Plugy-0.8.0
Django设置:config.settings.local(来自ini文件)
rootdir:/home/dmitry/Projects/analytics/backend,ini文件:pytest.ini
插件:django-3.4.7、pylama-7.6.6、django-test-plus-1.1.1、芹菜-4.2.1
收集了60项/1个错误
==============================================================================================================================错误==================================================================================
__________________________________________________________收集应用程序/业务/指标/工具时出错。tests.py__________________________________________________________
../../../...pyenv/versions/3.6.8/envs/cam/lib/python3.6/site packages/py/_path/local.py:668:在pyimport中
__导入(modname)
apps/business/metrics/_______.py:3:in
from.widgets import*#noqa
apps/business/metrics/widgets/_______.py:1:in
从…起导入帮助#noqa
apps/business/metrics/widgets/help.py:1:in
from.employees.use导入EmployeesArmutilization
apps/business/metrics/widgets/employees/utilization.py:19:in
获取度量列('EmployeeUtilization',shapers=shapers)
apps/business/metrics/tools.py:132:在get\u metric\u列中
m=获取度量(度量,周期=p,整形器=整形器)
apps/business/metrics/data/__init__;py:23:in get_metric
返回指标[名称](*args,**kwargs)
apps/business/metrics/data/abstract.py:441:in\uu init__
self.\u到数据帧(self.sql或self.\u insect())
apps/business/metrics/data/abstract.py:472:in_to_数据框
源、连接、参数=查询参数、索引列=自索引
../../../...pyenv/versions/3.6.8/envs/cam/lib/python3.6/site-packages/pandas/io/sql.py:381:in-read\u-sql
chunksize=chunksize)
../../../...pyenv/versions/3.6.8/envs/cam/lib/python3.6/site packages/pandas/io/sql.py:1413:in read\u query
游标=self.execute(*args)
../../../...pyenv/versions/3.6.8/envs/cam/lib/python3.6/site packages/pandas/io/sql.py:1373:在执行中
cur=self.con.cursor()
../../../...pyenv/versions/3.6.8/envs/cam/lib/python3.6/site packages/django/db/backends/base/base.py:255:在游标中
返回自我。_cursor()
../../../...pyenv/versions/3.6.8/envs/cam/lib/python3.6/site packages/django/db/backends/base/base.py:232:in\u cursor
self.sure_连接()
E失败:不允许访问数据库,请使用“django_db”标记或“db”或“transactional_db”装置启用它。
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 中断:收集过程中出现1个错误!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
=================================================================================================================================================2.43秒内出现1个错误=========================================================================
有没有办法用pytest处理这种情况? 我知道我可以将get\u metric\u列('EmployeeUtilization',shapers=shapers)转换为部分函数并更改实现,但是有其他方法吗?

解决方案:

import pytest


@pytest.mark.django_db
class TestExample:
    def test_one():
        ...
假设您已经在测试文件中创建了一个
TestExample
类,并且应该用
@pytest.mark.django_db
修饰它。它应该能解决你的问题