V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
chenqh
V2EX  ›  Python

单元测试的时候创建数据库,插入测试数据耗时太长怎么办

  •  
  •   chenqh · 2020-06-26 16:46:14 +08:00 · 3449 次点击
    这是一个创建于 1616 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我现在随便跑一个测试都是 7-10s, 哪怕是一个简单的 self.assertEqual(1,1) 也要这么久,因为创建数据库的表和插入数据耗时太长,有什么办法加速创建的吗?

    19 条回复    2020-06-27 17:20:36 +08:00
    linvaux
        1
    linvaux  
       2020-06-26 16:47:06 +08:00
    你可能对单元测试有啥误解
    gwy15
        2
    gwy15  
       2020-06-26 16:47:58 +08:00 via Android
    sqlite 内存数据库?
    chenqh
        3
    chenqh  
    OP
       2020-06-26 17:06:47 +08:00
    @gwy15 mysql
    chenqh
        4
    chenqh  
    OP
       2020-06-26 17:07:47 +08:00
    @linvaux 虽然真正的单元测试不带数据库,但是不带数据库我总感觉心里好慌,你也可以认为我的是集成测试吧
    tinypig
        5
    tinypig  
       2020-06-26 17:11:28 +08:00   ❤️ 1
    --reuse-db
    love
        6
    love  
       2020-06-26 17:44:24 +08:00
    单元测试开始时开事务,结束后直接回滚会不会提速?
    chenqh
        7
    chenqh  
    OP
       2020-06-26 17:48:23 +08:00
    @love 这应该不行
    chenqh
        8
    chenqh  
    OP
       2020-06-26 17:48:34 +08:00
    @tinypig 这个是什么东西?
    chinvo
        9
    chinvo  
       2020-06-26 17:51:21 +08:00 via iPhone
    一般单元测试到翻译出 SQL 语句为止,不实际执行的……

    集成测试再做实际执行
    draymonder
        10
    draymonder  
       2020-06-26 19:03:12 +08:00
    单元测试 直接 mock 执行 sql.
    janxin
        11
    janxin  
       2020-06-26 21:28:16 +08:00
    mock 掉数据库
    jones2000
        12
    jones2000  
       2020-06-26 22:25:46 +08:00
    单元测试 只要能覆盖所有的代码分支,执行速度都是其次的吧, 一般不都是半夜自动编译出版本然后跑一遍所有的单元测试,出测试报告,
    huijiewei
        13
    huijiewei  
       2020-06-26 23:13:18 +08:00 via iPhone
    单元测试不要牵扯基础设施层
    nuk
        14
    nuk  
       2020-06-26 23:19:27 +08:00
    LOAD DATA LOCAL INFILE 快一点。。。吧
    mawerss1
        15
    mawerss1  
       2020-06-26 23:52:26 +08:00 via iPhone
    分享一下我的解决办法,mock datasource,和数据库链接,然后产生一条 sql,手写出正确的 sql 去和正确的 sql 对比。
    Kaiv2
        16
    Kaiv2  
       2020-06-27 08:21:09 +08:00 via Android
    试试 h2 内存数据库
    lzlee
        17
    lzlee  
       2020-06-27 12:13:43 +08:00
    可以 mock
    可以用 h2

    但是单元测试的初衷, 并不是把 db 也包含进去
    chenqh
        18
    chenqh  
    OP
       2020-06-27 12:26:57 +08:00
    @Kaiv2
    @lzlee 我看下 h2
    Banxiaozhuan
        19
    Banxiaozhuan  
       2020-06-27 17:20:36 +08:00
    难道不是 Mock 吗? 单元测试可能只关心内部状态不该关心数据库
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1050 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 20:45 · PVG 04:45 · LAX 12:45 · JFK 15:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.