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

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

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

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

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

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

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

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

共收到 22 条回复 时间 点赞
LTDDDD 回复

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

mai 回复

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

王稀饭 回复

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

ysir 回复

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

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

mai 回复

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

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

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

ysir 回复

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ouroboros 回复

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

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

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

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

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