V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐学习书目
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
simple2025
0D
V2EX  ›  Python

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

  •  
  •   simple2025 · Jun 26, 2020 · 3932 views
    This topic created in 2131 days ago, the information mentioned may be changed or developed.

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

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

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

    但是单元测试的初衷, 并不是把 db 也包含进去
    simple2025
        18
    simple2025  
    OP
       Jun 27, 2020
    @Kaiv2
    @lzlee 我看下 h2
    Banxiaozhuan
        19
    Banxiaozhuan  
       Jun 27, 2020
    难道不是 Mock 吗? 单元测试可能只关心内部状态不该关心数据库
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   936 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 55ms · UTC 21:26 · PVG 05:26 · LAX 14:26 · JFK 17:26
    ♥ Do have faith in what you're doing.