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

欢迎关注【无量测试之道】公众号,回复【领取资源】,
Python编程学习资源干货、
Python+Appium框架APP的UI自动化、
Python+Selenium框架Web的UI自动化、
Python+Unittest框架API自动化、

资源和代码 免费送啦~
文章下方有公众号二维码,可直接微信扫一扫关注即可。

进入大数据测试领域已有近1年时间,今天特意梳理了在项目实践中针对大数据测试方面的一些有效流程和方法,希望与君共勉~

今日分享的文章内容,主要包含:

  • 测试数据准备

  • etl测试计划执行

01、测试数据准备

分析目标表中所依赖的源表,中间表(将中间表依赖的源表全部梳理出来),查询对应源表的分区:

(1)、选择所有源表共有的分区从生产拉取数据;

[1]、选择的分区需要保证是全量的数据源;

[2]、需要选择2至3个分区数据进行拉取,1个分区用于初始化,1个用于增量,根据需求判断是否需要执行2个及以上的增量task计划;

(2)、从prod同步数据至beta命令:

[1]、sudo su - test(切换至test用户)

[2]、cd /home/q/www/tools(进入指定的同步脚本目录下)

[3]、python test_table_sync.py -T 'test.t_test_oas_resv_name_ful(dt=2019-11-24)' -f Prod -t Beta(执行同步脚本命令从生产拉取数据至beta)

 

数据同步过程中可能会遇到的问题如下:

1)、需要同步的表不存在

解决方法:

step1:进入生产的etl服务器(l-etl1.test.com)

sudo su - test(切换至test用户)

test(进入test客户端)

show create table test.t_test_oas_resv_name_ful;(查看生产环境该表的建表语句)

step2:拿到step1中的建表语句;

step3:进入beta的etl服务器(l-etl1.test.beta.com)

sudo su - test(切换至test用户)

test(进入test客户端)

手动执行step2中复制的建表语句

再次执行命令:

python test_table_sync.py -T 'test.t_test_oas_resv_name_ful(dt=2019-11-24)' -f Prod -t Beta

 

2)、需要同步的表的对应的分区不存在

解决方法:

step1:进入生产的etl服务器(l-etl1.test.com)

sudo su - test

test

show partitions test.t_test_oas_resv_name_ful;

step2:查看step1中最后1个命令的结果,确认需要同步的分区真实不存在后,需要换其他存在的分区进行同步,同时其他源表也需要按新选择的分区进行同步数据;

step3:再次执行命令以下命令

python test_table_sync.py -T 'test.t_test_oas_resv_name_ful(dt=2019-11-24)' -f Prod -t Beta

 

3)、需要同步的表非分区表

解决方法:

step1:进入生产的etl服务器(l-etl1.test.com)

sudo su - test

test

show partitions test.t_test_oas_resv_name_ful;【该命令可查看出该表是否是分区表】

step2:由step1中确认为非分区表后,再次执行命令(去掉dt='2019-11-24') ppython test_table_sync.py -T 'test.t_test_oas_resv_name_ful' -f Prod -t Beta

 

4)、网络超时

解决方法:

step1:稍后重试(被动方式)

step2:如果稍后重试依然不成功,可找对应的开发同事协助帮忙解决

 

5)、其他问题待持续更新

Tips:

<1>、梳理目标表所依赖的源表的方法有:

[1]、手动梳理法:在目标表中搜索关键字“from和join”,找到关键字后面对应的表名,如果是mid的中间表还需要去该表继续按照搜索关键字的方法查找出所有依赖的源表          

[2]、自动梳理法:如果代码功底不错,可以自己分析目标表的结构并写出分析所依赖源表的脚本去自动解析出所有依赖的源表。再或者公司已有现成的解析依赖表的脚本,可以和对应的开发同事沟通下,避免重复造轮子。   

用脚本分析的方法需要注意脚本在解析时没有bug,且适用于当前需要解析的目标表的结构,否则可能解析不全或错误。

<2>、从生产拉取数据的原因:很多公司为节约机器资源,数据源的数据都是直接收集至生产,供数据分析使用,不会在测试环境再搭建一套环境再收集一份源数据。所以测试环境需要测试时,是需要从生产同步数据的,开发时使用的数据源也是生产的,所以保证了数据的一致性。

<3>、分区需要保证是全量的数据源原因:例如,传统的酒店行业,一个品牌下可能有很多家连锁酒店,公司技术中心需要对品牌下各家酒店的订单数据作分析,这时就需要保证目标分区内每家酒店的数据都是全的,不能只有其中几家酒店的数据,否则数据分析结果的准确性将会受到影响。

<4>、数据同步完成后,需使用如下命令查询数据量,来确保数据同步成功:

select count(1) from test.t_test_oas_resv_name_ful where dt='2019-11-24';

如果数据查询结果不为0,则说明从生产同步至beta的数据同步成功。

至此,测试数据准备完成。

 

02、etl测试计划执行

1、新表提测或表字段变更时建表

(1)、新表提测:依据提测单中的etl流程,找到项目对应的建表sql文件,进入beta环境的etl服务器(l-etl1.test.beta.com)下:

step1:sudo su - test

step2:test

step3:将建表sql文件的建表语句内容复制后粘贴至test命令行下执行,如果提示ok,无异常报错,说明建表成功

 

(2)、表字段变更:进入beta环境的etl服务器(l-etl1.test.beta.com)下:

step1:sudo su - test

step2:test

step3:drop table if exists table_name(需要字段变更的表);

step4:将建表sql文件的建表语句内容复制后粘贴至test命令行下执行,如果提示ok,无异常报错,说明建表成功

 

2、初始化

使用的初始化脚本:

/home/q/www/test-data-etl/etl_task/scripts/common/test_data_init.sh

【该脚本一般项目内部会有现成的,直接用就行,不过建议在使用前要详细去阅读该shell脚本的内容,清楚的知道该脚本是如何工作的】

 

3、增量

执行命令:

step1:cd $TASK_HOME/test/resort/task/test_oas_resort_test_room_stat_df

step2:runtask  -d20191124

说明:runtask命令实际调用的是:/home/q/www/test-platform-etljet/bin下的runtask脚本,在使用之前也需要清楚的知道这个runtask脚本的工作原理,以便在执行etl计划时出现问题,测试工程师可先自行定位。

 

下期将继续分享ETL(大数据)测试实战内容,敬请期待哟!

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

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

你可能感兴趣的:(大数据测试)