conftest.py
@pytest.fixture(autouse=True)
def patch_result_table_permission():
"""Mock获取RT权限查询"""
from aiops.common.apis.modules import auth
auth.get_project_has_permission_result_table = lambda x: [
'test_table'
]
Puede tener efecto en el archivo de prueba, pero no tiene efecto cuando el archivo de prueba llama a vistas en otro archivo. Es porque pytest importará los módulos primero y luego buscará accesorios en los módulos. En este momento, se ejecutará get_project_has_permission_result_table importado en el archivo de vistas, y luego se ejecutará la operación del accesorio.
Debido a que el archivo de vista se importó primero, era demasiado tarde para ejecutar el dispositivo.
Solución 1
pytest medio nuevo aumento pytest_sessionstart
def pytest_sessionstart(session):
from aiops.common.apis.modules import auth
auth.get_project_has_permission_result_table = lambda x: [
'test_table'
]
Solucion 2
Use el módulo simulado directamente, y la ruta del simulacro es get_project_has_permission_result_table en las vistas, no el lugar definido, porque cuando la función se importa en las vistas, ya está vinculada a un nombre local en este módulo.
@mock.patch('aiops.common.apis.modules.meta.MetaApi.result_tables.retrieve')
@mock.patch('aiops.common.apis.modules.query.QueryApi.query')
@mock.patch('aiops.logic.sample_set.views.result_table.get_project_has_permission_result_table')
def test_result_table_groups(self, mock_permission, mock_query, mock_result_tables_retrieve):
mock_permission.return_value = ['test_table']
referencia
https://stackoverflow.com/questions/46733332/how-to-monkeypatch-the-environment-using-pytest-in-conftest-py