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
ebingtel
V2EX  ›  Python

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

  •  
  •   ebingtel · 2021-03-19 16:07:57 +08:00 · 2227 次点击
    这是一个创建于 1375 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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