推荐学习书目
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
ebingtel
V2EX  ›  Python

用例之间都是独立的……这一点该如何实践?

  •  
  •   ebingtel · Mar 19, 2021 · 2749 views
    This topic created in 1916 days ago, the information mentioned may be changed or developed.

    道理是明白的: 容易实现并发执行测试用例(毕竟目前单线程执行的方式速度太慢了)

    但有个测试场景该怎么处理:

    测试用例,需要执行 sql 、验证 sql 的正确性, 所以我会: 1 ) 先清空表 2 ) 插入数据 3 ) 执行测试逻辑

    如果多个测试用例,会清空同样的表,就无法保证独立性……

    能否不清空呢? 比如有时候测试: 没有数据的逻辑……

    14 replies    2022-12-29 10:22:06 +08:00
    ruanimal
        1
    ruanimal  
       Mar 19, 2021
    mock 呗, 除了直接测试数据库,其他都用 mock
    liujavamail
        2
    liujavamail  
       Mar 19, 2021
    用例之间独立,主要是为了防止测试数据的干扰,单个测试用例,测试前后,数据库都应该都是干净的。
    111111111111
        3
    111111111111  
       Mar 19, 2021
    用例之间独立并不为例并发执行,当然了 如果要并发执行测试,那么用例直接应当”真正的独立”,包括各自使用独立的数据库或其他外部资源
    111111111111
        4
    111111111111  
       Mar 19, 2021
    例如在 setUp 中为用例创建一个独用数据库(或其他资源)
    ebingtel
        5
    ebingtel  
    OP
       Mar 19, 2021
    @ruanimal 只靠 mock 感觉 mock 的量会比较大吧

    @liujavamail
    @111111111111
    @111111111111 目前是在测试之前 dump 一份新的数据库,基于该数据库执行测试用例,然后删除该库
    IvanLi127
        6
    IvanLi127  
       Mar 19, 2021
    单测用例,调用数据库的方法应该 mock 掉。
    liujavamail
        7
    liujavamail  
       Mar 19, 2021
    @ebingtel 在 rails 里面, 开发环境和测试环境都有自己独立的数据库, 运行测试代码的时候, 插入数据和删除数据都是在测试的数据库中,所以会比较干净, 并且每个测试用例的需要的数据量并不大, 插入删除,并不会花多少时间, 可以借鉴一下
    jones2000
        8
    jones2000  
       Mar 20, 2021
    增加预算加机器, 多部署几套 docker 的测试环境不就可以了. 代码都不用改. 以后简历也好看, 参与大规模集群并行测试.
    msg7086
        9
    msg7086  
       Mar 20, 2021
    事务把请求包起来。
    ebingtel
        10
    ebingtel  
    OP
       Mar 22, 2021
    @jones2000 是不是太重了?
    xiaolinjia
        11
    xiaolinjia  
       Mar 22, 2021
    不是有个 setUpClass 、tearDownClass 类方法吗,清空表的操作,放在 tearDownClass 里不就行了。
    jones2000
        12
    jones2000  
       Mar 22, 2021
    @ebingtel 装机器,docker 运维部门会做, 环境好了做一个镜像, 然后就可以直接跑用例. 跑完用例用镜像还原, 然后再跑下一个测试用例.
    ebingtel
        13
    ebingtel  
    OP
       Mar 23, 2021
    @jones2000 唉 我目前是在 pre-commit 之前 完成 testcase 的 所以希望快点 单个项目被测试的接口大概 50 ~ 100……
    angryPHP
        14
    angryPHP  
       Dec 29, 2022
    遇到同样的问题,楼主后面是怎么处理的?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5293 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 77ms · UTC 01:35 · PVG 09:35 · LAX 18:35 · JFK 21:35
    ♥ Do have faith in what you're doing.