道理是明白的: 容易实现并发执行测试用例(毕竟目前单线程执行的方式速度太慢了)
但有个测试场景该怎么处理:
测试用例,需要执行 sql 、验证 sql 的正确性, 所以我会: 1 ) 先清空表 2 ) 插入数据 3 ) 执行测试逻辑
如果多个测试用例,会清空同样的表,就无法保证独立性……
能否不清空呢? 比如有时候测试: 没有数据的逻辑……
1
ruanimal 2021-03-19 16:11:02 +08:00
mock 呗, 除了直接测试数据库,其他都用 mock
|
2
liujavamail 2021-03-19 16:12:19 +08:00
用例之间独立,主要是为了防止测试数据的干扰,单个测试用例,测试前后,数据库都应该都是干净的。
|
3
111111111111 2021-03-19 16:13:13 +08:00
用例之间独立并不为例并发执行,当然了 如果要并发执行测试,那么用例直接应当”真正的独立”,包括各自使用独立的数据库或其他外部资源
|
4
111111111111 2021-03-19 16:14:32 +08:00
例如在 setUp 中为用例创建一个独用数据库(或其他资源)
|
5
ebingtel OP @ruanimal 只靠 mock 感觉 mock 的量会比较大吧
@liujavamail @111111111111 @111111111111 目前是在测试之前 dump 一份新的数据库,基于该数据库执行测试用例,然后删除该库 |
6
IvanLi127 2021-03-19 17:06:37 +08:00
单测用例,调用数据库的方法应该 mock 掉。
|
7
liujavamail 2021-03-19 18:37:07 +08:00
@ebingtel 在 rails 里面, 开发环境和测试环境都有自己独立的数据库, 运行测试代码的时候, 插入数据和删除数据都是在测试的数据库中,所以会比较干净, 并且每个测试用例的需要的数据量并不大, 插入删除,并不会花多少时间, 可以借鉴一下
|
8
jones2000 2021-03-20 01:12:46 +08:00
增加预算加机器, 多部署几套 docker 的测试环境不就可以了. 代码都不用改. 以后简历也好看, 参与大规模集群并行测试.
|
9
msg7086 2021-03-20 09:22:01 +08:00
事务把请求包起来。
|
11
xiaolinjia 2021-03-22 10:12:07 +08:00
不是有个 setUpClass 、tearDownClass 类方法吗,清空表的操作,放在 tearDownClass 里不就行了。
|
12
jones2000 2021-03-22 19:43:49 +08:00
@ebingtel 装机器,docker 运维部门会做, 环境好了做一个镜像, 然后就可以直接跑用例. 跑完用例用镜像还原, 然后再跑下一个测试用例.
|
13
ebingtel OP @jones2000 唉 我目前是在 pre-commit 之前 完成 testcase 的 所以希望快点 单个项目被测试的接口大概 50 ~ 100……
|
14
angryPHP 2022-12-29 10:22:06 +08:00
遇到同样的问题,楼主后面是怎么处理的?
|