大数据ETL测试——机器学习测试(4)

发表于:2020-10-14 10:03

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:融360 AI 测试团队    来源:51Testing软件测试网原创

分享:
  6.2 大数据ETL测试
  6.2.1 ETL测试流程
  与传统数据测试过程类似,大数据ETL测试也需要经历不同的测试阶段。其主要的测试过程如图6-1所示:
图6-1 大数据测试过程
  接下来,详细介绍一下大数据ETL测试流程涉及到的几个重要步骤:分析业务需求、设计测试用例并准备测试数据、静态代码CR(CodeReview)以及测试执行。
  1.分析业务及需求
  测试前需要熟悉业务流程和业务规则,根据业务需求分析源表与目标表 mapping 关系。需要了解数据来源背景,数据质量现状,表字段含义,元数据信息,解析数据流转血缘关系。
  2.设计测试用例并准备测试数据
  非数据项目验证场景相对简单,但在数据类项目尤其是大数据类项目中,数据流转链路长,经手的开发人员多。测试中如果发现逻辑问题或数据质量问题定位也较困难,所以在测试数据类项目前,测试人员需要与数据开发人员深入沟通,了解数据处理的详细步骤。提前准备测试用例和测试数据,以此来保证用例准备充分,测试数据能最大程度覆盖测试场景。
  3.静态代码CR
  与非数据类项目一样,静态代码CR的目的是尽早通过阅读代码发现显而易见的缺陷或Bug。数据类项目Code Review(主要侧重HiveQL的CR)通用检查项如下:
  1)名称正确性(表名、字段名、主键名);
  2)字段顺序、数据类型是否合理;
  3)表中字段的业务含义是否与实际业务对应;
  4)是否存在数据计算异常的情况,如除数为0、NULL、空字符串的情况;
  5)是否对数据精度有要求;
  6)脏数据的处理是否合理,业务上是否要求数据去重;
  7)DML、DDL 语句的使用是否正确;
  8)数据流转逻辑是否与需求文档相符;
  9)编码规范问题。
  为了提高CR交付质量及效率,除了手工方式,还可以通过静态代码扫描工具进行自动化检测。目前了解到的SQL静态检测工具有阿里的SQLSCAN、开源工具sqlint等。
  4.测试执行
  顾名思义,测试执行主要的工作是使用准备的测试数据按照测试用例执行测试。但需要注意的是,对于大数据类项目来说,开发人员的代码中使用的库表名称是实际的业务生产库表。测试人员在测试时需要做到在不污染生产数据的前提下完成测试,同时又能保证测试覆盖的全面性。
  6.2.2 ETL测试方法
  一般来说,大数据ETL测试方法,主要包括功能性测试和非功能测试两大部分,下面分别进行介绍。
  1.功能性测试
  功能测试主要从数据完整性、数据一致性、数据准确性、数据及时性、数据约束检查、数据处理逻辑、数据存储检查、HiveQL语法检查、规范验证、加载规则、MapReduce及Shell脚本测试、调度任务验证等方面进行测试。实际上数据完整性、数据一致性、数据准确性、数据及时性也属于数据质量评估的内容。进行功能测试时,除了关注代码规范和逻辑,往往还需要关注数据质量问题,因此本小节将它们拆分出来作为功能测试方法。数据质量问题繁杂,人工检测效率低且检测不全面,通常会使用数据质量监控平台来进行监测。更多内容可参考7.2节。
  ·数据完整性测试
  比较和验证相比源表,目标表的数据量和数据值是否符合预期。数据的记录和信息是否完整,是否存在缺失的情况,数据的缺失主要有记录的缺失和记录中某个字段信息的缺失。确保目标表中加载的记录数与预期计数匹配,确保加载到数据仓库的数据不会丢失和截断。比如,原始数据存在2000个订单ID,ETL过程中未对订单ID进行过滤处理,则目标表中也应存在2000个订单ID。
  ·数据一致性测试
  数据的一致性主要包括数据记录规范和数据逻辑的一致性,检查数据是否与上下层及其它数据集合保持统一。数据记录的规范指的是数据编码和格式的问题,比如订单ID,从业务来源表到数据仓库每一层表都应该是同一种数据类型,且长度需要保持一致。数据逻辑性主要是指多项数据间固定逻辑关系的一致性,比如用户当年累计缴纳社保总额字段值>=当年中某一月缴纳社保额字段值,PV>=UV等。
  ·数据准确性测试
  数据准确加载并按预期进行转换,数据库字段和字段数据准确对应。检查数据中记录的数据是否准确,是否存在异常或者错误的信息。如数字检查、日期检查(日期格式)、精度检查(小数点精度)等。检查是否存在异常值、空字符串、NULL值等其他脏数据。根据业务模型检查数据值域范围,比如转化率在0~1之间,年龄为大于0的正数。数据字符串长度是否符合预期,字符型数据无乱码现象。检查数据分布合理性,防止出现数据倾斜问题。
  ·数据及时性测试
  数据及时性是指数据产出时间是否符合要求。通常数据产出时间需要控制在一定时间范围内或一定时间之前。有些大数据业务对及时性要求不高,但是也需要满足明确的指标。比如,业务数据生产周期一般以天为单位,如果数据从生产到可用时间已经超过一天,那这样的数据就失去了时效性。有些实时分析页面可能需要用到小时甚至分钟级别的数据,这种场景一般使用实时数据,对时效性要求极高。比如,页面以1分钟间隔展示当前App在线人数,如果每次查询需要2分钟才能返回数据,那返回的当前时刻的在线人数其实是不准确的,查询返回时长通常需要控制在秒级别甚至毫秒级别才有意义。
  ·数据约束检查
  检查数据类型、数据长度、索引、主键等。检查目标表中的约束关系是否满足期望设计。主键唯一性检查、非空检查是否通过。
  ·数据处理逻辑验证
  1)计算过程符合业务逻辑,运算符及函数使用正确。
  2)异常值、脏数据、极值、特殊数据(零值、负数等)处理符合预期。
  3)字段类型与实际数据一致,主键构成是否合理。
  4)去重记录,是否按照去重规则进行去重处理。
  5)数据输入输出满足规定格式。
  ·数据存储检查
  Hive表类型选择合理(内部表、外部表、分区表、分桶表)。
  数据文件存储格式选择是否合理。文件存储格式有行存储格式(包括Textfile、SequenceFile、Mapfile、Avro Datafile)、列存储格式(Parquent、RCFile、ORCFile)。考虑数据文件是否需要进行压缩。
  ·HiveQL语法检查
  1)考虑不同情况写入表,合理使用into或overwrite。
  2)Union和union all使用是否正确。
  3)合理使用order by、distribute by、sort by、cluster by 及 group by。
  这里举一个典型Bug案例:HiveQL在编写时,除了基本的语法Bug外,还需要关注由于表本身数据带来的问题。如下SQL代码所示,在执行时,由于没有考虑到表test.user_f_kv_d_renc和表test.user_f_kv_d_hash的md列存在大量相同重复值,直接将两表通过md和etl_dt字段关联进行外连接FULL OUTER JOIN操作。导致关联后大量数据写入结果表test.user_f_kv_d_mid,产生了数据膨胀问题。测试之前,需要考虑执行的SQL语句是否合理,提前查看数据量及数据情况并评估影响。对于SQL执行时间过长的情况给予关注,保持敏感性和警惕性。代码演示说明:
  insert overwrite table test.user_f_kv_d_mid partition(etl_dt)
  select nvl(a.md,b.md) as md , a.key as renc , b.key as hash, a.etl_dt
  from test.user_f_kv_d_renc a
       FULL OUTER JOIN
       test.user_f_kv_d_hash b
       on a.etl_dt=b.etl_dt and a.md=b.md;
  ·规范验证
  1)关键步骤及开始步骤是否有注释,表和字段注释是否完整正确。
  2)代码格式是否对齐。
  3)表的层次、命名是否规范。
  4)字段命名是否合理。
  5)名称正确性(表名、字段名、主键名)。
  ·加载规则测试
  根据业务场景需求,判断加载规则是否合理。加载规则分为全量加载和增量加载。
  ·MapReduce及Shell脚本测试
  ETL测试过程中还会涉及到测试MapReduce代码及Shell脚本。通常数据加载进入HDFS后,会使用MapReduce或其它计算框架对来自HDFS的数据进行处理,这里先只介绍使用MR框架的测试情况。MapReduce阶段会涉及操作一些Shell脚本文件及MR文件,常见测试点主要有:验证Shell脚本中的jar 包、Mapper及Reducer文件、MR依赖文件、MR输入输出文件引入路径是否正确,MR运行配置参数是否合理;验证Mapper及Reducer处理逻辑是否正确;验证MR处理过程中输出日志是否符合预期。
  ·调度任务验证
  1)任务本身是否支持重跑。
  2)依赖的父任务是否配置到位。
  3)任务依赖层次是否合理。
  4)任务是否在规定时间点完成。

查看《机器学习测试入门与实践》全部连载章节
版权声明:51Testing软件测试网获得人民邮电出版社和作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号