离线数仓测试
一.文档编写目的
为了指导和规范大数据测试人员对离线数仓的测试方法,减少因为数据测试不够严格,导致后期数据应用出现偏差和错误的情况。特别关注下后面的测试总结,是为了减少漏测,添加常见核心测试点,希望能够指导离线数仓测试人员。
二.大数据测试类型
1.功能测试
通常是数据完整性测试,数据一致性测试,数据准确性测试,数据及时性测试,数据约束检查,数据存储检查,SQL文件检查,数据处理逻辑验证,调度任务检查
a)数据约束检查
检查数据类型,数据长度,索引和主键等是否符合要求,检查目标表的约束条件是否满足设计预期。
b)数据存储检查
c)SQL 脚本文件检查
- 开发规范检查 ---这块现在没有严格要求,主要是检查HiveQL注释,字段,表名,中间表,“脏”数据处理,join操作等
- SQl语法检查--检查SQL连接方式,函数,聚合和关键字的使用是否正确,确认union(去重)和union all(不去重)
d)数据处理逻辑验证
- 验证过程是否符合业务逻辑,运算符和函数的使用是否正确。
- 对异常值,“脏”数据,极值,特殊数据(0值,负数等)的 处理是否符合预期。
- 字段类型与实际数据是否一致,主键构成是否合理
- 去重记录,是否按照去重规则规则去重处理
- 数据的输入输出是否符合规定格式
e)调度任务检查
- 依赖的任务是否配置合理
- 任务依赖层次是否合理
- 任务是否在规定时间内完成
- 任务调度时间设置是否合理
性能测试
性能测试结果
场景编号
|
并发线程
|
数据量
|
运行时间/s
|
QPS
|
GC
|
Gc Time/ms
|
95%延时/ms
|
---|---|---|---|---|---|---|---|
1 | 1 | 100万条插入数据 | 753 | ||||
2 | 16 | 100万条插入数据 | 70 | ||||
3 | 50 | 100万条插入数据 | 43 | ||||
4 | 100 | 100万条插入数据 | 39 | ||||
5 | 200 | 100万条插入数据 | 39 | ||||
6 | 16 | 50万条读取数据,50万条更新数据 | 95 | ||||
7 | 50 | 50万条读取数据,50万条更新数据 | 68 |
三.离线数仓测试流程
分析业务和需求->制定测试方案和测试计划->设计测试用例和准备测试数据->测试执行→生成测试报告并分析结果
(1)分析业务和需求
在澄清会上就要理解业务和需求
(2)制定测试方案和测试计划
参与技术评审,了解技术架构设计,模块设计和数据模型设计等,并根据不同业务场景,进行项目排期
(3)设计测试用例和准备测试数据
测试用例设计
测试点
|
测试用例
|
---|---|
源数据和目标数据验证 |
|
数据一致性验证 | 检查完整性约束是否正确使用 |
数据完整性验证 |
|
约束验证 | 验证是否按预期为特定表定义了约束 |
数据正确性验证 |
检查数据是否已记录或拼写是否正确 检查NULL,以及 |
数据转换验证 |
造数
- 业务上根据图形用户界面构造数据
- 批量数据生成工具构造数据
- 通过数据库生成数据
- 真实业务数据脱敏后导入测试环境
- 基于中间件构造数据
(4)测试执行
(5)生成测试报告并分析结果
三.测试总结
1.典型问题
a)数据质量
我们需要关注数据本身的质量问题,以及数据处理过程中各种处理方式和结果是否满足预期,是否与逻辑不相符,是否影响后续业务的使用等问题,常见如下:
- 数据记录不唯一
- 数据处理过滤条件不正确(特别注意状态和是否过滤删除)
- 处理前后的数据不一致或有部分数据丢失(一般是关联的数据类型不同,关联有问题)
- 数据流转过程中NULL值被自动替换的问题。
- 处理前后的数据列顺序错误
- 数据的约束关系不正确
现在上了数据质量平台,可以用这个快速发现问题。
b)数据SQL问题
看代码中的source中的scripts对应表的SQL
- SQL未对异常数据进行处理(比如空数据的处理)
- 左右连接使用不正确(实时就发现join和left join使用不恰当)
- 数据库索引问题(影响数据库的查询速度)
- SQL函数使用不当
c)数据倾斜的问题
d)大数据分布测试与大数据对比测试
测试类型 | 常见核心测试点 | 项目开发类型 | |||
新增表 | 新增字段 | 修改旧字段 | 修改表逻辑 | ||
大数据分布测试 | 表级测试-总数据量 | √ | √ | ||
表级测试-是否存在重复数据 | √ | √ | |||
表级测试-主键唯一性 | √ | √ | |||
表级测试-空值量 | √ | √ | |||
表级测试-空值率 | √ | √ | |||
表级测试-去重数据量 | √ | √ | |||
表级测试-有效数据量 | √ | √ | |||
大数据对比测试 | 表级测试-总数据量对比 | √ | √ | ||
表级测试-全量数据对比 | √ | √ | |||
字段级测试-去重数据量对比 | √ | √ | |||
字段级测试-统计类指标对比 | √ | √ |
e)数据仓库分层测试重点
数据仓库层级
|
测试目标
|
测试范围
|
测试重点
|
---|---|---|---|
ods | 数据完整性,数据正确性 | 表,字段 |
1)表命名规范检查 2)字段信息检查 3)数据质量检查(空值,零值,主键唯一性和字段值域 4)数据完整性检查 |
dwd | 数据完整性,数据正确性和数据清洗逻辑 | 表,字段 |
1)表命名规范检查 2)字段信息检查 3)数据质量检查(空值,零值,主键唯一性和字段值域 4)数据完整性检查 5)数据清洗逻辑检查(包括数据填充,噪声数据去除等) |
dws | 业务逻辑性 | 表,重点字段 |
1)表命名规范检查 2)字段信息检查 3)指标计算,勾稽(内在逻辑对应关系)逻辑检查 |
ads | 业务逻辑性 | 表,重点字段 |
1)表命名规范检查 2)字段信息检查 3)指标计算,勾稽(内在逻辑对应关系)逻辑检查 |