欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ETL(大数据)测试实战篇(二)

程序员文章站 2022-03-06 17:39:15
...

今天继续和大家一同分享在项目实践中针对大数据测试方面的一些有效流程和方法,希望与君共勉~

今日分享的文章内容,主题是:通用case的常用测试方法

 

01、目标表每个字段判断逻辑验证

(1)、code diff代码逻辑---这个过程的参与者是开发与QA,由开发主讲代码逻辑,QA提出疑议并与之讨论,在diff前需要QA先行查看即将提测的代码,以便在code diff时提出问题;

code diff工具推荐使用:下载IDE后安装git插件,我经常写python,所以使用的是Pycharm,再安装git插件作为常用的code diff工具。

(2)、目标表中依据需求设置case场景覆盖需求点进行每条case的执行和验证;

 

02、串列

(1)、正则regexp表达式,使用方法为:

select column_name from table_name where column_name regexp '[a-zA-Z]';

【含义为:查询目标字段值包含英文字母,不区分大小写的所有字段集合】

(2)、length()函数,使用方法为:

select column_name from table_name where length(column_name)>10;

【含义为:查询目标字段长度大于10的所有字段集合,如时间字段一般保留至年月日,所以正常长度应该是10,如果查出大于或小于10的长度的数据集合,则为串列数据】

 

03、业务数据逻辑验证

(1)、操作类时间:需要依据具体的业务需求进行分析,例如:预订类的明细表中的insert_date必须是小于等于update_date或cancelled_date,

夜审的原因会导致dt分区里的数据会收取一部分dt+1的业务数据,如果insert_date>=dt+2有数据存在,则不符合业务逻辑;

(2)、基于pm需求:case when的判断逻辑(包含:正常数据逻辑与异常数据逻辑);表之间join的方式及使用的where条件和on条件;

(3)、全量数据验证,使用的复杂查询sql需要写tmp临时表,可解决重复查询时资源浪费的问题;

 

04、数据总量验证

(1)、依赖的源表中为主表的join的数据总和与目标表同等条件下的数据总量进行数据总量的对比;

05、数据主键不重复

(1)、依据表设计说明,在目标表中使用group by column_name

例如:

select count(1) from dws.dws_test_stat_daily_df where dt='2020-03-29'group by column_test001,resv_date having(count(1))>1; 

group by后的字段:column_test001和resv_date是表dws_test_stat_daily_df的主键

如果上述条件查询出的结果大于0,则说明有数据主键重复的数据,需要对应项目的开发排查解决;

 

06、task计划

(1)、与开发code diff关于配置task计划的代码【包含:依赖的表分区不对齐,断更等异常处理】;

(2)、beta环境执行etl程序时,直接使用task计划里的脚本执行初始化和增量,查看执行结果;

(3)、task.yaml文件中所依赖的分区表是否全部列举至file栏,如以下task.yaml文件所示:​​​​​​​

task_name: tmp_test_room_fac_dftransform: - step: declare.shell   var: exc   file: $TASK_HOME/scripts/common/run_test.sh "dws.test_table_001 dws.test_table_002"         tem.tmp_test_room_fac_df sql/tmp_test_room_fac_df.sql 1

 

07、手工文件解析验证

(1)、code diff时查看目标手工文件的列数与行数是否与PM给的手工文件表保持一致(注意问题:特殊字符与列分隔符不能重复);

ETL(大数据)测试实战篇(二)

 

(2)、目标结果手工文件表与PM给的手工文件表再次diff差异,一般是没有差异说明手工文件入库正确(注意问题:串列,特殊字符,文件总条数);

 

08、调度任务配置验证

调度任务一般使用较多的是:时间依赖事件依赖

时间依赖是指:配置定时任务,在某段时间内执行,或某个时间点执行;

事件依赖是指:目标表任务的执行需要依赖一些前置条件,如源表数据与中间表数据ready后,才能执行目标表的任务;

一般调度任务只对增量数据做配置,因为初始化的数据正常情况下只需要在上线时手动执行一次,如果后期项目无频繁迭代,可不用配置初始化的调度任务,而增量数据需要每天都执行,所以需要配置调度任务每天去自动执行,正常情况下不需要人工干预,为便于尽早发现调度任务执行问题,会在线上配置完调度后,再对应的配置上监控,假如调度任务持续执行失败,就需要人工干预解决。下图为事件依赖的调度配置页面详细信息:

ETL(大数据)测试实战篇(二)

备注:我的个人公众号已正式开通,致力于测试技术的分享,包含:大数据测试、功能测试,测试开发,API接口自动化、测试运维、UI自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:

ETL(大数据)测试实战篇(二)

添加关注,一起共同成长吧。