接口测试 接口请求数据量测试如何进行?

li · 2022年04月08日 · 最后由 陈恒捷 回复于 2022年04月09日 · 5787 次阅读

工作中遇到一个问题,管理端有个接口 (get 请求),去获取服务器的数据。线上环境由于数据量过大,会经常请求失败。而测试环境数据量小就不会出现这个问题。
从接口测试的角度,如何在测试环境去模拟这种数据量较大的情况测试,测试标准怎么定呢?

共收到 9 条回复 时间 点赞

这不就是性能测试(压力测试)?

如果是数据总量大,那就分页处理就好了。
如果是单条数据的数据量大,那就评估下这个接口返回的数据是否是必要的,是否可以拆分。
这个和性能没什么关系,主要还是设计层面的问题

容量测试可以

“小”、“过大”、“较大”,都是定性描述。
对要测的数据量 “较大” 场景进行定量 (比如 300 万) 描述,然后测试环境定量创建或导入数据即可

  1. 我们以前是新弄一个测试环境,可以用 sql 或者接口测试自动化来造大批量数据,比如 10 万,百万;有这个环境还方便后面做性能测试,一般这种是新项目
  2. 另一种就是将线上数据每个月导出来清洗放入某个测试环境,这样数据量就有了
li #6 · 2022年04月09日 Author
国文 回复

我们现在只有一个测试环境是开发搭建和维护的,在这个环境就去制造大量数据去测试的方法可以用但是会造成测试环境大量废弃的数据,而且当时接口也没有性能测试,能不能大批量创建成功也是个问题。我突然发现我提的这个问题不太对,这个是服务器性能的问题,从接口请求上去验证不可行是吧

li #7 · 2022年04月09日 Author
CKL的思考 回复

这个问题开发在查询数据的方式上做了优化处理,但是测试环境无法直接验证。看大家的回复都是在测试环境去制造数据测试,不知道除此之外还有没有更好的方法

由于第一段话和第二段话的逻辑看起来很奇怪,没有能完全理解,上面已经有人说了,你的问题其实不是测试问题,而是本身服务端实现就存在已知的性能问题,和你做性能测试没有关系,问题在线上已经验证出来了,接下来应该是排查修改。

下面尝试回答你的两个问题。

问题 1:如何在测试环境去模拟这种数据量较大的情况测试

  1. 解法一:在测试环境伪造同样负载程度的数据,要关注数据类型分布,数据量比例一致(注意,并不线上 1000w 条数据线下就要 1000w 条数据,线上线下配置往往不对等)等问题;数据伪造的方式,有脚本批量生成、线上导流脱敏生成,一般需要待测试标志方便后续清理,或者影子库的方式去处理。
  2. 解法二:如果数据量级不好伪造,那就重新搭另一个测试环境。这个新测试环境的硬件配置要更差,差到在较小测试数据量级时已经出现性能问题,也是另一种思路。

问题 2:测试标准怎么定

我假设你说的是性能测试标准,一般主要关注以下维度:

  • 响应时长维度:文字意思
  • 响应正确率维度:文字意思
  • 机器资源维度:cpu、内存、I/O(可以泛化到缓存和数据库的速度)、网络带宽

思路是,在一定时长范围内,满足 xx% 响应率,能压到多少 QPS,这个 QPS 是否达到预定目标,在压测过程中有没有发现资源问题……具体数值,要从线上历史数据去分析预测,与研发和产品商讨确定。具体可以看看服务端压测怎么做

不知道楼主除了从怎么做场景模拟的角度外,有没有考虑过分析这类故障出现的原因?

我们以前类似这种测试环境没问题,一到线上大数据量就扛不住的情况,大多是 sql 本身写得不好,没命中索引引起全表查询导致。测试环境数据量少,所以全表查也没多慢。线上有些大表是千万级数据的,全表查一下就 gg 了,不仅接口响应超时,还可能由于占住了连接数,导致数据库很快连接数资源就被用尽,引起所有查库操作卡住的大问题。

如果楼主是类似情况,可以考虑在测试环境做一下所有实际执行 sql 的监控及检测。现在有一些 sql 检测工具是可以直接自动分析出 sql 的执行是不是会引起全表查询的(或者简单点,拿到线上库里分析下执行计划,也可以看出查询数据量情况),只要查询量达到一定量级,有性能风险的,都直接做预警,要求优化后才能上线。印象中 mtsc 大会上唯品会、微众银行也有类似这样的 sql 性能检测实践经验分享。

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