ETL(大數據)測試實戰篇(一)

進入大數據測試領域已有近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自動化測試等,微信搜索公衆號:“無量測試之道”,或掃描下方二維碼:

添加關注,一起共同成長吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章