Django 连接 oracle 进行单元测试时创建测试用户的问题

2021-04-02 15:00:47 +08:00
 piaochen0

环境描述:
Django default 数据库用的 mysql,现在一个功能需要查询 oracle 数据库中的一些存量表。(不是用 django 模型建立的,其他系统的存量表。此处只是查询这些表。)

现象和过程:
现在进行单元测试的时候发现,加了--keep 的情况下,mysql 没问题,但是 oracle 会打印:
Creating test user...
在 oracle 中,真的发现新建了一个 test_XXX 的用户
网上搜了一圈,看到有文章说在 oracle 数据库连接配置中,加入:
'TEST': {
"USER": "原用户名",
}
这样试了以后,测试是跑起来了,但是该连接用户的密码却被改了...
应该是单元测试新建用户的时候,发现系统中有同名用户,就直接把密码改了

于是我继续把 PASSWORD 也加进去,这样能跑起来了。但是该用户下,多了一张 django_migrations 表。
'TEST': {
"USER": "原用户名",
"USER": "原用户密码",
}

问题:
此处我只想用单元测试去查询这些 oracle 的表,很多情况下配的 oracle 的用户只有查询权限。
这种情况下我这样配置有没有问题。还是应该写成其他的样子?
单元测试时如何不在 oracle 上生成 django_migrations 表?

这块我搜了好久,没找到有效答案。麻烦各位。多谢。

1817 次点击
所在节点    Django
5 条回复
Cooky
2021-04-02 15:09:21 +08:00
配俩数据库,把 Django 自己的那部分放 SQLite 里,搜一下就有
Vegetable
2021-04-02 15:15:36 +08:00
关于 migrations 的问题,你可以试一下这个。
https://docs.djangoproject.com/zh-hans/3.1/topics/db/multi-db/#allow_migrate

我面临这种测试需要依赖存量数据的情况时,并没有让测试代码去连接去访问只读数据库,而是 copy 了一份旧数据当作测试数据,放到同一个数据库了,并编写一个专门的 db router,将测试代码指向这些数据。主要是我本地测试也连不到那个线上数据库,避免了一些麻烦事
piaochen0
2021-04-02 15:17:00 +08:00
@Cooky 现在就是配的两个数据库,default 配置的就是 mysql 的,mysql 里面本身就有 django 自带的表。现在是 oracle 里面莫名其妙多了一个 django_migrations 表,内容也和 mysql 里面的一样。
Vegetable
2021-04-02 15:18:51 +08:00
哦对,因为 django 自动创建测试数据库,我还得在 setup 里边执行一个导入 sql,先这些数据表初始化。测试的时候只用了一个 sqlite 。
Cooky
2021-04-02 16:50:27 +08:00
@piaochen0 你定义完 model 之后 migrate 生成的吧,看看有没有对应的 py

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/767561

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX