其他测试框架 红包求解决方案,接口自动化初始化数据如何保存?

来了不是深圳人 · 2023年12月11日 · 最后由 重来看雨 回复于 2023年12月15日 · 5005 次阅读

接口自动化测试要初始化数据

目前是把初始化的数据以文件的形式保存在 cos 存储上,每次运行用例之前从 cos 下载数据初始化。

但是接口依赖的数据对应的表结构会经常变,比如新增字段

那么后续维护测试用例的时候,我要把原来的文件下载下来,修改后重新上传,或者在用例的前面 写 sql 更新表结构和数据

这样我感觉维护成本很高,不方便

各位老师有没有好的解决方案推荐,红包感谢。

共收到 22 条回复 时间 点赞

接口变了的话,没什么好办法,只能跟着变

我以为是红包功能求解决方案,没想到是用红包求解决方案

GPT3.5 的回答,自己识别可行性
在接口自动化测试中,如果接口依赖的数据表结构频繁变更,如新增字段,可以考虑以下几种方法来进行初始化数据:

  1. 使用数据填充工具:可以使用数据填充工具,如 Faker 等,来生成符合新表结构的测试数据。这些工具可以根据表结构自动生成随机数据,包括新增字段。

  2. 动态生成数据:可以在测试用例执行之前,通过代码动态生成符合新表结构的数据。根据新增字段的要求,可以编写代码来生成合适的测试数据,并在每次测试用例执行前进行数据生成。

  3. 数据库脚本管理:将初始化数据的操作和维护数据的操作写成数据库脚本,通过版本控制工具(如 Git)对脚本进行管理。每次表结构变更时,只需修改对应的数据库脚本,然后在运行用例之前执行脚本来更新数据。

  4. 数据库迁移工具:如果表结构的变化较大,可以考虑使用数据库迁移工具,如 Flyway 或 Liquibase。这些工具可以帮助管理数据库结构的变化,并自动执行相应的更新操作。

无论选择哪种方法,都需要保证测试数据的一致性和正确性。频繁变更表结构时,及时更新数据初始化的方法是非常重要的,以确保测试用例的准确性和可靠性。

封个初始化数据的接口。不过维护成本也不小

如果表结构发生变化的话,比如说新加了表,或者新加了字段,可以写个脚本用增量的方式同步下表结构,自动化执行前先调用下这个脚本。

不清楚你备份的数据有没有表结构,恢复是清空表还是创建表,不好细说。

读库用 json 存数据就行吧。不过是啥场景要把文件存 cos 去再从 cos 读,看描述是配置文件和库表有关联,直接读库不行么🤔

没看懂问题,怎么听怎么不合理。

为什么数据库增加字段还能影响你的自动化用例?自动化里面做什么逻辑?

莫非你的意思是,你这个接口自动化里需要去创建一个 table ?

mai 回复

文件里面存的是 接口测试依赖的建库建表,插入数据的 sql 语句

测试之前是 docker 启用的一个完全空的数据库,必须插入数据才能测试,但是相关的表结构变化了,新增字段了,维护很麻烦

json 能存很多数据吗?大几百上千条测试用例的数据,可能一个测试用例的相关建库建表数据语句就有 几百条

ysir 回复

文件里面存的数据包含表结构,和插入的数据,就是觉得这样每次要改文件,挺麻烦了,请教一下有没有更好的存数据的方式

ysir 回复

是的,我在帖子里面说了,只能在脚本前面加一句新增字段的 sql 语句
一些有默认值的就更新为默认值,有一些存在业务逻辑的字段就要把文件下载下来,修改文件里面 sql 语句修改数据,再上传,觉得效率有点低

Ouroboros 回复

我用 sql 文件的这种存储方式,就不好去批量修改了,所以想问一下有没有更好的初始化数据的存储方式

肯定得跟这变,就是想问一下,初始化的 sql 数据,怎么存储维护的时候方便一点

请问你的自动化是做成代码的还是在你们平台上的呢?如果是代码的,其实建议如果单个用例需要的字段量不是很大的话,可以把测试数据直接写在你的.py 文件里

所以最终还是维护 mysql 表,这个就跑不了,用文件形式维护 sql 是可以的,但是为啥要去传 cos,直接放 git 里不行么,也好维护

  1. 如果 table 里新增的字段本身有默认值,而且你的自动化也和新增字段没关系,那你在构造数据库数据库时就可以直接 INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...); 来达到指定字段插入值的目的;
  2. 如果 table 里新增的字段本身还没有默认值,而且沟通后这个字段不能赋默认值,那就没有办法。因为你已经和 table 完全耦合绑死,table 一改你就得跟着改测试数据。你最多能做的就是把你的测试数据写成例如 csv 这种比较好处理的格式,到时改数据直接用 vscode 或者任何编辑器做正则全局搜索替换字符去批量更改数据;或者更高级一点你提前封装诸如 sed 命令或者任何批量修改你测试数据的脚本来提高你该数据的效率
王稀饭 回复

测试用例的数据量比较大
csv 的管理测试用例的方式,有没有文档推荐

mai 回复

因为数据量很大,你们做测试的时候测试数据量不大吗?

LTDDDD 回复

目前我有差不多 1000 条测试用例,都放代码里面,肯定是不合适的,要分开

csv 只是一种文本格式,简单说就是 value1,value2,value3,value4 等通过逗号去隔开不同数据的文本格式,人眼上有可读性,格式简单也方便统一改,网上搜一下就可以了。python 本身也有内置的 csv 文件解析类可以 import。

这种方式可以试下适不适合:用老的测试数据恢复,再用编写个脚本 根据开发库动态用增量的方式补充表结构(用例执行前自动调用脚本,记录下缺少的表,缺少的字段(包括对应的表名))
如果比较理想的话,动态新增的字段没有值,但不影响用例运行;如果新增的字段必须有值用例才能跑的话,估计只能手工改测试数据了。
测试用例都跑完后,可以再用一个脚本 根据记录下来缺少的表和字段,去维护下服务器上的测试数据文件。

我之前的方案,自动化环境中每次运行测试,创建新的 docker 数据库,将建表等初始化语句从 QA 环境同步后,将基础数据写入到数据库中,业务数据则具体维护,如低频改动的,也可以放到基础数据中。
这块其实没啥好办法,用例失败只能及时维护。能做到最好的情况,则根据表的数据结构,将变动的字段,做相应处理后再写入到数据库中。

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