大数据测试通常是指对采用大数据技术的系统或者应用的测试。大数据测试可以分成两个维度:
本篇文章主要介绍的是数据测试。
场景:验证从Kafka实时采集的订单数据是否完整、无重复。
测试用例设计:
测试用例ID | DQ-001 |
---|---|
测试目标 | 验证订单数据的完整性和唯一性 |
前置条件 | 1. Kafka Topic中已注入10万条模拟订单数据(含order_id、user_id、amount等字段)。 2. 数据已消费并存储到HDFS的 /user/orders 路径。 |
测试步骤 | 1. 使用Hive查询HDFS中的数据总量:SELECT COUNT(*) FROM orders; 2. 检查关键字段的空值率: SELECT COUNT(*) FROM orders WHERE order_id IS NULL OR user_id IS NULL; 3. 检测重复订单ID: SELECT order_id, COUNT(*) AS cnt FROM orders GROUP BY order_id HAVING cnt > 1; |
预期结果 | 数据总量与Kafka注入量一致(10万条)。 关键字段(order_id、user_id)空值率为0%。 无重复的order_id记录。 |
工具支持:
使用 Great Expectations 自动化验证数据分布和约束。
场景:验证用户数据从MySQL到Hive的ETL过程是否准确。
测试用例设计:
测试用例ID | ETL-002 |
---|---|
测试目标 | 验证用户年龄字段的转换逻辑(MySQL中的birth_date转为Hive中的age) |
前置条件 | 1. MySQL的user 表包含字段:id, name, birth_date(DATE类型)。2. ETL作业将birth_date转换为Hive表的age(INT类型,按年份计算)。 |
测试步骤 | 1. 在MySQL中插入测试数据:INSERT INTO user (id, name, birth_date) VALUES (1, 'Alice', '1990-05-20'), (2, 'Bob', '2005-11-15'); 2. 执行ETL作业,将数据同步到Hive表 user_hive 。3. 查询Hive表中的age字段: SELECT name, age FROM user_hive WHERE id IN (1, 2); |
预期结果 | Alice的age为当前年份 - 1990(如2023年则为33)。 Bob的age为当前年份 - 2005(如2023年则为18)。 |
场景:测试Hive在100个并发查询下的响应时间和资源使用率。
测试用例设计:
测试用例ID | PERF-003 |
---|---|
测试目标 | 验证Hive在并发查询下的稳定性 |
前置条件 | 1. Hive表中已加载1亿条销售记录。 2. 测试集群配置:10个节点(8核CPU,32GB内存)。 |
测试步骤 | 1. 使用JMeter创建100个线程,每个线程执行以下查询:SELECT product_category, SUM(amount) FROM sales WHERE sale_date BETWEEN '2022-01-01' AND '2022-12-31' GROUP BY product_category; 2. 监控HiveServer2的CPU、内存和GC情况(通过Ganglia或Prometheus)。 3. 记录每个查询的响应时间,统计90%线。 |
预期结果 | 所有查询成功执行,无超时或OOM错误。 平均响应时间 ≤ 15秒,90%线 ≤ 20秒。 CPU使用率峰值 ≤ 80%,内存无持续增长。 |
场景:验证Spark Streaming作业在Worker节点宕机时能否自动恢复。
测试用例设计:
测试用例ID | FT-004 |
---|---|
测试目标 | 测试Spark作业的容错能力 |
前置条件 | 1. Spark集群有3个Worker节点。 2. 运行实时词频统计作业,从Kafka读取数据,窗口间隔1分钟。 |
测试步骤 | 1. 向Kafka持续发送数据(每秒100条)。 2. 运行作业5分钟后,手动终止一个Worker节点。 3. 观察: Driver日志是否显示任务重新调度。 新的Worker是否自动加入集群(若开启动态资源分配)。 窗口结果是否完整(比较故障前后的总词数)。 |
预期结果 | 作业在30秒内恢复处理,无数据丢失。 最终词频统计结果与发送数据总量一致。 |
工具支持:
使用Chaos Monkey模拟节点故障。
场景:验证HDFS目录的ACL权限控制是否生效。
测试用例设计:
测试用例ID | SEC-005 |
---|---|
测试目标 | 确保敏感目录(如/finance )仅允许授权用户访问 |
前置条件 | 1. HDFS目录/finance 权限设置为750(用户组为finance_team)。2. 用户alice属于finance_team,用户bob不属于该组。 |
测试步骤 | 1. 以alice身份执行:hdfs dfs -ls /finance (应成功)hdfs dfs -put report.csv /finance (应成功)2. 以bob身份执行: hdfs dfs -ls /finance (应返回"Permission denied")hdfs dfs -rm /finance/report.csv (应失败) |
预期结果 | 授权用户(alice)可读写目录,非授权用户(bob)访问被拒绝。 |
自动化验证:
# 使用Shell脚本自动化测试
if hdfs dfs -ls /finance >/dev/null 2>&1; then
echo "Test FAILED: Unauthorized access allowed."
else
echo "Test PASSED."
fi