1. 数据采集层测试
用例编号 | 测试目标 | 测试场景 | 预期结果 |
---|---|---|---|
TC-001 | 验证用户行为日志采集完整性 | 模拟用户浏览、点击、加购行为 | Kafka Topic中日志记录数与模拟量一致 |
TC-002 | 验证无效数据过滤规则 | 发送爬虫请求(高频IP) | 清洗后数据中无该IP的日志记录 |
2. 数据处理层测试
用例编号 | 测试目标 | 测试场景 | 预期结果 |
---|---|---|---|
TC-003 | 验证用户兴趣标签计算逻辑 | 用户连续浏览3次“运动鞋”类目 | 用户画像中“运动鞋”兴趣权重≥0.8 |
TC-004 | 验证实时推荐算法覆盖率 | 新用户首次访问无历史行为 | 推荐列表包含热门商品且无重复 |
3. 输出层测试
用例编号 | 测试目标 | 测试场景 | 预期结果 |
---|---|---|---|
TC-005 | 验证推荐结果写入Redis的实时性 | 用户下单后30秒内刷新页面 | 推荐列表排除已下单商品 |
TC-006 | 验证API返回结果的安全性 | 请求未授权用户的推荐接口 | 返回403错误码 |
4. 性能与容错测试
用例编号 | 测试目标 | 测试场景 | 预期结果 |
---|---|---|---|
TC-007 | 验证高并发下的数据处理延迟 | 每秒发送10万条日志,持续5分钟 | 端到端延迟≤1秒,无数据堆积 |
TC-008 | 验证Spark任务容错恢复能力 | 强制终止Spark Executor进程 | 任务自动恢复,数据计算结果一致 |
测试步骤详解(以TC-001和TC-007为例)
用例TC-001:用户行为日志采集完整性
步骤:
准备测试数据
使用Python脚本生成模拟用户行为日志(JSON格式),包含:
{"user_id": "U123", "event": "click", "item_id": "I456", "timestamp": 1620000000}
总数据量:10,000条(含浏览、点击、加购)。
发送数据到Kafka
使用
kafka-console-producer
命令行工具或自定义Producer发送测试数据到指定Topic。命令示例:
cat test_logs.json | kafka-console-producer --broker-list localhost:9092 --topic user_behavior
验证数据完整性
使用
kafka-console-consumer
消费Topic数据并统计数量:kafka-console-consumer --bootstrap-server localhost:9092 --topic user_behavior --from-beginning | wc -l
通过标准:消费到的数据量=10,000条,且字段无缺失。
用例TC-007:高并发数据处理延迟测试
步骤:
模拟高并发流量
使用
Apache JMeter
或Gatling
工具构造每秒10万条日志的请求压力。配置JMeter线程组:
线程数:500
Ramp-up时间:10秒
循环次数:持续300秒
监控数据处理链路
Kafka吞吐量:通过Kafka Manager监控Topic的
Messages In/Seconds
是否达到10万/秒。Spark Streaming延迟:在Spark UI中查看
Processing Time
和Scheduling Delay
。端到端延迟:在推荐API响应头中记录
X-Data-Latency
字段(从日志生成到推荐结果返回的时间)。
验证资源与容错
使用
Grafana
监控集群资源:CPU利用率≤80%,内存无OOM(Out of Memory)错误。检查Kafka消费者组是否有Lag(未消费消息堆积)。
结果校验
数据一致性:对比原始日志与HDFS落地文件的总记录数是否一致。
延迟达标:95%的请求端到端延迟≤1秒。
关键测试工具与技巧
数据生成工具
Python Faker库:生成模拟用户ID、商品ID、时间戳等字段。
Apache Kafka Tools:
kafka-producer-perf-test
用于压测。
自动化校验脚本
使用
PySpark
对比处理前后数据差异:# 对比原始数据与处理后的Hive表数据量 raw_count = spark.read.json("hdfs://raw_logs").count() processed_count = spark.sql("SELECT COUNT(*) FROM user_behavior_clean").collect()[0][0] assert raw_count == processed_count, "数据丢失!"
日志追踪
在日志中植入唯一标识(如
trace_id
),通过ELK(Elasticsearch+Logstash+Kibana)追踪全链路处理过程。
总结
数据测试需要系统化验证大数据处理链路的功能性、性能、容错能力。实际工作中需结合业务需求补充场景(如冷启动推荐、数据回溯测试等),并利用自动化框架(如Airflow调度测试任务)提升效率。