轉載自:
http://blog.csdn.net/zhusongziye/article/details/78633934
概述
在我們學習ETL測試之前,先了解下business intelligence(即BI)和數據倉庫。
什么是BI?
BI(Business Intelligence)即商務智能,它是一套完整的解決方案,用來將企業中現有的數據(原始數據或商業數據或業務數據等)進行有效的整合,快速准確地提供報表並提出決策依據,幫助企業做出明智的業務經營決策。
原始數據記錄了企業日常事務,例如與客戶交互的信息、財務信息,員工相關記錄等等。
這些數據可以用於匯報、分析、挖掘、數據質量、交互、預測分析等等
什么是數據倉庫
數據倉庫是為查詢和分析而不是事務處理而設計的數據庫。
數據倉庫是通過整合不同的異構數據源而構建起來的。
數據倉庫的存在使得企業或組織能夠將整合、分析數據工作與事務處理工作分離。
數據能夠被轉換、整合為更高質量的信息來滿足企業級用戶不同層次的需求。
什么是ETL
ETL是Extract-Transform-Load的縮寫(提取-轉換-載入),是一個完整的從源系統提取數據,進行轉換處理,載入至數據倉庫的過程。
我們從聯機事務數據庫中提取數據,進行轉換處理,匹配數據倉庫模式,然后載入至數據倉庫數據庫中。
在通常情況下,大多數的數據倉庫要整合非聯機事務數據庫系統的數據,例如來源文本文件、日志、電子表格等等。
下面我們一起看看ETL是怎么工作的。
例如一個公司,有關於其不同部門的數據記錄,銷售、市場、物流等等。每個部門所處理的客戶信息是獨立的,而且存儲的數據也是相對不同的,假如銷售團隊有存儲客戶的姓名,而物流團隊存儲的是用戶 的ID。
現在我們想要去檢查客戶的歷史數據,並且想要了解他/她在不同的營銷活動中購買的不同產品是什么。這將是一項非常枯燥的工作。
該解決方案就是使用數據倉庫應用統一的結構來存儲經過ETL處理過的不同源的數據。
ETL能夠轉換不同結構/類型的數據集為統一的結構,以便后續使用BI工具生成有意義的分析和表報。
下面我們看一下ETL過程完整的流程圖:
ETLProcess.png
-
Extract
提取有效的數據 -
Transform
-
將提取的數據轉換為數據倉庫模式/格式
-
構建keys:一個key是一個或多個數據屬性的惟一標識實例,key的類型可以是主鍵(primary key)、外鍵(foreign key)、替代鍵(alternate key)、復合鍵(composite key)以及代理鍵(surrogate key)。這些key只允許數據倉庫進行維護管理,且不允許其他任何實體進行分配。
-
數據清理:在提取好數據后,則進入下一個節點:數據清理。對提取的數據中的錯誤進行標識和修復。解決不同數據集之間的不兼容的沖突問題,使數據一致性,以便數據集能用於目標數據倉庫。通常,通過轉換系統的處理,我們能創建一些元數據(meta data)來解決源數據的問題,並改進數據的質量。
-
Load
-
將轉換后的數據載入數據倉庫
-
構建聚集:創建聚集對數據進行匯總並存儲數據至表中,以改進終端用戶的查詢體驗。
什么是ETL測試
ETL測試是為了確保從源到目的地數據經過業務轉換完成后是准確的。
同時它還涉及數據的驗證,即從源到目的地數據各個不同階段驗證數據。
ETL是Extract-Transform-Load的縮寫。
ETL測試過程
與其他測試過程類似,ETL也需要經歷不同的測試階段。其流程如下:
ETLTestingProcess.png
ETL測試過程主要分為以下五大階段:
-
分析需求、業務和源數據
-
獲取數據
-
實現業務邏輯和維度建模
-
構建和填充數據
-
生成報告
ETL測試類型
-
Production Validation Testing
該類型的ETL測試是在數據遷移至生產系統時進行的。為了保證生產業務的正常運營,生產系統中的數據必須以正確的順序進行排序。在該ETL測試類型中要注意從數據層面進行自動化測試和管理能力的植入。 -
Source to Target Testing(Validation Testing)
該類型的測試主要元組轉換的數據是否滿足預期的轉換目標 -
Application Upgrades(升級測試)
該類型的ETL測試是可以自動生成的,能節省大量的測試開發時間。主要檢查舊應用或存儲庫中提取的數據是否與新的應用或新的存儲庫中的數據完全相同。 -
Metadata testing(元數據測試)
元數據測試包括數據類型檢查、數據長度和索引/約束檢查。 -
Data Completeness Testing(數據完整性測試)
當把所有期望的數據從源加載到目標地時,就算完成了數據完整性測試。在數據完整性測試過程中,我們還可以進行一些簡單的轉換或無轉換的源與目標之間的計數、聚合和實際數據比較和驗證的測試。 -
Data Accuracy Testing(數據准確性測試)
該類型測試驗證數據正確的完成加載和按預期目標進行轉換。 -
Data Transformation Testing(數據轉換測試)
測試數據轉換是一個復雜的過程,並不是簡單的寫一個源SQL查詢並與目標進行比較來實現的。可能需要為每個行運行多個SQL查詢,來驗證轉換規則 -
Data Quality Testing(數據質量測試)
數據質量測試包含語法和基准測試。為了避免在業務過程中由於日期或唯一編號(例如訂單號)引起的錯誤,進行數據質量測試。
-
語法測試:根據無效字符、字符模式、不正確大小寫、順序等出具臟數據測試結果
-
基准測試:基於數據模型檢查數據,例如客戶ID數據質量測試,包含:數字檢查、日期檢查、精度檢查、數據檢查、零校驗等等
-
Incremental ETL Testing(增量ETL測試)
該類型測試主要驗證舊數據和新數據的完整性,並添加新數據。增量測試驗在增量ETL過程中,插入和更新是否滿足預期的要求。 -
GUI/Navigation Testing
該類型測試主要檢查生成的大數據報告的UI\導航方面是否正常
怎么創建ETL測試用例
ETL測試是一個可以應用於信息管理領域中不同工具和數據庫的概念。
ETL測試的目的是確保在業務轉換完成后從源加載到目的地的數據是正確無誤的。
ETL測試同樣還涉及在源和目的地之間轉換時的各個階段的數據的驗證。
在從事ETL測試時,有兩份文檔是ELT測試人員實時使用的:
-
ETL映射表:一個ETL映射表包含源和目的地表的所有的信息,包括每個列及其引用表等約束關系。ETL測試人員需要更為優美的SQL查詢語句,因為在ETL測試各階段可能需要編寫具有多個連接的大查詢來驗證數據。ETL映射表在為數據驗證編寫查詢時提供大量的有用的信息。
-
源、目標數據庫模式:該模式應該便於驗證映射表中的所有細節。
ETL測試場景和測試用例
序號 | 測試場景 | 測試用例 |
---|---|---|
1 | Mapping Doc Validation(映射文件驗證) | 驗證映射文件是否提供了響應的ETL信息,且每個映射文檔的更新日志有記錄 |
2 | Validatioin(驗證) | 1. 根據對應的映射文件驗證源與目的地數據倉庫的表結構 2. 驗證源和目標數據的類型一致 3. 驗證源和目標數據的長度一致 4. 驗證數據字段類型和格式是指定的類型 5. 驗證源的數據類型長度不應小於目標數據類型長度 6. 針對映射表對數據表的列的名稱進行驗證 |
3 | 約束驗證 | 驗證目標表中的約束關系滿足我們的期望設計 |
4 | 數據一致性問題 | 1. 要防止語義定義相同,但特定屬性的數據類型和長度不一致的問題 2. 防止完整性約束濫用 |
5 | 完整性問題 | 1. 要確保所有期望的數據都已經完整的加載到目標表中 2. 要比較源和目標數據的個數(即確保計數上的完整)3. 檢查出現的任何不合格的記錄 4. 檢查目標表列中的數據沒出現被截斷的情況 5. 對邊界值進行分析檢查 6. 要檢查比較目標數據倉庫和源數據的關鍵字段的唯一性 |
6 | 正確性問題 | 1. 數據要沒有拼寫錯誤或不准確的記錄 2. 無null、非惟一或超出范圍的數據記錄存在 |
7 | 轉換 | 驗證轉換邏輯的正確性 |
8 | 數據質量 | 1. 數值型驗證,驗證是否為數值類型 2. 日期型驗證,驗證是否為日期格式,並且在所有日期類型數據的格式應該統一 3. 精度驗證,小數點的精度要滿足期望的精度 4. 數據檢查:檢查數據的正確性,完整性 5. null檢查 |
9 | 拷貝驗證 | 1. 驗證目標表中業務要求所有惟一性指標均正確的實現(例如主鍵、惟一標識的鍵、或其他任一惟一表示的列) 2. 驗證從源數據多列合並而成的數據是正確的 3. 驗證僅僅根據客戶要求對源數據進行了多列合並至目標表中 |
10 | 日期驗證 | 日期是ETL開發過程中常用的數據,主要用於: 1. 了解數據行創建的日期 2. 用於識別活動記錄 3. 根據業務需求透視表確定活動記錄 4. 便於基於時間插入、更新記錄 |
11 | 數據完整性驗證 | 在驗證源和目標表中的數據集的完整性時,我們需要用到交集運算,以確定目標數據的完整性 |
12 | 數據清理 | 對於不需要的列在載入至數據倉庫前應該進行刪除 |
ETL的bug類型
序號 | bug類型 | 描述說明 |
---|---|---|
1 | 用戶接口bug | 1. 主要涉及應用的GUI 2.字體、樣式、顏色、對齊、拼寫錯誤、導航等等 |
2 | 邊界值bug | 數據的邊界值范圍 |
3 | 等價類划分bug | 有效和無效類 |
4 | 輸出/輸出bug | 1.未接受的有效值 2. 無效的值被接受 |
5 | 計算類bug | 1. 數學計算錯誤 2. 最終輸出錯誤 |
6 | 載入條件bug | 1. 不運行多用戶操作 2. 不運行用戶載入期望的數據 |
7 | 崩潰bug | 1. 系統宕機或掛起 2. 系統無法運行在用戶的平台上 |
8 | 版本控制bug | 1. 無匹配標識 2. 沒有可用的版本信息 3. 一般版本控制bug發生在回歸測試時 |
9 | 硬件問題 | 一般發生在應用程序不兼容設備 |
10 | 文檔錯誤bug | 錯誤的幫助文檔信息 |
ETL測試與數據庫測試的不同
序號 | ETL測試 | 數據庫測試 |
---|---|---|
1 | 驗證數據是否按照預期進行了移動 | 主要驗證數據是否遵循了設計預定的數據模式規則或標准 |
2 | 驗證數據經過業務轉換后是否滿足預定的轉換邏輯以及驗證源和目標數據計算是否一致 | 主要表的主、外鍵等越蘇是否正常 |
3 | 驗證ETL過程數據表的主外鍵關系是否保存 | 驗證沒有冗余表,數據庫最佳化 |
4 | 驗證已載入的數據拷貝是否滿足預期 | 驗證需要的是否缺少數據 |
ETL測試工程師的主要責任
對於一個ETL測試工程師而言,其關鍵的責任有三大類:
-
源數據分析(數據庫、文本等類型數據分析)
-
業務轉換邏輯實現
-
將經過轉換的數據載入至目標表
其他有:
-
掌握ETL測試軟件
-
ETL數據倉庫測試組件
-
在后端執行數據驅動測試
-
創建、設計、執行測試用例、計划等
-
標識問題、提供問題解決方案
-
梳理業務需求和設計測試策略
-
寫SQL或數據庫操作代碼完成實現各種測試場景
等等其他工作內容。。。