[題記]:今晚一個人跑到杭州窩在賓館無所事事,也睡不著,就把這幾天來關于自動化測試的探討記錄下來,也給自己一個機會,逼著自己好好反思這一年多來關于自動化測試的點滴。其實,我也只是接觸過兩套自動化框架,一是項目組開發、設計出來的,在這個從無到有的過程中,我學到了很多。其二便是學習的Robot Framework,它告訴我一個優秀的自動化框架應該具備些什么。
都講自動化測試開發,當然要把開發自動化測試框架也當做一個項目來做。這時候,就需要考慮應該選擇何種類型的自動化測試框架:數據驅動、關鍵字驅動、還是Junit ,TestNG ? 抑或直接利用現有的開源自動化測試框架,如Robot Framework 。無法講這幾種類型的框架,孰優孰劣,關鍵是認清項目實際,選擇最適合的。講一些題外話,就Java學習者而言,Junit3.x的源碼是再好不過的教材了,JUnit框架運用到了大量的設計模式,反射機制。
在決定了選用何種自動化框架類型后,下面你需要抉擇的就是:應該選擇何種編程語言呢?編程語言的選擇和開發者的技術背景有很大關系,一般都會選擇自己熟悉的編程語言,但這也往往是個局限。另一方面,也受到SUT的影響。一般而言,很少見有選擇C,C++作為自動化框架開發語言的,雖然這兩種語言的執行效率要高,但開發效率要低一些。我們項目的自動化框架是Java語言編寫的,關鍵字也是由Java實現的。關鍵字的實現選擇Java,是由于SUT - 即Domino服務器提供的API是有Java ,C++。所以自然選擇了Java。而自動化框架開發語言的選擇,其實可以有別的選擇,如腳本語言Python ,Perl。腳本語言Python,或Perl,作為超高級開發語言,解釋執行的特性,在開發效率上可能會高一點。
下面就是關鍵字實現方式的選擇了。關鍵字就相當于手動執行測試用例當中的一個步驟,比如現在的項目,即一個關鍵字就是修改產品的一個配置選項,也可以是發一封帶有特定附件的郵件。就我們的產品而言,Domino提供的操作數據庫的方式有三種,即DIIOP、Web Services和本地調用。剛開始選擇的是DIIOP,這種方式實現起來比較簡單,后來發現通過這種方式實現的自動化腳本,即包含十幾個關鍵字腳本,其執行時間大概要35s – 40s。而Web Services的執行時間就要效率就要高得多,差不多一個自動化腳本的執行時間可以縮短10s, 但其實現需要分為服務器端Web Service的發布,和客戶端的調用,通過這種方式實現,測試環境的部署也要復雜些。講這些,主要是告訴我們,一開始就需要對這些做出評估,選擇合適的方案,不然中途改變,影響是很大的。
自動化框架,說白了就是流程的封裝啦。那么一個自動化框架應該包括哪些流程呢?來看看下面這兩幅框架圖吧。
第一幅圖講解了一套自動化測試是由自動化框架,自動化腳本,關鍵字組成的。第二幅圖描述了自動化框架的流程:根據配置挑選要執行的測試用例,解析自動化執行腳本,將自動化執行腳本送給自動化執行引擎,生成Log文件,最后生成Report。
對比Robot Framework框架,這套簡單的自動化框架有哪些地方可以提高呢?第一個,基于Test Suit的setup和teardown。一個自動化腳本的組成是這樣的:清理、初始化測試環境(如,建立一些測試腳本需要用到的數據庫), 執行自動化腳本,生成執行結果,最后清空環境。這些步驟我們的自動化腳本中也實現的,但如果想在執行一批測試用例之前,做一些動作,執行完以后,在清空,我們用得方式就是把這些自動化腳本的名字在要執行的一批測試腳本之前,我們的腳本是按字母排序的,這樣確保的。其實應該有更好的方式。第二個,自動化腳本中有關鍵字Fail了,是否還需要接著執行下面的關鍵字呢。我們框架式會繼續執行,但Robot Framework做到了可配置,它是通過listern來實現的??梢院煤脤W習下。
自動化框架、關鍵字的開發周期怎么安排,怎么預估effort ? 項目自動化測試框架,自動化腳本開發也分成了兩Iteration。 第一個迭代期間,完成自動化框架主要流程,完成主要關鍵字,構建SMOKE部分的自動化腳本。第二次迭代,進一步完善自動化框架,接著添加關鍵字,完成 Regression部分自動化腳本。剛開始,effort的估計沒有把握,因為有些關鍵字的實現可能比較困難,這時候需要及時sync風險。第二個階段,effort的估計就有底了。
原文轉自:http://www.uml.org.cn/Test/201306283.asp