V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
piaochen0
V2EX  ›  Django

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

  •  
  •   piaochen0 · 117 天前 · 638 次点击
    这是一个创建于 117 天前的主题,其中的信息可能已经有所发展或是发生改变。

    环境描述:
    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 表?

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

    5 条回复    2021-04-02 16:50:27 +08:00
    Cooky
        1
    Cooky   117 天前 via Android
    配俩数据库,把 Django 自己的那部分放 SQLite 里,搜一下就有
    Vegetable
        2
    Vegetable   117 天前
    关于 migrations 的问题,你可以试一下这个。
    https://docs.djangoproject.com/zh-hans/3.1/topics/db/multi-db/#allow_migrate

    我面临这种测试需要依赖存量数据的情况时,并没有让测试代码去连接去访问只读数据库,而是 copy 了一份旧数据当作测试数据,放到同一个数据库了,并编写一个专门的 db router,将测试代码指向这些数据。主要是我本地测试也连不到那个线上数据库,避免了一些麻烦事
    piaochen0
        3
    piaochen0   117 天前
    @Cooky 现在就是配的两个数据库,default 配置的就是 mysql 的,mysql 里面本身就有 django 自带的表。现在是 oracle 里面莫名其妙多了一个 django_migrations 表,内容也和 mysql 里面的一样。
    Vegetable
        4
    Vegetable   117 天前
    哦对,因为 django 自动创建测试数据库,我还得在 setup 里边执行一个导入 sql,先这些数据表初始化。测试的时候只用了一个 sqlite 。
    Cooky
        5
    Cooky   117 天前 via Android
    @piaochen0 你定义完 model 之后 migrate 生成的吧,看看有没有对应的 py
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   964 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 20:38 · PVG 04:38 · LAX 13:38 · JFK 16:38
    ♥ Do have faith in what you're doing.