Xebium詳解07-操作DB
前面我們談到過,Web自動化離不開數據的初始化,否則無法控制頁面的輸出和結果的校驗。那麼如何操作DB呢?
Xebium的SLIM測試系統直接利用反射來做Unit Test,既然這樣我們可以寫自己的Class來調用DB,讓Xebium當作單元測試的方式發現並識別我們類,初始化並調用方法,這樣我們就可以和DB打交道。SLIM系統還提供不同類間通過變數來傳遞值,這樣DB取到的值也可以當作網頁輸出值判斷的依據,而不是用固化的定義值來判斷,用例更為靈活多變。
以下我們用MySQL訪問操作來具體說明,先列出具體的方法名稱定義,代碼實現我之後再放出。
public class MySQLDBUtil {
public MySQLDBUtil(String connectType, Map connectParam){} //初始化時定義連接類型和連接參數 public void setOperation(Map operation){} //傳入DML或者DDL來操作數據 public String getReturn() {} //取得上述Operation的返回值}
之前我們看到Xebium頁面是以表格這種形式來調用Class的,但並沒有提供相關的數據類型來定義每一格是什麼類型,但在內部做了如下規範:
SLIM所有傳入的數據類型只有3種:String類型;數值型(int或者double);Map類型(從界面上看,表現key和value這2個欄位的表格)。由於系統自動識別,為了數值型的精度問題,從個人經驗來說,不建議直接使用(int除外),而通過String類型在代碼內部做處理。
MySQLDBUtil的初始化方法,如果公司內部使用,或者不想把DB連接的ip,埠,用戶名和密碼顯式傳入(不讓其他用戶知道),那麼完全可以不需要任何參數。但結果是一旦有多個資料庫要連,只能修改代碼,作者用其他加密文件讀入,都需要增加一定的代碼量。對於測試人員來說,直接用最快最直接的解決問題,保證測試充分,該開放的開放,能自定義的地方就盡量支持自定義,不要固執於任何保密策略或其他的制度,:)。
setOperation這個方法,用Map是為了區分DML和DDL這2種SQL,從測試角度來說,DML會返回具體的值,DDL的返回值不容易判斷正確性,用DML來判斷DDL是測試常用的方法。另外,getReturn操作也依賴於setOperation方法。
getRetrun這個方法,可以獲取Operation的結果集。 如果做過java操作MySQL的結果集處理的話,也很容易,但是問題在於Xebium的輸出直接用String或者數值,(雖然也可以支持map類型輸出,但界面需要自定義html格式,不推薦),所以像select語句盡量用select 欄位名,而不是select *這種獲取全部欄位內容。
當代碼完成後,打成jar包,放入Xebium的lib目錄(其他目錄也可以),最終頁面調用即可。如下圖:
保存後顯示為:
執行後,直接操作資料庫,返回第一列數據,數據以「,」進行分割,這樣容易取值,或者直接用於判斷正確性,具體可以看之後的代碼內容。
show關鍵詞用於把getReturn方法的返回顯示出來。如果用「$result=」(result可以用其他英文字元也可以)來替換掉,執行結果就會放入$result中,之後在需要的地方用$result來引用值即可。這樣DB和Web的自動化就可以聯繫起來。相對於selenium調用其它類來得方便,界面表示也簡單易理解。
最後,我把MySQL源碼貼出,其他DB,如Mongo,Oracle等,可以參照這個思路來做,具體代碼實現留給大家來做了。
https://pan.baidu.com/s/1w5Jl7TfLST04XKUjbg3byQ從測試角度來說,自己開發的套件目的達到即可,一般DB的操作只在於測試的初始化,測試過程的數據校驗,便於當數據變化時,提高驗證結果的靈活性。也就是說,如果一個用例可以做到在SetUp階段初始化數據,導入db腳本,測試中間用db數據驗證(就算其他過程對數據進行修改也不影響結果判斷,測試中自動去取DB的中的值),在TearDown階段,刪除臨時數據。這和做UnitTest思路也是一致的,一旦完成,可以免除大部分維護工作,才能感受到自動化的好處,相應的也能提升成就感;維護工作越多就越有挫敗感,不值得提倡。
推薦閱讀:
※2018年3月1日測試精選
※2. 掀起介面測試的蓋頭-HTTP 初窺 (一)
※開發人員關於測試的總結
※實戰篇 近期線上BUG分析及解決方案總結
※總有你之所想——IT職位(補錄軟體測試)