我正在为多租户系统建立测试平台。在
对于每个编写的测试,我想为每个租户创建一个测试,并包装整个测试运行,以便在测试之前更改数据库连接和一些线程本地变量,而不会破坏数据库清理的位置。在
在我的尝试和错误过程中,我在pytest钩子链中爬得越来越高:我从pytest_generate_tests
开始为每个租户创建一个带有相关fixture的测试,但是teardown失败了,我的最终想法是:
def pytest_runtestloop(session):
for tenant in range(settings.TENANTS.keys()):
with set_current_tenant(tenant):
with environ({'DJANGO_CONFIGURATION': f'Test{tenant.capitalize()}Config'}):
session.config.pluginmanager.getplugin("main").pytest_runtestloop(session)
return True
虽然这不起作用(因为django-configurations
在前面的pytest_load_initial_conftests
阶段加载了设置),但是这个示例应该给出我要实现的目标的一个概念。在
最大的障碍是:default
数据库连接需要在加载任何fixture之前和运行flush
之后指向当前租户的数据库。在
我禁用了pytest-django
的默认会话固定机制,并计划使用外部数据库进行测试:
我可以有一个包装器python脚本,用正确的配置多次调用pytest
,但是我会丢失很多漂亮的工具。在
目前没有回答
相关问题 更多 >
编程相关推荐