如何在pytest中拦截数据库请求(Peewee ORM)



我有一个主数据库和一个副本(它们在测试环境中是相同的(:

core_db = PooledPostgresqlExtDatabase(**DB_COFIG)
replica_db = PooledPostgresqlExtDatabase(**DB_REPLICA_COFIG)

根据型号在不同数据库中执行查询的控制器

class BaseController:
def _get_logs(self):
query = self.model.select()
if is_instance(self.model, ModelToReplica)
query = query.bind(replica_db)
return list(query)
class ReplicaExampleController(BaseLogsController):
model = ModelToReplica
def process(self):
return self._get_logs()
class BaseExampleController(BaseLogsController):
model = BaseModel
def process(self):
return self._get_logs()

控制器链接到两个url:

/get_core_result/ # Returns the result from BaseExampleController (core_db)
/get_replica_result/ # Returns the result from ReplicaExampleController (replica_db)

我想检查每个角落是否都能进入正确的底部。我知道对数据库对象的引用存储在请求对象中。我如何从测试中得到它?我正在使用PyTest。我知道我可能需要使用mock,但我不明白如何使用。

不幸的是,到目前为止我只有这些:

class TestSwitchDB:
def test_switch_db_to_replica():
url_core = url_for('core_db_controller')
core_result = self.client.get(url_core)
url_replica = url_for('replica_db_controller')
replica_result = self.client.get(url_replica)

testrongwitch_db_to_replica中,您可以模拟数据库查询并对其进行修补,这是

with patch(BaseController._get_logs) as mock_get_logs:
mock_get_logs.return_value="your expected return" 

作为参考:https://docs.python.org/3/library/unittest.mock-examples.html

相关内容

  • 没有找到相关文章

最新更新