El parche no tiene efecto en la competencia

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

Supongo que te gusta

Origin blog.csdn.net/qq_42648305/article/details/112858427
Recomendado
Clasificación