数据测试总踩坑?多个实例技巧帮你搞定数据准确性
与传统功能测试相比,数据测试更强调与数据库、接口、数据模型、ETL流程、日志、文件等数据源打交道,对测试人员的逻辑能力、SQL能力、数据敏感性和业务理解力要求更高。数据测试,是对数据在业务系统中“产生—传输—处理—存储—展示”等生命周期过程进行验证,目的是确保数据的准确性、完整性、一致性、安全性和时效性。从业务、数据、技术、时效、边界等五个维度设计用例,注重数据完整性、正确性和覆盖面,配合SQL脚
什么是数据测试?
数据测试,是对数据在业务系统中“产生—传输—处理—存储—展示”等生命周期过程进行验证,目的是确保数据的准确性、完整性、一致性、安全性和时效性。
它不仅是软件测试中的一个重要分支,也是保障数据驱动业务正确运行的关键环节。
与传统功能测试相比,数据测试更强调与数据库、接口、数据模型、ETL流程、日志、文件等数据源打交道,对测试人员的逻辑能力、SQL能力、数据敏感性和业务理解力要求更高。
数据测试关注的主要方面
01、数据采集阶段
主要验证系统是否正确地采集到源数据。
测试点:
数据源是否正确:
数据是从哪个系统、接口、第三方来源拉取的?数据源是否合法、稳定?
字段是否齐全:
需要采集的字段是否都采集到了?是否有缺失?
字段类型与格式是否一致:
如时间字段是YYYY-MM-DD还是时间戳?金额是否为浮点?
数据是否实时/定时采集:
系统是否定时抓取?实时数据是否延迟?调度频率是否匹配需求?
02、数据传输阶段
数据从一个系统传送到另一个系统,如API传输、文件传输、消息队列等。
测试点:
数据是否丢失或重复:
例如数据分页传输是否漏页或重复发送?
网络异常时是否支持重试/补偿?:
例如MQ是否配置了幂等机制或异常处理逻辑?
数据编码问题:
中文是否乱码?特殊字符(如 emoji、换行)是否传输正常?
接口结构是否稳定:
字段是否变更过?是否存在老版本兼容问题?
03、数据转换/清洗阶段(ETL)
该阶段是数据测试最容易出现问题的环节,涉及大量字段映射、规则处理、数据计算、格式转化等操作。
常见问题:
字段名称映射错误:
源字段 A 应该映射到目标字段 B,结果误映射为 C。
数值计算错误:
如金额单位转换错误(万元与元混淆)、百分比与小数搞反。
业务逻辑不准确:
如身份证号校验位缺失、信用评级算法使用旧版本等。
数据清洗不充分:
如去重失败、非法值未剔除、空字段未赋默认值。
源系统:投资比例 investRate = "12.3456%"
目标系统要求:小数格式保留 4 位 => 0.1235
测试应检查是否正确去除百分号并转换格式。
04、数据存储阶段(落库)
数据库是最终落地的地方,落库正确性是保障数据质量的核心。
重点校验:
字段类型匹配:
varchar 对应字符串,decimal 对应金额,datetime 对应时间等。
精度问题:
特别是金额、百分比、比率,需关注小数点位数(2位、4位等)。
主键/唯一约束:
是否有重复数据写入?是否出现主键冲突、唯一性违背?
入库时间与创建时间一致性:
例如一些系统生成时间字段,是否准确落库?
数据归档/更新/删除策略正确:
如逻辑删除字段是否设置正确?
可以到我的个人号:atstudy-js
这里有10W+ 热情踊跃的测试小伙伴们,一起交流行业热点、测试技术各种干货,一起共享面试经验、跳槽求职各种好用的。
多行业测试学习交流群,内含直播课+实战+面试资料
AI测试、 车载测试、自动化测试、银行、金融、游戏、AIGC.
SQL 示例校验语句:
-- 校验唯一性SELECT credit_code, COUNT(*) FROM ent_base GROUP BY credit_code HAVING COUNT(*) > 1;-- 校验空值SELECT * FROM t_data WHERE important_field IS NULL;-- 精度检查SELECT investRate FROM t_data WHERE LENGTH(SUBSTRING_INDEX(investRate, '.', -1)) > 4;
05、数据展示阶段(报表/大屏/查询)
这是用户直观看到数据的地方,测试不能只看“页面上对不对”,还需要校验页面背后的数据来源。
测试点:
-
报表数字是否与数据库一致;
-
筛选/搜索/分页功能是否正常;
-
合计/平均值计算是否准确;
-
时间维度、单位、格式是否明确清晰;
-
图表数据是否对应文本数据。
06、数据变更、回滚、删除等操作
特别注意:
-
数据更新是否正确覆盖旧值;
-
撤销操作是否能完整还原;
-
删除操作是否物理删除还是逻辑删除;
-
有无数据日志或审计记录保留?
常用的数据测试方法
1. SQL脚本:
JOIN、COUNT、HAVING等进行数据比对。
-- 校验源表和目标表的数据一致性
SELECT * FROM source_table a
LEFT JOIN target_table b ON a.code = b.code
WHERE a.value != b.value;
-- 校验数据条数一致
SELECT COUNT(*) FROM source_table;
SELECT COUNT(*) FROM target_table;
2. Excel 比对:
VLOOKUP、条件格式等快速分析差异。
对于小批量的样本数据,可使用 Excel 的公式辅助检查:
-
VLOOKUP、IF 判断值是否一致;
-
条件格式高亮差异;
-
数据透视表查看聚合一致性。
3. Python脚本:
使用pandas处理大数据文件并比对字段值。
import pandas as pd
df1 = pd.read_excel('source.xlsx')
df2 = pd.read_excel('target.xlsx')
# 对比某字段是否一致
diff = df1[df1['code'] != df2['code']]
diff.to_excel('差异数据.xlsx')
数据测试用例设计建议
从业务、数据、技术、时效、边界等五个维度设计用例,注重数据完整性、正确性和覆盖面,配合SQL脚本与样本文件。
建议:每个测试用例要说明输入来源、处理逻辑、期望输出,配套 SQL 脚本或 Excel 样例。
数据测试中常见的易错点
1. 字段误映射
2. 小数精度错误
3. 编码处理异常
4. 状态码理解偏差
5. 缺乏异常/边界数据
6. 测试数据不具代表性
数据测试人员能力要求
要做好数据测试,测试人员建议具备以下能力:
-
熟练掌握 SQL,能进行复杂查询、字段对比、统计分析;
-
会使用 Python 做简单的数据处理(推荐学习 pandas);
-
了解常见 ETL 工具
(如 DataX、Kettle、Flink);
-
熟悉数据表结构、字段类型和业务逻辑;
-
对数据细节敏感,有一定容错心理和排查技巧;
-
能编写规范的测试用例和对比脚本。
更多推荐
所有评论(0)