qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          軟件測試實驗學習筆記系列6--圖形界面測試(GUI)

           圖形用戶界面測試

            界面是軟件和用戶交互的最直接的層面,界面決定了用戶對軟件的印象,GUI,設計良好GUI—輕松愉悅的感覺。Web應用+網頁制作--->GUI設計的興起.

            流行的界面風格:多窗體風格,單窗體風格,資源管理器風格

            特性:易用性,規范性,幫助,合理性,美觀與協調,菜單位置,獨特性,快捷方式的結合,安全性考慮,多窗口的應用與系統資源。

            GUI測試重點是正確性,易用性和視覺效果,文字檢查和拼寫檢查是GUI測試的重要環節。

            用戶通過GUI拖動鼠標,單擊按鈕等來驅動軟件完成需要的功能,這個涉及到:

            GUI輸入主要是由一系列的事件或行動完成,擁有大量需要測試的狀態,輸入和狀態轉移不僅僅與當前的輸入事件有關,而且還與以前的輸入事件相關

            GUI軟件的輸入和事件的排列組合的數據非常巨大,執行路徑比較多(想想100階乘和101階乘的區別)

            GUI中包含了大量復雜的組件和控件,允許多個窗口被激活,彼此之間存在一些同步機制,窗口中每個對象可以影響和控制其他對象

            GUI界面之間相互影響,相互依賴。--耦合度高

            GUI軟件是基于事件和消息的。

            GUI測試中的很多方法是重復而枯燥的。

            除了考慮圖形對象測試的本身特性,系統工作流程的測試也是一個重點,數據庫設計,程序結構設計最終要界面設計的

            GUI測試的基本過程:1.執行用戶操作,2.獲取檢測狀態,3.對比驗證內容

            基本原理:測試者在運行應用程序的同時,把他的所有的動作(鍵盤操作,鼠標操作)捕獲或者錄制下來,生成一個腳本文件,這個腳本文件以后可以被”回放“(playback),也就是按照上一次的所有執行動作重復執行一遍,實現自動運行和測試。在實際的測試過程中,同一動作的重復執行意義不大,而是根據測試需求為其進行一些必要的修改。

            GUI自動化測試工具的捕獲/錄制模式--->原型級的實現--->插入檢查點,維護腳本--->編程修改,GUI自動化測試:軟件規范過程,在錄制前設計好測試用例.

            GUI自動測試工具:開源的Java的GUI測試工具—Selenium。SWTBot用于SWT,基于Eclipse應用的GUI測試工具,提供了能簡化訪問SWT和Eclipse組件的API,基于Apache2許可協議。其測試運行配置和JUnit非常的相似,測試方法的結構也很相似

            1.JavaGUI基礎類庫應用測試

            JavaGUI: SWT/JFace,Swing,AWT(Abstract WindowingToolkit)--->java.awt,JFC的一部分--->提供了JavaApplet,JavaApplicaton中可用的GUI中的基本組件,Swing自己繪制控件,調用本地圖形子系統中的底層例程,而不是依賴于OS的高層模塊。模仿原生系統,純Java,輕量級,大量運用MVC模式的GUI工具包。SWT/JFace—Eclipse--高效的GUI程序

            1.1JFCUnit單元測試工具的介紹

            Xp測試驅動開發觀念,單元測試技術,Java-->JUnit+Ant,JUnit的局限性,HttpUnit--Web測試,GUI--JFCUnit。

            JFCUnit是JUnit的擴展框架,擴展了針對SwingGUI的單元測試工具,提供的一些基本功能:

            ①捕獲取窗體/對話框的句柄

            ②在一個進程的組件容器內,確定所需要的組件

            ③模擬觸發組件的事件

            ④用于GUI測試的多線程方法

            JFCUnit從2.0開始,提供XML錄制和回放功能,允許使用者快速,自動地生成/編輯用于驅動測試的腳本。XMLAPI是公開的,可以定義自己的XML標簽句柄。

            1.2JFCUnit基本測試方法

            思路:提供了很多方法,可以用來模擬許多本地應該有傳統測試人員手工進行的觸發事件:單擊按鈕,在文本礦中輸入字符,數字,鼠標雙擊事件,從而實現測試的自動化。

            兩種方式模擬交互:①Junit.Extensions.Jfcunit.JFCTestHelper的EevenQueue來激活事件隊列②使用Junit.Extensions.Jfcunit.RobotTestHelper來封裝java.awt.Robot

            JFCUnit的測試用例類似于任何其他的JUnit測試用例。其主要不同在于它的

            測試用例類應繼承自基類Junit.Extensions.Jfcunit.JFCTestCase,而不是基

            類:Junit.Framework.TestCase。

          1.3 JFCunit環境的建立

            JFCUnit—SourceForge.net—Eclipse插件安裝—配置路徑(jfcunit.jar,jakarta-regexp-1.2.jar{正則表達式java包,如果沒有這個包,jfc就會發生錯誤})

            1.4測試資源應用

            JFCunit是擴展了Junit,具有很多屬于自己的測試資源。

            1.4.1 JFCUnit核心函數的應用方式

            ⑴setUp()和tearDown()

            在junit框架中用于測試的初始化和結束測試,釋放資源

            setUp()在測試方法調用前,負責初始化測試方法所需要的測試環境

            tearDown()在每個測試方法被調用之后調用,負責撤銷測試環境

            流程:測試開始-->setUp()-->testXXX-->tearDown()-->測試結束

            ⑵Find-Component

            JFCUnit中對對象測試的基礎是捕獲測試對象的實例,關鍵是find...Component系列API的應用.具體查找主要基于兩個方面,對象組件的”Name”數據和容器中的Index。

          PublicComponent find(final Container cont,final int index){
          returnfind(new Container[] {cont},index);
          }

            ⑶assert函數

          assertNull(Stringmessage,Object object);
          assertNotNull(Stringmessage,Object object);
          assertEquals(Stringmessage,Object expected,Object actual);
          assertTrue(Stringmessage,boolean condition);
          assertFalse(Stringmessage,boolean condition);
          assertSame(Stringmessage,Object expected,Object actual);
          assertNotSame(Stringmessage,Object expected,Object actual);

            ⑷JFCTesthelper和TestHelper

            JFCTesthelper繼承TestHelper中很多用于自動畫界面操作的方法。

            1.5 JFCUnit的使用--GUI類和實驗

            突然間發現自己做了很多的重復的工作,處在互聯網3.0的時代,我們應該充分的利用網絡,以下是我google的一些JFCUnit的文章,寫得還是相當的不錯的。

            JFCUnit實戰:http://www.ltesting.net/ceshi/open/kydycsgj/2007/0525/5733.html

            使用JFCUnit進行GUI單元測試 :http://www.aygfsteel.com/wukaichun600/archive/2006/10/19/76026.html

            以上僅僅是google后第1,2頁顯示的結果,google讓知識的獲取變得更加的簡單了。知識的來源不再是僅僅局限于書本,通過搜索引擎(google,baidu)從Internet上獲取知識漸漸成為一個更為便捷有效的方式。這件事情既是機遇也是挑戰。

            機遇:人類從未如此便捷的獲取知識過,搜索引擎加速了信息的流通,使得我們可以更為方便的整合知識。

            挑戰:隨著可獲取的信息量的膨脹,在如此龐大的信息中識別出有效的信息成為了一個問題。此外,搜索引擎提供的普遍的知識原始的材料,如何處理和整合這些信息從而創造出更有價值的知識無疑將成為當代知識分子的所面臨的挑戰。

            1.6JFCUnitXML測試框架

            JFCUnitXML是一個建立的XML框架之上的測試框架。XML框架支持Swing和非Swing的測試,框架圖示如下:

            JFCUnitXML允許開發者編寫XML代碼來開發用于各種測試目的的測試集。錄制生成XML的方式使大多數的測試生成過程自動化,可復用性高

            1.3 JFCunit環境的建立

            JFCUnit—SourceForge.net—Eclipse插件安裝—配置路徑(jfcunit.jar,jakarta-regexp-1.2.jar{正則表達式java包,如果沒有這個包,jfc就會發生錯誤})

            1.4測試資源應用

            JFCunit是擴展了Junit,具有很多屬于自己的測試資源。

            1.4.1 JFCUnit核心函數的應用方式

            ⑴setUp()和tearDown()

            在junit框架中用于測試的初始化和結束測試,釋放資源

            setUp()在測試方法調用前,負責初始化測試方法所需要的測試環境

            tearDown()在每個測試方法被調用之后調用,負責撤銷測試環境

            流程:測試開始-->setUp()-->testXXX-->tearDown()-->測試結束

            ⑵Find-Component

            JFCUnit中對對象測試的基礎是捕獲測試對象的實例,關鍵是find...Component系列API的應用.具體查找主要基于兩個方面,對象組件的”Name”數據和容器中的Index。

          PublicComponent find(final Container cont,final int index){
          returnfind(new Container[] {cont},index);
          }

            ⑶assert函數

          assertNull(Stringmessage,Object object);
          assertNotNull(Stringmessage,Object object);
          assertEquals(Stringmessage,Object expected,Object actual);
          assertTrue(Stringmessage,boolean condition);
          assertFalse(Stringmessage,boolean condition);
          assertSame(Stringmessage,Object expected,Object actual);
          assertNotSame(Stringmessage,Object expected,Object actual);

            ⑷JFCTesthelper和TestHelper

            JFCTesthelper繼承TestHelper中很多用于自動畫界面操作的方法。

            1.5 JFCUnit的使用--GUI類和實驗

            突然間發現自己做了很多的重復的工作,處在互聯網3.0的時代,我們應該充分的利用網絡,以下是我google的一些JFCUnit的文章,寫得還是相當的不錯的。

            JFCUnit實戰:http://www.ltesting.net/ceshi/open/kydycsgj/2007/0525/5733.html

            使用JFCUnit進行GUI單元測試 :http://www.aygfsteel.com/wukaichun600/archive/2006/10/19/76026.html

            以上僅僅是google后第1,2頁顯示的結果,google讓知識的獲取變得更加的簡單了。知識的來源不再是僅僅局限于書本,通過搜索引擎(google,baidu)從Internet上獲取知識漸漸成為一個更為便捷有效的方式。這件事情既是機遇也是挑戰。

            機遇:人類從未如此便捷的獲取知識過,搜索引擎加速了信息的流通,使得我們可以更為方便的整合知識。

            挑戰:隨著可獲取的信息量的膨脹,在如此龐大的信息中識別出有效的信息成為了一個問題。此外,搜索引擎提供的普遍的知識原始的材料,如何處理和整合這些信息從而創造出更有價值的知識無疑將成為當代知識分子的所面臨的挑戰。

            1.6JFCUnitXML測試框架

            JFCUnitXML是一個建立的XML框架之上的測試框架。XML框架支持Swing和非Swing的測試,框架圖示如下:

            JFCUnitXML允許開發者編寫XML代碼來開發用于各種測試目的的測試集。錄制生成XML的方式使大多數的測試生成過程自動化,可復用性高


          JFCUnitXML基礎

            XML是一種基于SGML的標記語言,成為網絡數據交互的強大工具。XML提供了定義和處理GUI測試的一個有效的方法,在JFCUnit類中開發出了XML接口,XML執行接口。

            XMLJunit框架:定義特性—可以在作用域范圍內允許它在測試用例之間使用,定義在XML中的各個測試用例可以訪問定義在父類或者祖父類的特性,父級可以通過執行特性名來隱式訪問,或者”../”父訪問路徑來顯式訪問。特性可以通過${name}訪問。程序可以在測試集和測試用例上定義,父類能夠在更高級層次上定義---可以生成程序庫。

            兩個保留程序:setUp,tearDown—對應TestCase.setUp|tearDown

            擴展XML接口,taghandler結合Java后端開發并寫入XML中,taghandler通過XML腳本定義進行注冊/不注冊,taghandler的概念:

            Suitetags: 1.引入定義在其他XML文件中有關文件中的有關集的文件標簽,2.程序標簽定義3.在測試用例間共享特性標簽

          Suiteof Suites:
          <suitename=”Abc”>
          <filename=”a.xml”/>
          <filename=”b.xml”/>
          <filename=”subdir/c.xml”>
          </suite>

          程序標簽
          <suite name=”Procedure Example”>
          <procedure name=”Login”>
          …..
          </procedure>
          <procedure name=”Logout”>
          …..
          </procedure>
          <test name=”Login”>
          <procedurecall=”Login”>
          </test>
          </suite>


            特性標簽

            標簽名對應于相應值

            作用域

            訪問文法:${name}syntax

            定義:<propertyname=”debug” value=”true”/>

            其他定義

            向程序員傳遞數據

            判定標簽進行分支跳轉

            對各種標簽進行循環處理

            Chose/When/Otherwise,Echo, Noop, Assert/Fail, Evaluate, Foreach, Indexof,Dump,

            AssertHasFocus,AssertEnabled,AssertTableCellContains,AssertTextFieldContains

            1.7 小節

            JFCUnit XML:說到底就是JFCUnit的一種高一個層次封裝,通過XML來描述測試用例,然后使用某中類型的代碼生成器將XML描述轉換為JFCUnit代碼,從而避免了手工Code。高層次的抽象帶來的好處就是可以屏蔽一些繁瑣的細節,從而讓程序員專注更加重要的應用上,而不是浪費時間在底層細節上。這中思想在很多的方面被廣泛的應用,操作系統,編程語言,編譯系統等等。

            2 Web頁面測試

            Internet技術發展,Web系統變得越來越復雜,Web工程:測試,確認,驗收。Web環境:瀏覽器平臺不兼容,網絡多樣化,應用復雜等諸多特性。

            Web測試分類:頁內測試(IntraPageTest)和跨頁測試(InterPageTest)

            頁內測試的方法:人工走查,使用web頁面測試工具.

            頁面測試準則:直觀,一致,靈活,舒適

            2.1web頁面測試工具

            web頁面測試的兩種思路:1.瀏覽器測試2.協議測試(在Http上的JavaScript級測試,JavaScript偽協議, POST, WebService).在一些功能測試中,協議測試用的比較的多。

            Web測試工具:

            1.HttpUnit:HttpUnit是在JUnit之上構建的測試框架,支持Web應用的黑盒測試和in-container容器內測試。作為功能測試工具,也可以用它驗證軟件是否符合業務需求,以及是否在可視的級別符合預期的行為。HttpUnit的目的加強HTTP對Web應用的訪問,支持的特性:狀態管理(cookies),提交請求,應答解析(HTML解析),以及網絡爬蟲(webspider)。HttpUnit還有一個支持容器內測試的類ServletUnit.JUnit提供的斷言功能和結果報告的基礎上,HttpUnit提供了一個非常有用的web應用測試工具。www.httpunit.org.

            2.JWebUnit:HttpUnit上創建的一個輔助工具包,減少測試web程序所要編寫的代碼,簡單當作HttpUnit的宏程序庫,提供到HttpUnit代碼段的快速方式,簡化web程序測試中的大多數行為,HttpUnit的底層接口可以讓測試人員定制很多事情,JWebUnit對代碼有更好的控制。jwebunit.sourceforge.net

            3.StrutsTestCase:是為了測試Struts應用而在Junit基礎上創建的測試框架,Structs(MVC模式)使web程序容器間的功能測試和單元測試變得更復雜了。Struts使web程序容器之間(in-container)的功能測試和單元測試變得復雜了,Struts處于servlet容器和程序之間,HttpUnit獨立于程序和容器之間.StrutsTestCase轉為Struts程序的容器間測試而設計的.strutstestcase.sourceforge.net

            4.Selenium:用于web應用程序測試的工具,將核心組件插入到瀏覽器中,整個測試直接在瀏覽器中運行,如同真正的用戶在操作一樣,所有的測試都是可見的。支持的瀏覽器:IE,Mozilla,Firefox等.測試兼容性,測試系統功能。seleniumhq.org/download

            5.HtmlUnit:具有瀏覽器基本功能的Java組件,HtmlUnit是Junit的擴展測試框架之一。支持HTML,提供API

           2.2HttpUnit

            工作原理:模擬瀏覽器行為,處理頁面幀(frames),cookies,頁面重定向(redirects)等,通過HttpUnit提供的功能,可以和服務器進行信息交互,將返回的網頁內容作為普通文本,XMLDOM對象或者鏈接,頁面框架,圖像,表單,表格等集合。

            核心組件:

            發送請求并接受響應的web客戶機

            分析并驗證響應內容的方法集

            HttpUnit—功能測試--極限編程(XP)中起到重要的作用

            商業的web工具都是通過錄制回放實現的,HttpUnit關注的重點是控件的內容,而不是控件的外在表現形式.HttpUnit無GUI,開源,API簡單性—靈活性和強大

            2.2 HttpUnit的使用

            google一下可以找到很多關于這個的,個人決定不再增加冗余信息。列舉一二個人覺得比較好的。

            使用HttpUnit進行集成測試 :http://www.aygfsteel.com/relax/archive/2005/01/27/743.html

            HttpUnit基礎教程:http://wenku.baidu.com/view/ed3be4f77c1cfad6195fa7d0.html

            除此以外,不要忘記HttpUnit官方網站以及研究HttpUnit源代碼這樣的方法

            2.3JWebUnit

            JwebUnit是基于Java的用于測試網絡程序的框架,架構在HttpUnit之上----即JWebUnit以HttpUnit和JUnit單元測試框架為基礎,適合做Web應用的驗收測試。JWeb是HttpUnit的高層封裝,提供訪問Web應用程序的高級API,組合一組斷言。JWebUnit是以jar文件形式提供的,方便使用,JWebUnit輕量級集成HtmlUnit和Selenium。

            2.3.1 環境建立:sourceforge.net/projects/jwebunit --說穿了,就是一些jar包,在使用JWebUnit的時候將其添加到構建路徑中

            2.3.2 JWebUnit應用方法

            依然google,不增加無用信息:

            JWebUnit官方地址:http://sourceforge.net/projects/jwebunit/?source=directory

            JWebUnit For Web Regression Tests: http://www.intertech.com/Blog/jwebunit-for-web-regression-tests/

            備注:國外的人寫的技術博客含金量還相當的高,一方面人家沒有語言障礙,二不像國內這么浮躁(社會環境所致)。雖然有點語言的障礙,但是如果想從事IT這一行的話,英語就是一項必不可缺的的技能:因為最新的技術總是用英文寫的或者最早轉換的語言就是英文。而且國內的技術水平落后國際有5到10年的差距,當然這個數據不是一陳不變的,但是學習并閱讀英文資料總是有好處的,當然剛一開始時可能會不太適應,但是過一段時間就好了。至少個人是這么認為的。

            參考文獻:

            [1]軟件測試實驗指導教程/蔡建平, 清華大學出版社, 2009.11

          相關文章:

          軟件測試實驗學習筆記系列5-單元覆蓋測試


          posted on 2013-08-12 10:18 順其自然EVO 閱讀(854) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2013年8月>
          28293031123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 花莲市| 张北县| 洪雅县| 藁城市| 麻栗坡县| 武宣县| 绥滨县| 栾川县| 依兰县| 乌兰县| 炎陵县| 唐河县| 弥渡县| 和平区| 英吉沙县| 阳曲县| 含山县| 英德市| 三台县| 彭州市| 新兴县| 赤壁市| 大悟县| 沁源县| 连南| 邛崃市| 秭归县| 手游| 岫岩| 文登市| 南开区| 驻马店市| 内丘县| 九寨沟县| 婺源县| 湟中县| 通榆县| 三亚市| 灵川县| 林周县| 三穗县|