開(kāi)源Web自動(dòng)化測(cè)試指南計(jì)算機(jī)軟件與應(yīng)用IT計(jì)算機(jī)資料_第1頁(yè)
開(kāi)源Web自動(dòng)化測(cè)試指南計(jì)算機(jī)軟件與應(yīng)用IT計(jì)算機(jī)資料_第2頁(yè)
開(kāi)源Web自動(dòng)化測(cè)試指南計(jì)算機(jī)軟件與應(yīng)用IT計(jì)算機(jī)資料_第3頁(yè)
開(kāi)源Web自動(dòng)化測(cè)試指南計(jì)算機(jī)軟件與應(yīng)用IT計(jì)算機(jī)資料_第4頁(yè)
開(kāi)源Web自動(dòng)化測(cè)試指南計(jì)算機(jī)軟件與應(yīng)用IT計(jì)算機(jī)資料_第5頁(yè)
已閱讀5頁(yè),還剩26頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

開(kāi)源Web自動(dòng)化測(cè)試指南計(jì)算機(jī)軟件與應(yīng)用IT計(jì)算機(jī)資料開(kāi)源Web自動(dòng)化測(cè)試指南計(jì)算機(jī)軟件與應(yīng)用IT計(jì)算機(jī)資料目錄TOC\o"1-3"\h\z1 引言與概述 41.1 背景 41.2 開(kāi)源Web自動(dòng)化測(cè)試的優(yōu)勢(shì) 41.2.1 Selenium簡(jiǎn)介 41.2.2 Selenium的優(yōu)勢(shì) 42 開(kāi)源Web自動(dòng)化測(cè)試架構(gòu) 62.1 基于Selenium2.0的自動(dòng)化測(cè)試框架 62.2 新Web自動(dòng)化測(cè)試代碼架構(gòu) 73 Web自動(dòng)化測(cè)試編寫(xiě) 83.1 集成開(kāi)發(fā)環(huán)境搭建 83.1.1 選擇底層實(shí)現(xiàn)方法 83.1.2 eclipse配置 93.1.3 項(xiàng)目環(huán)境配置 103.2 測(cè)試案例編寫(xiě) 133.2.1 Selenese語(yǔ)法 143.2.2 XPath介紹 143.2.3 測(cè)試案例框架 164 管理測(cè)試案例 194.1 測(cè)試工程目錄結(jié)構(gòu) 194.2 使用Ant運(yùn)行測(cè)試案例 204.2.1 Ant介紹 204.2.2 Ant基本語(yǔ)法 204.2.3 輸出測(cè)試報(bào)告樣式 214.2.4 AntBuild 214.3 使用Jenkins管理自動(dòng)化測(cè)試任務(wù) 224.3.1 Jenkins介紹 224.3.2 Jenkins任務(wù)創(chuàng)建 224.3.3 Jenkins任務(wù)執(zhí)行 244.3.4 Jenkins執(zhí)行結(jié)果查看 245 數(shù)據(jù)管理 255.1.1 自動(dòng)化測(cè)試流程圖 255.1.2 JDBC連接數(shù)據(jù)庫(kù)代碼范例 265.1.3 數(shù)據(jù)回滾腳本 285.1.4 數(shù)據(jù)初始化腳本 285.1.5 配置文件管理 296 疑難手冊(cè) 31附錄A-Selenium2.0常用命令 32附錄B-案例文件、配置文件demo 32附錄C-CC使用及培訓(xùn)資料 32HYPERLINK引言與概述背景目前QTP是我司使用最廣泛的自動(dòng)化測(cè)試工具,在實(shí)際使用中發(fā)現(xiàn),QTP存在以下不足之處:QTP基于測(cè)試對(duì)象庫(kù)來(lái)識(shí)別測(cè)試對(duì)象,其內(nèi)部機(jī)制是不透明的,在實(shí)際工作中,對(duì)測(cè)試對(duì)象庫(kù)的維護(hù)工作量很大,耗費(fèi)了測(cè)試人員大量的精力,效果卻并不好;QTP的設(shè)計(jì)架構(gòu)決定了當(dāng)前測(cè)試腳本可復(fù)用性差,很難積累可重復(fù)使用的函數(shù)、組件、包等測(cè)試資產(chǎn);使用QTP的描述性編程來(lái)創(chuàng)建測(cè)試腳本,嚴(yán)重依賴(lài)于測(cè)試人員的個(gè)人經(jīng)驗(yàn)和技巧,難以大規(guī)模推廣;自動(dòng)化測(cè)試數(shù)據(jù)經(jīng)常失效,原因在于沒(méi)有統(tǒng)一的數(shù)據(jù)回滾措施。基于商業(yè)自動(dòng)化測(cè)試工具QTP的錄制/回放模式,無(wú)法構(gòu)建健壯的自動(dòng)化測(cè)試腳本,所以我們迫切地需要新的工具來(lái)替換QTP。當(dāng)前有多種開(kāi)源自動(dòng)化測(cè)試工具可供選擇,Selenium2.0便是目前使用最廣泛的開(kāi)源測(cè)試工具之一。開(kāi)源Web自動(dòng)化測(cè)試的優(yōu)勢(shì)Selenium簡(jiǎn)介Selenium是一系列基于Web的自動(dòng)化測(cè)試工具。Selenium提供了一系列測(cè)試函數(shù)用于支持Web自動(dòng)化測(cè)試,這些函數(shù)非常靈活,他們能夠通過(guò)多種方式定位UI元素,并將預(yù)期結(jié)果與系統(tǒng)實(shí)際表現(xiàn)相比較,測(cè)試人員通過(guò)這些測(cè)試函數(shù)來(lái)模擬用戶操作,從而實(shí)現(xiàn)Web自動(dòng)化測(cè)試。Selenium2.0集成了WebDriverAPI,解決了Selenium1.0的局限,二者相互彌補(bǔ),提供了更多可選的編程接口。Selenium的優(yōu)勢(shì)QTP的測(cè)試對(duì)象庫(kù),對(duì)與測(cè)試人員來(lái)說(shuō)是不透明的。圖1-1為構(gòu)建QTP自動(dòng)化測(cè)試腳本的流程,在使用QTP錄制測(cè)試腳本的時(shí)候,測(cè)試人員根本不清楚測(cè)試對(duì)象庫(kù)中的測(cè)試對(duì)象是否有效,能否滿足需求,這給使用者帶來(lái)很大的困擾。圖STYLEREF1\s1SEQ圖\*ARABIC\s11構(gòu)建QTP自動(dòng)化測(cè)試腳本的流程Selenium2.0具有很強(qiáng)的靈活性和很好的擴(kuò)展性,測(cè)試人員從頁(yè)面數(shù)據(jù)中提取對(duì)象,引入測(cè)試邏輯構(gòu)建測(cè)試腳本。通過(guò)這樣的方式,測(cè)試人員能夠確保測(cè)試對(duì)象的有效性,對(duì)測(cè)試對(duì)象的維護(hù)也更容易。圖STYLEREF1\s1SEQ圖\*ARABIC\s12構(gòu)建Selenium2.0自動(dòng)化測(cè)試腳本的流程對(duì)比QTP和Selenium2.0構(gòu)建自動(dòng)化測(cè)試腳本的流程圖,我們可以發(fā)現(xiàn),Selenium不再基于錄制/回放模式來(lái)創(chuàng)建自動(dòng)化測(cè)試腳本,彌補(bǔ)了QTP的不足:開(kāi)源測(cè)試工具識(shí)別測(cè)試對(duì)象的機(jī)制是透明的,可以減少測(cè)試人員的維護(hù)工作量;采用開(kāi)源測(cè)試工具,可以將需要重用的測(cè)試代碼打包到j(luò)ar中。后續(xù)計(jì)劃引入配置管理,保證可重用jar包的質(zhì)量;采用java語(yǔ)言來(lái)編寫(xiě)測(cè)試腳本,在測(cè)試對(duì)象識(shí)別得到保證的前提下,這并不是一件充滿技巧性的工作;針對(duì)自動(dòng)化測(cè)試數(shù)據(jù)經(jīng)常失效的問(wèn)題,新渠道目前的做法是將恢復(fù)測(cè)試數(shù)據(jù)的SQL放在定時(shí)JOB中,在自動(dòng)化測(cè)試運(yùn)行前恢復(fù)相關(guān)測(cè)試數(shù)據(jù)。除此之外,Selenium2.0在很多方面都優(yōu)于QTP,如表1-1所示。表STYLEREF1\s1SEQ表\*ARABIC\s11QTP與Selenium2.0的對(duì)比對(duì)比項(xiàng)QTP(商業(yè))Selenium2.0(開(kāi)源)SeleniumWebDriver購(gòu)置成本昂貴免費(fèi)免費(fèi)測(cè)試對(duì)象識(shí)別機(jī)制不透明透明透明編碼語(yǔ)言VBSJava\Python\Ruby等多種語(yǔ)言Java代碼可重用性低高高腳本維護(hù)工作量高低低是否支持錄制/回放模式是是(功能較弱)否執(zhí)行效率低一般高測(cè)試腳本是否支持配置管理不支持支持支持是否支持訂制否是是開(kāi)源Web自動(dòng)化測(cè)試架構(gòu)基于Selenium2.0的自動(dòng)化測(cè)試框架圖2-1是基于Selenium2.0的自動(dòng)化測(cè)試的整體框架(虛線代表尚未實(shí)現(xiàn)的功能):步驟1:在開(kāi)發(fā)人員提交代碼后,持續(xù)集成引擎(Jenkins)會(huì)對(duì)最新的代碼進(jìn)行編譯和部署;步驟2:Jenkins從配置管理工具(SVN/CC)獲取測(cè)試腳本;步驟3:Jenkins調(diào)用Ant編譯測(cè)試腳本;步驟4:Jenkins調(diào)用Ant去運(yùn)行Junit測(cè)試案例;步驟5:Junit通過(guò)Selenium2.0操作瀏覽器;步驟6:Jenkins輸出測(cè)試報(bào)告,并以郵件的形式向測(cè)試人員發(fā)送自動(dòng)化測(cè)試結(jié)果。圖STYLEREF1\s2SEQ圖\*ARABIC\s11新Web自動(dòng)化測(cè)試整體框架新Web自動(dòng)化測(cè)試代碼架構(gòu)基于Selenium2.0的Web自動(dòng)化測(cè)試,每個(gè)測(cè)試案例就是一個(gè)JunitTestCase。Junit測(cè)試案例,由測(cè)試數(shù)據(jù)和測(cè)試邏輯兩部分組成。測(cè)試邏輯最底層的實(shí)現(xiàn)是Selenium2.0庫(kù),通過(guò)抽象和擴(kuò)展出webtest類(lèi)。測(cè)試人員通過(guò)調(diào)用webtest類(lèi)的方法,來(lái)構(gòu)建測(cè)試邏輯。關(guān)于測(cè)試數(shù)據(jù),請(qǐng)參考第5章數(shù)據(jù)管理。圖STYLEREF1\s2SEQ圖\*ARABIC\s12新Web自動(dòng)化測(cè)試代碼框架Web自動(dòng)化測(cè)試編寫(xiě)集成開(kāi)發(fā)環(huán)境搭建選擇底層實(shí)現(xiàn)方法前面提到,Selenium2.0集成了WebDriver的API,因此我們首先需要選擇底層的實(shí)現(xiàn)方法是Selenium還是WebDriver。二者對(duì)比如表3-1所示,Selenium提供了豐富的方法,支持多種瀏覽器,可以滿足各種各樣的測(cè)試邏輯需求,所以,一般情況下優(yōu)先選擇Selenium。但有些系統(tǒng)比較特殊,某些功能Selenium無(wú)法支持,此時(shí)可考慮使用WebDriver。WebDriver提供的方法雖不及Selenium多(如截屏等功能),但是也基本能滿足系統(tǒng)的要求,最主要的是它的執(zhí)行速度非常的快,這點(diǎn)是Selenium所望塵莫及的??偠灾?,還是要根據(jù)系統(tǒng)的實(shí)際情況,選擇合適的實(shí)現(xiàn)方法。

表STYLEREF1\s3SEQ表\*ARABIC\s11Selenium與WebDriver的對(duì)比對(duì)比項(xiàng)SeleniumWebDriver編碼語(yǔ)言Java\Python\Ruby等多種語(yǔ)言Java是否支持錄制/回放模式是否執(zhí)行效率一般高支持的瀏覽器IE、Firefox、Chrome、Safari、OperaIE、Firefox、Chrome提供的測(cè)試方法多基本eclipse配置新標(biāo)裝的電腦,Eclipse配置已經(jīng)完成,請(qǐng)按照下述步驟檢查配置是否正確:步驟1:設(shè)置電腦環(huán)境變量JAVA_HOME:我的電腦(右鍵)→屬性→高級(jí)→環(huán)境變量→(系統(tǒng)變量)新建,進(jìn)行如下編輯:變量名:JAVA_HOME變量值(java安裝的目錄):C:\ProgramFiles\Java\jdk1.6.0_20步驟2:設(shè)置電腦環(huán)境變量CLASSPATH::我的電腦(右鍵)→屬性→高級(jí)→環(huán)境變量→(系統(tǒng)變量)新建,進(jìn)行如下編輯:變量名:CLASSPATH變量值(java安裝的目錄):.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;步驟3:在eclipse中配置java點(diǎn)擊eclipse菜單中Window→Preferences→Java→InstalledJREs,配置如圖3-1。圖STYLEREF1\s3SEQ圖\*ARABIC\s11Eclipse中JRES配置圖項(xiàng)目環(huán)境配置新建Eclipse項(xiàng)目→Project(參見(jiàn)圖3-2)→JavaProject→Next(參見(jiàn)圖3-3)→ProjectName(項(xiàng)目名Webtest_Project,參見(jiàn)圖3-4)→Next→Finish(參見(jiàn)圖3-5)圖STYLEREF1\s3SEQ圖\*ARABIC\s12圖STYLEREF1\s3SEQ圖\*ARABIC\s13輸入創(chuàng)建的工程名字圖STYLEREF1\s3SEQ圖\*ARABIC\s14圖STYLEREF1\s3SEQ圖\*ARABIC\s15導(dǎo)入自動(dòng)化測(cè)試的jar包和相應(yīng)的lib庫(kù)Classpath→BuildPath→ConfigureBuidpath(參見(jiàn)圖3-6)→Libraries→AddExternalJARs→加入jar→OK(參見(jiàn)圖3-7)圖STYLEREF1\s3SEQ圖\*ARABIC\s16圖STYLEREF1\s3SEQ圖\*ARABIC\s17從官網(wǎng)上下載的selenium,包含了selenium-java-2.0b3.jar、selenium-java-2.0b3-srcs.jar和libs,其中selenium-java-2.0b3-srcs.jar是源文件的jar包,不需要導(dǎo)入工程,其他包都要導(dǎo)入。所有需導(dǎo)入工程的jar包已整理在Selenium02.0中,詳細(xì)說(shuō)明如下:webtest_selenium.jar/webtest_webdirver.jar(參見(jiàn)3.1.1章節(jié),根據(jù)選擇的實(shí)現(xiàn)方法加入對(duì)應(yīng)的jar包);加入selenium-java-2.0b3.jar;加入selenium-java-2.0b3文件夾下libs里面的所有jar;新建package包在src包文件夾下面建立一個(gè)屬于自己系統(tǒng)的Web自動(dòng)化測(cè)試的package包。包(package)的命名規(guī)范:全部小寫(xiě),測(cè)試代碼package為com.paic.<系統(tǒng)縮寫(xiě)>.<功能模塊>。例如:com.paic.its.demo。選中src資源包→右鍵單擊→New→Package(參見(jiàn)圖3-8)→name(com.paic.its.demo)→Finish(參見(jiàn)圖3-9)圖STYLEREF1\s3SEQ圖\*ARABIC\s18圖STYLEREF1\s3SEQ圖\*ARABIC\s19測(cè)試案例編寫(xiě)Selenese語(yǔ)法Selenium提供了一套豐富的命令來(lái)測(cè)試你的web應(yīng)用,這套命令通常叫Selenese。它可以用于測(cè)試基于HTML標(biāo)簽的頁(yè)面元素,例如:鏈接,輸入框,下拉框,提交表單,表格數(shù)據(jù)等。(具體常用命令可以參見(jiàn)附錄A)Selenese命令調(diào)用格式主要包括三部分:Command(命令)、Target(目標(biāo))、Value(值),下面通過(guò)個(gè)簡(jiǎn)單的例子說(shuō)明:selenium.type("j_username",username);此命令的目的是輸入登陸用戶名,具體解析如圖STYLEREF1\s3SEQ圖\*ARABIC\s110所示:Command(命令)Target(目標(biāo))Value(值)例1selenium.type"j_username"username圖STYLEREF1\s3SEQ圖\*ARABIC\s110Selenese命令調(diào)用格式圖Selenese命令可以轉(zhuǎn)變?yōu)榫幊檀a,他可以同時(shí)支持包括C#、java、php、Perl在內(nèi)的多種語(yǔ)言,這里我以java語(yǔ)言為例舉一個(gè)簡(jiǎn)單的例子。這是一個(gè)系統(tǒng)登陸的案例,實(shí)現(xiàn)的功能包括:打開(kāi)登陸界面-輸入登陸用戶名、密碼-點(diǎn)擊登陸。通過(guò)這個(gè)案例我們可以很容易的理解selenium如何運(yùn)行Selenese命令,同時(shí)細(xì)心的人應(yīng)該注意到了,在Selenese命令中Target(目標(biāo))或者Value(值)有時(shí)是可以省略的(例如:selenium.open、selenium.waitForPageToLoad)。publicvoidtestLogin()throwsException{ Stringusername="gtdtest115"; //登陸用戶名 Stringpassword="vvvvv88888"; //登陸密碼 selenium.open("/nets-tmr-life/login.jsp"); //打開(kāi)登陸界面 selenium.waitForPageToLoad("30000"); //等待頁(yè)面加載 selenium.type("j_username",username); //輸入登陸用戶名 selenium.type("j_password",password); //輸入登陸密碼 selenium.click("Submit"); //點(diǎn)擊登陸按鈕 selenium.waitForPageToLoad("60000"); //等待加載界面 selenium.stop(); //關(guān)閉selenium}XPath介紹XPath是一門(mén)在XML文檔中查找信息的語(yǔ)言。XPath用于在XML文檔中通過(guò)元素和屬性進(jìn)行導(dǎo)航。它包含一個(gè)標(biāo)準(zhǔn)函數(shù)庫(kù),使用路徑表達(dá)式來(lái)選取,這些路徑表達(dá)式和我們?cè)诔R?guī)的電腦文件系統(tǒng)中看到的表達(dá)式非常相似。Selenium用XPath技術(shù)來(lái)記錄網(wǎng)頁(yè)元素的位置和屬性。下面通過(guò)個(gè)簡(jiǎn)單的例子說(shuō)明:在這個(gè)案例中我們要做的操作是選擇查詢(xún)結(jié)果中的第一條數(shù)據(jù),系統(tǒng)界面圖和代碼解析圖見(jiàn)圖3-11和圖3-12。XPath路徑為"http://table[@id='questResult']/tbody/tr[1]/td[1]/input"。圖STYLEREF1\s3SEQ圖\*ARABIC\s111系統(tǒng)界面圖圖STYLEREF1\s3SEQ圖\*ARABIC\s112代碼解析圖解析如下:路徑以雙斜線//開(kāi)頭,則表示選擇文檔中所有滿足雙斜線//之后規(guī)則的元素(無(wú)論層級(jí)關(guān)系),即尋找table下面所有滿足此路徑條件的數(shù)據(jù)。前綴@用于指定屬性,//table[@id='questResult']則表示在table下面查詢(xún)到滿足id='questResult'的數(shù)據(jù),如圖3-13。圖STYLEREF1\s3SEQ圖\*ARABIC\s113代碼解析圖以斜線/開(kāi)始,那么該路徑就表示到一個(gè)元素的絕對(duì)路徑,在此案例中/tbody/tr[1]/td[1]/input則表示選擇在tbody下面第一行第一列的input數(shù)據(jù),如圖3-14。圖STYLEREF1\s3SEQ圖\*ARABIC\s114代碼解析圖測(cè)試案例框架Selenium的開(kāi)發(fā)提供的SeleneseTestCase是Junit3風(fēng)格的,所以我們的自動(dòng)化測(cè)試案例要符合Junit3的框架。Junit3的測(cè)試案例,包括三個(gè)部分:測(cè)試方法test***()、初始化函數(shù)setUp()和結(jié)束初始化函數(shù)tearDown()。這三者的執(zhí)行順序是:setUp()→test***()→tearDown()。此外,Junit3在命名規(guī)范和繼承層次上有嚴(yán)格的要求:測(cè)試類(lèi)測(cè)試類(lèi)必須繼承TestCase。SeleneseTestCase是TestCase的子類(lèi),所以在新建的測(cè)試類(lèi)直接繼承SeleneseTestCase即可。測(cè)試方法測(cè)試方法必須是Public,且以test開(kāi)頭。為了使命名更為規(guī)范,測(cè)試方法名應(yīng)與測(cè)試案例的功能模塊相關(guān),如:測(cè)試保單查詢(xún)功能的測(cè)試方法寫(xiě)為testPolicySerch()。初始化函數(shù)測(cè)試案例中,必須包含初始化函數(shù)setUp()和tearDown()。setUp()執(zhí)行在測(cè)試方法之前,我們統(tǒng)一將初始化瀏覽器,登陸測(cè)試系統(tǒng)的操作放在這一函數(shù)中,在每次測(cè)試方法運(yùn)行前執(zhí)行。tearDown()函數(shù)中統(tǒng)一放置關(guān)閉瀏覽器的操作,在測(cè)試方法之后執(zhí)行,結(jié)束當(dāng)前測(cè)試案例。新建測(cè)試案例的步驟如下:選中新建的Package→右鍵→New→JunitTestCase(參見(jiàn)圖3.15)→Name→Finish(參見(jiàn)圖3.16)圖STYLEREF1\s3SEQ圖\*ARABIC\s115圖STYLEREF1\s3SEQ圖\*ARABIC\s116建好的SeleneseTestCase,會(huì)提示“ThetypeSeleneseTestCaseisdeprecated”,根據(jù)提示增加“@SuppressWarnings("deprecation")”,忽略類(lèi)已過(guò)時(shí)的警告。接下來(lái)完善我們的測(cè)試案例,根據(jù)命名規(guī)則,新建測(cè)試方法,重寫(xiě)setUp()和tearDown(),詳見(jiàn)模板文件Demo.java。步驟簡(jiǎn)單介紹如下:創(chuàng)建webtest類(lèi)的對(duì)象webtestitsTest=newwebtest();重寫(xiě)setUp()setUp()需要完成webtest的初始化和測(cè)試系統(tǒng)的登陸。相關(guān)參數(shù)均從配置文件中讀?。▍⒁?jiàn)第5章,數(shù)據(jù)管理),范例如下:publicvoidsetUp()throwsException{ //變量賦值 String="config.xml"; //配置文件名 Stringip=itsTest.parserFromXml(,"ip"); //ip intport=Integer.parseInt(itsTest.parserFromXml(,"port")); //端口號(hào) Stringbrowser=itsTest.parserFromXml(,"browser"); //瀏覽器 StringbaseUrl=itsTest.parserFromXml(,"url"); //基本URL StringextendedUrl=itsTest.parserFromXml(,"extendedUrl"); //擴(kuò)展URL Stringusername=itsTest.parserFromXml(,"user"); //登陸用戶名 Stringpassword=itsTest.parserFromXml(,"pwd"); //登陸密碼 //測(cè)試初始化 itsTest.initialize(baseUrl,ip,port,browser); //初始化 itsTest.login(extendedUrl,username,password); //系統(tǒng)登陸 }上面的范例是基于selenium的,如果是基于WebDriver,在初始化的時(shí)候,只需要傳Url參數(shù),其他參數(shù)不用傳,如:itsTest.initialize(baseUrl,null,0,null); //初始化重寫(xiě)tearDown()publicvoidtearDown()throwsException{ itsTest.close(); //關(guān)閉瀏覽器,結(jié)束測(cè)試 }新建測(cè)試方法在不同的測(cè)試案例中,除了測(cè)試方法,其他基本大同小異。編寫(xiě)測(cè)試方法的時(shí)候,要以測(cè)試邏輯為依據(jù),并結(jié)合selenese命令去實(shí)現(xiàn)測(cè)試邏輯。以NETS-ITSADMIN的名單批次查詢(xún)?yōu)槔瑴y(cè)試方法編寫(xiě)如下: /** *測(cè)試方法 *@throwsException */ publicvoidtestDemo()throwsException{ StringfirMenu="Image2"; //一級(jí)菜單 StringsecMenu="link=名單批次查詢(xún)"; //二級(jí)菜單 StringinputBatchName="batchName"; //名單批次 StringbtnSerch="http://input[@value='查詢(xún)']"; //查詢(xún)按鈕 StringresultBatchName="http://tr[@id=row0]/td[1]"; //查詢(xún)結(jié)果 StringvalueBatchName="CMP2-03-201103"; //批次名稱(chēng) StringserchMode1="element" itsTest.isPresent(10,firMenu,serchMode1); //驗(yàn)證菜單是否存在 itsTest.click(firMenu); //點(diǎn)擊“名單管理” itsTest.click(secMenu); //點(diǎn)擊“名單批次查詢(xún)” itsTest.type(inputBatchName,valueBatchName); itsTest.click(btnSerch); //點(diǎn)擊查詢(xún)按鈕 assertEquals(valueBatchName,itsTest.getText(resultBatchName)); }至此,一個(gè)測(cè)試案例就完成了,參照?qǐng)D3.17運(yùn)行測(cè)試案例。需要注意的是,如果使用的底層實(shí)現(xiàn)方法是Selenium,要先啟動(dòng)Seleniumserver,啟動(dòng)命令如下:java–jarselenium-server.jar圖STYLEREF1\s3SEQ圖\*ARABIC\s117管理測(cè)試案例測(cè)試工程目錄結(jié)構(gòu)單個(gè)測(cè)試案例調(diào)試完畢之后,需將案例放到執(zhí)行機(jī)下的固定目錄,統(tǒng)一運(yùn)行和管理測(cè)試案例集。現(xiàn)在我們使用的方案是通過(guò)Jenkins調(diào)用Ant,完成測(cè)試案例的編譯和運(yùn)行。如圖4-1,這是一個(gè)被測(cè)系統(tǒng)在執(zhí)行機(jī)上必須要有的文件和文件夾:src:測(cè)試案例源文件,直接復(fù)制Eclipse工程下的測(cè)試案例文件,后續(xù)將會(huì)統(tǒng)一從配置管理工具(CC/SVN)上取得。lib:需要用到的外部包和配置文件,即在Eclipse中加載到Classpath中的所有包和文件xsl:Ant輸出的測(cè)試報(bào)告樣式,待Jenkins功能完善后,Ant不需要輸出測(cè)試報(bào)告,則該文件夾可以取消。樣式模板詳見(jiàn):測(cè)試報(bào)告樣式模板。build.xml:Ant的腳本文件,一般不作修改。perties:配置Ant的測(cè)試腳本,可以根據(jù)實(shí)際的目錄修改。模板詳見(jiàn):腳本文件模板圖STYLEREF1\s4SEQ圖\*ARABIC\s11使用Ant運(yùn)行測(cè)試案例Ant介紹AntAnotherNeatTool,是一個(gè)基于Java的跨平臺(tái)構(gòu)建工具,作為一個(gè)優(yōu)秀的構(gòu)建工具Ant有如下的優(yōu)點(diǎn):跨平臺(tái)--因?yàn)閍nt是使用java實(shí)現(xiàn)的,所以它跨平臺(tái);使用簡(jiǎn)單--與ant的兄弟make比起來(lái);語(yǔ)法清晰--同樣是和make相比。Ant下載地址:Ant基本語(yǔ)法ant的編譯文件默認(rèn)為build.xml,一般無(wú)需改變。build.xml的根節(jié)點(diǎn)為<project>,一般格式如下:

<projectname="AntStudy"default="init"basedir=".">

name為工程名稱(chēng);

default為默認(rèn)的target,就是任務(wù);

basedir就是基路徑。一般為"."property可以定義變量,一般格式如下:

<propertyname="test"value="shit"/>

引用的時(shí)候這么引用${test}

如果變量是路徑的話,則可以這么定義:

<propertyname="src"value="src"/>定義target:<targetname="compile"depends="init"><!--othercommand--></target>

name的值為target的名稱(chēng),可以在編譯的時(shí)候指定是完成哪個(gè)target,

否則采用project那里定義的default。

depends則定義了依賴(lài)關(guān)系,值為其他target的name。多個(gè)依賴(lài)關(guān)系用","隔開(kāi),

順序執(zhí)行完定義的依賴(lài)關(guān)系,才會(huì)執(zhí)行這個(gè)target。

target在build.xml中定義的順序無(wú)所謂,但是depends中的順序必須正確。構(gòu)建文件包括<project>元素,以及其中嵌套的<target>、<property>和<path>元素,下面是一個(gè)通用的構(gòu)建文件,它很適合作為一個(gè)模板。<projectdefault="all"> <propertyname="perty"value="avalue"/> <propertyname="perty"value="bvalue"/> <pathid="a.path"> <pathelementlocation="${java.home}/jre/lib/rt.jar"/> </path> <targetname="all"> <javacsrcdir="."> <classpathrefid="a.path"/> </javac> </target></project>關(guān)于構(gòu)建文件的注意事項(xiàng):

●所有構(gòu)建文件都要有<project>元素,而且至少有一個(gè)<target>元素;●對(duì)于<project>元素的default屬性并沒(méi)有默認(rèn)值;●構(gòu)建文件并不一定要被命名為build.xml。不過(guò)build.xml是Ant要搜索的默認(rèn)文件名;●每個(gè)構(gòu)建文件只能有一個(gè)<project>元素。輸出測(cè)試報(bào)告樣式將xsl文件夾下,測(cè)試報(bào)告樣式模板中的“NETS-ITSADMIN”全部替換成當(dāng)前測(cè)試系統(tǒng)名稱(chēng)即可。AntBuildAnt的XML配置文件的結(jié)構(gòu)很簡(jiǎn)單,這也是Ant的一個(gè)優(yōu)點(diǎn),簡(jiǎn)單易懂,容易上手,Ant的配置文件主要由project,target和task三層樹(shù)型結(jié)構(gòu)組成。一般情況下,工程中的build.xml不需要修改,只需要根據(jù)當(dāng)前的目錄,修改配置文件perties即可。我們用到的build.xml,其中包含了4個(gè)任務(wù)(target),分別是Junit、Compile、RunTest、DataClean,且按順序執(zhí)行,每個(gè)target的實(shí)現(xiàn),請(qǐng)結(jié)合4.2.2Ant基本語(yǔ)法參看模板文件(build.xml)。Junit:完成初始化;Compile:完成測(cè)試案例的編譯;RunTest:運(yùn)行測(cè)試案例,并生成測(cè)試報(bào)告;DataClean:清理測(cè)試數(shù)據(jù)。測(cè)試人員可根據(jù)執(zhí)行機(jī)上的實(shí)際目錄修改perties配置文件。perties中有6個(gè)參數(shù),如下:testSrc.dir=測(cè)試案例目錄;xsl.dir=測(cè)試報(bào)告樣式目錄;lib.dir=引用外部jar包和配置文件目錄;reports.dir=執(zhí)行機(jī)本地生成的測(cè)試報(bào)告目錄;run.classes=編譯后的測(cè)試案例目錄;use_jenkins=是否在使用Jenkins監(jiān)控(yes/no);使用Jenkins管理自動(dòng)化測(cè)試任務(wù)Jenkins介紹Jenkins(原Hudson)是一款Java平臺(tái)的開(kāi)源持續(xù)集成(ContinuousIntegration,CI)引擎。它易于安裝,配置簡(jiǎn)單,豐富的插件支持,高度的可擴(kuò)展性,強(qiáng)大的分布式構(gòu)建能力都讓它在眾多的CI引擎中脫穎而出。所以我們選用Jenkins來(lái)管理測(cè)試案例,以便以后進(jìn)行持續(xù)集成。Jenkins任務(wù)創(chuàng)建在Jenkins中創(chuàng)建任務(wù)的步驟如下:登陸Jenkins:(此地址后續(xù)可能會(huì)更改);新建任務(wù),根據(jù)測(cè)試系統(tǒng)填寫(xiě)任務(wù)名稱(chēng),選擇構(gòu)建一個(gè)多配置項(xiàng)目,點(diǎn)擊OK(參見(jiàn)圖4-2);圖STYLEREF1\s4SEQ圖\*ARABIC\s12選擇執(zhí)行機(jī):ConfigurationMatrix→Slaves→Individualnodes勾選執(zhí)行測(cè)試案例的執(zhí)行機(jī)(參見(jiàn)圖4.3、圖4.4)圖STYLEREF1\s4SEQ圖\*ARABIC\s13圖STYLEREF1\s4SEQ圖\*ARABIC\s14選擇構(gòu)建方式:Build→InvokeAnt(參見(jiàn)圖4.5)→Targets:build.xml文件中的default→BuildFile:執(zhí)行機(jī)上build.xml的路徑(參見(jiàn)圖4.6)。圖STYLEREF1\s4SEQ圖\*ARABIC\s15圖STYLEREF1\s4SEQ圖\*ARABIC\s16選擇打印輸出結(jié)果:Post-buildActions→PublishJUnittestresultreport→TestreportXMLs:/*/*.xml(參見(jiàn)圖4.7)圖STYLEREF1\s4SEQ圖\*ARABIC\s17Jenkins任務(wù)執(zhí)行選中建好的Jenkins任務(wù)(NETS-ITSADMIN),點(diǎn)擊立即構(gòu)建,即可運(yùn)行測(cè)試案例(參見(jiàn)圖4.8)。圖STYLEREF1\s4SEQ圖\*ARABIC\s18Jenkins執(zhí)行結(jié)果查看案例執(zhí)行完之后,可以通過(guò)執(zhí)行狀態(tài),查看執(zhí)行結(jié)果。任務(wù)狀態(tài)及描述如圖4.9。圖STYLEREF1\s4SEQ圖\*ARABIC\s19在案例執(zhí)行的時(shí)候,也可進(jìn)入構(gòu)建狀態(tài),通過(guò)查看命令行輸出,進(jìn)行測(cè)試案例的監(jiān)控。參加圖4.10。圖STYLEREF1\s4SEQ圖\*ARABIC\s110數(shù)據(jù)管理自動(dòng)化測(cè)試流程圖自動(dòng)化測(cè)試的過(guò)程包括:測(cè)試數(shù)據(jù)準(zhǔn)備、測(cè)試腳本運(yùn)行、生成測(cè)試報(bào)告;其中測(cè)試數(shù)據(jù)準(zhǔn)備包括兩個(gè)步驟:JDBC連接數(shù)據(jù)庫(kù)、數(shù)據(jù)回滾腳本的運(yùn)行,如圖5-1所示。圖STYLEREF1\s5SEQ圖\*ARABIC\s11自動(dòng)化測(cè)試流程圖JDBC連接數(shù)據(jù)庫(kù)代碼范例JAVA的數(shù)據(jù)庫(kù)操作,需要先建立DB連接,然后在DB中執(zhí)行查詢(xún)、更新、插入、刪除等操作,并從查詢(xún)操作中獲取數(shù)據(jù)。代碼范例如下: publicvoidDBTest()throwsException { Stringurl; //OracelDBURL Stringusername; //OracelDBusername Stringpassword; //OracleDBpassword String; //configfile Stringcmd_select="selectdescriptionfromN_OTHER_TESTING"; Stringcmd_update="updateN_OTHER_TESTINGsetdescription=NUll"; Stringcmd_insert="insertintoN_OTHER_TESTING"; Stringcmd_delete="deletefromN_OTHER_TESTING"; Stringcmd_commit="commit"; //Fetchparameterfromconfig ="config.xml"; url=parserFromXml(,"url"); username=parserFromXml(,"ldsuser"); password=parserFromXml(,"ldspwd"); //LoadOracleServerJDBCdriver. Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); //GetconnectiontoDB Connectioncon=DriverManager.getConnection(url,user,pwd); //Createstatementobject Statementst=con.createStatement(); //SendSQLSELECTstatementstothedatabaseviatheStatement.executeQuery ResultSetresult_select=st.executeQuery(cmd_select); ResultSetresult_update=st.executeQuery(cmd_update); ResultSetresult_insert=st.executeQuery(cmd_insert); ResultSetresult_delete=st.executeQuery(cmd_delete); ResultSetresult_commit=st.executeQuery(cmd_commit); //Fetchvalueof"description"from"result_select"object. Stringdescription=""; while(result_select.next()){ description=result_select.getString("description"); } con.close(); }步驟1:從配置文件中獲取登錄數(shù)據(jù)庫(kù)的連接串,用戶名、密碼;="config.xml"; url=parserFromXml(,"url"); username=parserFromXml(,"ldsuser"); password=parserFromXml(,"ldspwd");步驟2:加載oracle數(shù)據(jù)庫(kù)驅(qū)動(dòng);Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); 注:需要加載oracleJDBC的jar包到Eclipse的lib中下載地址:步驟3:登錄oracle數(shù)據(jù)庫(kù);Connectioncon=DriverManager.getConnection(url,user,pwd);步驟4:創(chuàng)建Statement對(duì)象; Statementst=con.createStatement();步驟5:通過(guò)Statement對(duì)象執(zhí)行SQL語(yǔ)句; ResultSetresult_select=st.executeQuery(cmd_select); ResultSetresult_update=st.executeQuery(cmd_update); ResultSetresult_insert=st.executeQuery(cmd_insert); ResultSetresult_delete=st.executeQuery(cmd_delete); ResultSetresult_commit=st.executeQuery(cmd_commit); 步驟6:獲取測(cè)試人員關(guān)心的查詢(xún)結(jié)果;Stringdescription=""; while(result_select.next()){ description=result_select.getString("description"); }步驟7:關(guān)閉數(shù)據(jù)庫(kù)連接:con.close();注:如果不關(guān)閉數(shù)據(jù)庫(kù)連接可能帶來(lái)一些嚴(yán)重的問(wèn)題。數(shù)據(jù)回滾腳本數(shù)據(jù)回滾腳本的基本原則:數(shù)據(jù)回滾腳本需將自動(dòng)化數(shù)據(jù)回滾到初始化狀態(tài);測(cè)試人員應(yīng)該屏蔽系統(tǒng)歸檔/備份功能對(duì)測(cè)試數(shù)據(jù)的影響,例如可以通過(guò)修改創(chuàng)建日期使其永遠(yuǎn)不會(huì)被歸檔或備份;自動(dòng)化測(cè)試新生成的垃圾數(shù)據(jù),建議及時(shí)清理(如delete語(yǔ)句),以免造成系統(tǒng)負(fù)載過(guò)大;建議測(cè)試邏輯涵蓋測(cè)試數(shù)據(jù)的整個(gè)生命周期,例如:案例A:新建測(cè)試機(jī)構(gòu)Dept案例B:查詢(xún)測(cè)試機(jī)構(gòu)Dept案例C:修改測(cè)試機(jī)構(gòu)Dept案例D:刪除測(cè)試機(jī)構(gòu)Dept數(shù)據(jù)回滾腳本應(yīng)在每次執(zhí)行自動(dòng)化測(cè)試案例前執(zhí)行。數(shù)據(jù)初始化腳本數(shù)據(jù)初始化腳本的基本原則:自動(dòng)化測(cè)試數(shù)據(jù)要與手動(dòng)測(cè)試分離,如將自動(dòng)化測(cè)試數(shù)據(jù)特定到某個(gè)特定條件,如某個(gè)機(jī)構(gòu)或某天;自動(dòng)化測(cè)試數(shù)據(jù)的命名應(yīng)該顯著區(qū)別于手工測(cè)試數(shù)據(jù);數(shù)據(jù)初始化腳本要有備份,以便在數(shù)據(jù)庫(kù)發(fā)生變更后快速恢復(fù)測(cè)試數(shù)據(jù);數(shù)據(jù)初始化腳本不需要定期執(zhí)行,僅在新建測(cè)試環(huán)境或測(cè)試數(shù)據(jù)庫(kù)發(fā)生變更后執(zhí)行。配置文件管理配置文件內(nèi)容范例自動(dòng)化測(cè)試的配置文件用來(lái)存放一些參數(shù),例如:登錄URL、用戶名、密碼等,便于后續(xù)維護(hù)。配置文件范例如下:<?xmlversion="1.0"encoding="UTF-8"?><project><url></url><loginurl>/lds</loginurl><extendedUrl>/lds</extendedUrl><ip></ip><port>4444</port><browser>iexplore</browser><user1>jiangyujun001</user1><pwd1>jiangyujun001</pwd1><user2>DONGXIAOHUAN921</user2><pwd2>abcde123</pwd2><campaignNa

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論