接口测试 小白不懂就问:做接口测试产生的数据怎么清除

Ekre1c · 2020年11月20日 · 最后由 小狄子 回复于 2021年02月19日 · 6599 次阅读

比如测试创建订单,但是再跑这个接口时就会提示该订单已存在。
目前主要用的是 postman 和 python 的 request 做接口。
想问下这两个地方要如何删除之前跑的生成的数据

共收到 18 条回复 时间 点赞

1、每次都跑完整流程,换订单号
2、跑完后调用删数据接口,或者直接操作数据库/缓存删数据

我们这的规范是同一个环境, 自动化测试跑 n 遍,要求每一次必须互不影响,互相不依赖。 所以我们所有的数据都是在代码里创建的。创建的时候名称,标题,id 啥的生成必须是随机字符串。 所以我们基本不考虑删数据的事。

孙高飞 回复

会不会撞上 birthday paradox 哈哈

泰斯特 回复

啥意思?

孙高飞 回复

随机的次数多了 ,可能会撞车😂

孙高飞 回复

不过够随机,这个概率就毕竟少,我也暂时没有遇到过。基本一次测试数据用完的能自动删除就删除一下

泰斯特 回复

拿当前时间戳作为随机种子再加上随机字符串, 怎么会撞车呢。。。。

陈恒捷 回复

这个可行但是不够自动化,如果在 Jenkins 里跑岂不是每次跑完之后还要手动删数据

孙高飞 回复

👍 👍

如果是测试环境,对唯一性有要求的字段里加上时间戳基本上就不会重复了,而且测试环境的话也没什么必要删数据;
如果是生产环境就要谨慎一点,起码要数据隔离,别把测试数据暴露给客户或者污染真实生产数据了

孙高飞 回复

有些接口会做特殊校验,比如你输入的必须是合法的手机号或者公司名。如果每次都随机,可能会撞车

数据清理、接口依赖等场景在接口测试中经常碰到,做法可能有多种,满足自己的需求即可:
1、随机生成一些数据,保证每次接口请求参数不一样(适合测试环境);
2、setup、test、teardown 三段式的方式清理数据,可以每个 testcase 清一次,也可以是 testsuit 清理一次;
3、数据库备份还原方式,通过 sql、dump、或者镜像方式都可以,在每次执行自动化测试之前初始化。

Ekre1c 回复

不知道你想要多自动化?如果是自动化,teardown 的时候自动删就行了。如果是人工测试用,那总归得人去触发的,系统不知道你啥时候用完数据。

不过测试环境其实没必要删,每次都用新数据那老数据删不删都无所谓的,想办法让数据尽量不容易撞车就行。

创建订单号用(用户 ID+ 时间戳(毫秒 or 微秒)+ 随机数),或者再转(16 进制,62 进制)生成的订单号就算是并发跑,都很难会重复

结合实际的业务场景来,不是所有的数据都是可清除的。

分享一下我们当前的做法:

  1. 我们现在的自动化测试(不管是 UI 还是接口)都是参考了单元测试的 3A 原则(具体可上网查),然后我们自己加了一个清理环境(主要是数据)的 4A.
  2. 所有用例要用到的业务数据,全部固化在 sql 里面,每个用例会先插入数据,运行完之后删除数据(直接操作数据库,我们内部要求测试人员必须清晰知道哪些数据库被改动了)(插入数据,运行用例,比较结果,删除数据,这 4 部作为一个用例的完整步骤)。
  3. 经过上述的两个规范,所有的用例不会相互干扰,同时也不会受顺序的影响。(当然如果同一个用例同时运行,可能会造成数据的影响)。
  4. 另外,在网上看到有人提出使用内存数据库 H2(其实我也忘记在哪个自动化框架中见识过),每个用例运行前都初始化数据库,然后运行完了直接干掉数据库。具体操作方式没有实践过。

以上,仅供参考。

t-bug 回复

非常专业!

导库清库是个比较合适的方案

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册