Datafactory 實際使用案例
一、 簡介
QuestDataFactory 是一種快速的、易於產生測試數據工具,它能建模復雜數據關系,且有帶有GUI界面。DataFactory是一個功能強大的數據產生器,它允許開發人員和QA毫不費力地產生百萬行有意義的測試數據。
二、 原理說明
通過和數據庫進行連接后,首先讀取數據庫中表的schema(概要),即表的定義之類的內容,以列表的形式顯示;然后由用戶定制要產生數據的具體內容,如數字范圍、字符串長度、要產生數據記錄的個數等等,最后運行工程,批量生成數據,Datafactory支持各種主流數據庫(oracle、DB2、MS SQL),甚至excel、access等。下面以以主流的oracle為例進行說明。
三、 安裝說明
第一步:解壓Quest DataFactory v5.6 英文正式版.zip,執行setup.exe文件,按向導安裝。
第二步:運行Keygen.exe,在Site Message中設置名稱,下拉框中選擇DataFactory生成 key。
第三步:安裝成功后,使用key在bin文件中的工具(dfactory.exe)進行注冊,選擇DataFactory,點擊Edit key,輸入第二步中生成的key以及Site message中設置的名稱即可。
四、 數據庫環境說明
圖表 1
數據庫中有3個表,一個是FW_DEPARTMRNT(部門表),一個UP_STAFFROOM(教研室表),另一個為JH_COURSE(課程表)。現在我們需要用datafactory往JH_COURSE中插入記錄,JH_COURSE中的STAFFROOMID需要讀取UP_STAFFROOM中的STAFFROOMID,而 UP_STAFFROOM中的STAFFROOMID又取自FW_DEPARTMRNT的DEPID,所以我們需要先給UP_STAFFROOM插入記錄,才能在繼續添加課程記錄。
下圖為JH_COURSE中的字段信息:
圖表 2
下圖為UP_STAFFROOM中的字段信息
圖表 3
五、 詳細操作步驟
1、 連接數據庫,創建工程文件
安裝完datafactory之后,進入file菜單下面點擊new,然后選擇oracle數據庫類型。
圖表 4
下一步,輸入需要連接數據庫服務、用戶名和密碼。
下一步,選擇需要插入數據的表UP_STAFFROOM和JH_COURSE。
注意:“Fetch Dependent Tables”按鈕,用來加入對應所選表在數據庫設計中有依賴關系的表,防止生成數據庫時的疏漏。(不建議使用)
下一步,輸入工程名稱為“JH_test后,下一步完成即可。
2、 設置數據量及生成數據方式
Datafactory可對每個字段進行設置,在導入數據表時工具已通過數據字典讀取每個字段的數據類型,根據不同的數據類型datafactory可進行不同的規則設置:
首先選擇左側的表設置需要插入的數據數量,如圖:
Datafactory工具欄中的setting可進行通用設置,如下所示
3、 常見的三種數據類型的設置
1) 數字型
- 從本地表格中選擇數據
將本地數據文件導入DataFactory的配置中,下次可以方便選擇。
導入數據文件的操作如下:
第一步:准備數據文件,要求TXT格式,文件模版。
COURSENAME:varchar(64) 評論寫作 論文寫作 外貿英語 專業英語 低溫物理導論 英語影視 英語聽說訓練 ………… |
第二步:按圖將數據文件導入DF。
- 取相關聯的表的數據信息(主從表關系的字段)
比如,有2張表課程表(COURSE)和教研室表(STAFFROOM),課程的STAFFROOMID需要部門表STAFFROOMID中取值,如圖設置:
- 從數據庫的查詢結果中選擇數據(具有主鍵關系和轉碼的字段)
將查詢的sql 語句粘入文本框,如教研室表中的STAFFROOMID信息需要在部門表的PEDID中取值,如圖設置:
- 插入連續的值
我們能夠設定起始值及增長值的大小,系統自動計算結果,如:起始值為001,增長值為1,則產生的數據序列為001,002,003,……例如編號(COURSENO),具體設置如下圖:
- 插入一定范圍內的隨機值
插入隨機值,我們可以設置其范圍,則結果大小在設定范圍之內,所以選擇Insert random values方式,例如學分(CREDITHOUR)設置為0—20之間隨機取值,具體設置如下圖:
- 插入常量
將字段信息設置為一個常量,例如總學時(TOTALPERIOD)設置為80,方法如圖所示:
2) 字符型
- 從本地表格中選取數據
具體方式參考:(A.從本地表格中選擇數據)
- 取相關聯的表的數據信息(主從表關系的字段)
具體方式參考:(B取相關聯的表的數據信息(主從表關系的字段))
- 從數據庫的查詢結果中選擇數據(具有主鍵關系和轉碼的字段)
具體方式參考:(C從數據庫的查詢結果中選擇數據(具有主鍵關系和轉碼的字段))
- 插入隨機的字符組合
插入隨機的字符組合,可以設置字符組合的長度,例如SHORTNAME(課程簡稱),具體設置如下圖:
- 插入常量字符串
將字段信息設置為一個常量字符串,例如“是否實踐環節”(ISPRACTICE)這個字段,可以根據體的業務要求輸入一個常量字符串“是”或“否”,具體設置如圖所示:
- 插入組合文本,可以插入文本,數字,日期時間混合的文本。
設置一個固定字符串+一個遞增值為1的流水號的字段。
例如課程名稱(COURSENAME)需要設置固定字符串為“英語”,遞增值為1,具體操作如下:
第一步:選擇Build a composite field(組合文本)方式。
第二步:通過點擊的 add 按鈕得到下圖界面
第三步:根據具體要求選擇首先選擇Text字符型,點擊Ok,得到下圖,進行設置如下:
第四步:點擊Add,因為要插入遞增流水號,隨意選擇Numerice,點擊ok得到下圖進行設置:
3) 日期/時間
- 取相關聯的表的數據信息(主從表關系的字段)
具體方式參考:(B取相關聯的表的數據信息(主從表關系的字段))
- 從數據庫的查詢結果中選擇數據(具有主鍵關系和轉碼的字段)
具體方式參考:(C從數據庫的查詢結果中選擇數據(具有主鍵關系和轉碼的字段))
- 插入連續的時間
插入連續的時間,可以指定起始時間和增長時間,例如入學時間(ENROLDATE)設置如下圖:
- 插入隨機的時間(可以設置時間范圍)
插入隨機的時間,可以設置時間范圍,例如畢業時間(GRADUATEDATE)具體設置如下圖:
- 插入當前系統時間
插入系統當前的時間,可以設置日期的格式。
格式設置方式如下:
第一步:點擊Format(日期格式)設置按鈕
第二步:進入頁面進行設置
4、 Run(運行)
5、 運行時出現的一些關於約束的問題
出現一些字段有關於約束的提示
根據提示的字段到數據庫中進行相關約束的查找查詢,后根據具體的字段約束,選擇合適的方式進行設置。
+
- 從數據表插入數據,這里的數據表是系統提供的。
- 從數據庫插入數據,我們需要自己編寫SQL語句從數據庫中提取數據。
- 用表達式產生數據,我們可以編寫表達式,系統將使用結果生成數據。
- 插入連續的值,我們能夠設定種子及增長值的大小,系統自動計算結果,如:種子為1,增長值為2,則產生的數據序列為1,3,5,7……
- 插入隨機值,我們可以設置其范圍,則結果大小在設定范圍之內。
- 插入常量,結果將為常量值
實例說明:
數據型有4種設置規則 Insert values from an arithmetic expression、Insert sequential values、Insert random values、Insert a constant value.
- 1. Insertvalues from an arithmetic expression方式如下
用表達式產生數據,我們可以編寫表達式,系統將使用結果生成數據,如下圖:
- 2. Insert sequential values方式如下:
如JH_COURSE表中的COURSENO(教研室編號),COURSENO編號字段為long integer類型,這里設定為插入順序值(insert sequential values)。
- 3. Insert random values方式設定規則如下:
如JH_COURSE表中的TOTALPERIOD(總學時)為number類型,這里設定一個隨機數值(Insert random values),數字跨度為1—200如下圖:
- 4. Insert a constant value.方式
例如TOTALPERIOD(總學時),我們需要設置它為一個固定的數字,就直接選擇Insert a constant value(插入常量)方式,然后自定義將要應用的常量數據,如下圖:
4) 字符型
- 從數據表中插入數據。
- 從數據庫中插入數據。
- 從外部文件中插入數據。
- 插入隨機的字符組合,可以設置字符組合的長度。
- 插入常量字符串
- 插入組合文本,可以插入文本,數字,日期時間混合的文本。
實例說明:
1、 外部數據(TXT 文檔)的引入
說明: 在測試數據庫時,很多情況要求根據真實的數據來做必要的測試,這就需要我們可以通過外部自定義的文檔來產生數據表中的數據,比如我現在有一個 TXT 文檔,里面我想要錄入到數據表”港口”的值,上海,大連,香港,福建,青島 .....
首先創建一個 TXT 文件,名字任意,格式如下
注意: 字段名稱:字段類型 (字段類型長度)
引入 TXT 文件的方法:
右擊項目名稱(比如說這里的 JH_COURSE),如圖下圖所視
選擇 Insert Create Datatable 進入如下圖界面
點選 Import data from file,點擊下一步,點擊 Browse 選擇相應的 TXT 文件,點擊下一步,然后為該引入的 TXT 自定義一個名字,下一步,最后完成引入 TXT 文件的操作.引入成功后,然后選擇Insert value from data table方式,在data中選擇剛剛定義的那個名稱。
例如JH_COURSE表中的COURSENAME(教研室名稱),我們需要設置的字段要求是:教研室+一個自動增加的流水號,方式如下:
首先選擇Build a composite field(創建一個合成字段)方式,然后我們來對這個合成字段做格式設置,通過點擊的 add 按鈕得到下圖界面
因為我們要產生COURSENAME這個固定的字符,所以我們選擇 Text 類型,點擊 OK,進入下圖界面,在 Option 中選擇對應的 Insert a string constant ,
然后在 Constant Text Expression 中輸入自定義的字符,比如這里的教研室,完成后保存設置
因為還要生成一個流水賬號,所以還要通過點擊的 add 按鈕,我們選擇 Numeric 類型
點擊 OK,進入下圖界面,在 Option 中選擇對應的 Insert sequential values,
然后進行字段規則的設置,start表示開始流水號,Increment表示遞增值,
完成后保存設置
對於合成字段的元素,選取后可以進行策略修改(Modify),刪除(Remove),順序上移(Move up),順序下移(Move down)
5) 日期/時間
- 從數據表中插入數據。
- 從數據庫中插入數據
- 插入連續的時間,可以指定起始時間和增長時間。
- 插入隨機的時間,可以設置時間范圍
- 插入當前系統時間
日期/時間有3種設置規則 Insert sequential values、Insert random values、Insert the current system date
- 1. Insert sequential values方式
例如JH_COURSE表中的CREATETIME(創建時間),我們需要設置當前時間+遞增值為1,遞增類型為月的規則,我們將在Option中先選擇Insert sequential values方式,start選擇當前時間,Increment為1,類型選擇month,進行設置,如下圖:
- Insert random values方式
例如JH_COURSE表中的CREATETIME(創建時間),在Option中先選擇Insert random values方式(某一個時間段),我們在Between this date時間選填控件中進行設置,時間跨度選擇為2005年-2013年的任何一天,如下圖:
- Insert the current system date 方式
例如JH_COURSE表中的LASTMODIFYTIME(最后修改時間),在Option中先選擇Insert the current system date方式(插入系統當前時間),既然是最后修改時間那我們就設置為系統當前日期。
- 此外可以通過weekdays and weekend days(工作日+周末)/weekdays only(只有工作日)/weekend days only(只有周末)來設置周末,如下圖:
可通過format選項來設置日期格式,分別設置Date和Time的格式,生成數據將以設置樣式保存到數據庫中,樣式可參照最下方Sample。此外,也可以在Custom Format選項中指定自定義格式,如‘2010-08-18’。
6、 外鍵字段的產生
說明:外健是數據庫關系中最普通也是使用最平凡的約束方式,我們可以通過二種方式來實現外健約束. 一種是 Insert value from a data table,另一種是 Insert value from an sql database
1) Insert value from an sql database 方式
例如:UP_STAFFROOM表中STAFFROOMID和 FW_DEPARTMENG表中 DEPID 之間是外健關系, 所以選擇從數據庫插入數據,我們需要自己編寫SQL語句從數據庫中提取數據,STAFFROOMID需要取DEPID值,因此我們使用Insert value from an sql database方式。
我們把DEPID字段產生的方式先設置成為寫 SQL 語句的方式,然后在SQL Statement 中填入Select DEPID from GDS_CS.FW_DEPRATMENT 這個簡單的SQL語句使STAFFROOMID 得到 DEPID 的值,並且用戶可以在 SQL 返回的結果中,篩選所需要的內容 if more than one recode is returned(如果返回的條件超過一行),Use first record(只選擇第一行作為當前字段值),Select a record at random(隨機選擇一個值作為當前字段值) 注意:由於教研室ID字段是唯一的,所以要勾選Unique(唯一的)。
2) Insert value from an sql database 方式
例如:表UP_STAFFROOM中的SATFFROOMID與表JH_COURSE中的SATFFROOMID為外鍵關系,所以表JH_COURSE中的SATFFROOMID需要取值與表UP_STAFFROOM中的SATFFROOMID,需要使用Insert value from a data table 方式,分別出現以下設置內容,在Data(產生數據的數據源)中選擇與之關聯的~GDS_CS.UP_STAFFROOM 表,然后在Field中選擇SATFFROOMID 如圖:
7、 字段轉碼問題
例如:FW_COURSE表中的SUBJECTTYPE(課程學科分類碼),轉碼問題需要選用Insert value from an sql database方式,首先在數據庫中查詢出需要轉碼的字段。
根據表中的提示,先在FW_CODELIST視圖中查看有沒有KCXKFLM的碼值。
我們把需要轉碼的字段產生的方式先設置成為寫 SQL 語句的方式,然后在SQL Statement 中填入select CODEVALUE from GDS_CS.FW_CODELIST where CODETYPE='KCXKFLM' 這個簡單的SQL語句使SUBJECTTYPE得到KCXKFLM 的碼值。
8、 運行(Run)
9、 運行后出現的一些約束問題
如果運行中出現一些字段有關於約束的提示
根據提示的字段到數據庫中進行相關約束的查找查詢。
然后根據具體的字段約束,選擇合適的方式進行設置。