測試環境:Java+Selenium+TestNG,Jenkins持續集成。css
採用頁面對象模型(Page Object),減小UI修改後,對代碼的影響。html
Java編寫,採用TestNG測試框架。java
先說點概念的:linux
Selenium
Selenium是一套完整的Web應用程序測試系統,它包含了測試的錄製(Selenium IDE)、編寫及運行(Selenium Remote Control)和測試的並行處理(Selenium Grid)。Selenium的核心Selenium Core基於JsUnit,徹底由JavaScript編寫,所以可運行於任何支持JavaScript的瀏覽器上。
Selenium Core:Selenium的核心部分,它由一些純js代碼組成, 能夠運行在windows/linux的不一樣browser上,而IDE是在core的基礎上的一種應用, 經過UI實現相似QTP/Winner的腳本錄製回放功能,它是Selenium IDE 和 Selenium RC 的引擎。
Selenium IDE: FireFox 的一個插件,支持腳本錄製。
Selenium RC: Selenium Remote Control,是客戶端利用各類編程語言,經過網絡向Selenium Server發送指令,Selenium Server接收到測試指令後,啓動瀏覽器並向其發出JavaScript調用實現對Html頁面的全面追蹤,並經過網絡把執行結果返回給調用者。
Selenium WD: Selenium WebDriver。Web驅動。
Selenium Grid:容許同時並行地、在不一樣的環境上運行多個測試任務,極大地加快 Web 應用的功能測試。 (沒有用過,不太瞭解)sql
TestNG
TestNG是一個測試框架,使用@Test控制測試的執行,執行後,自動輸出測試報告。數據庫
根據我的電腦系統類型選擇對應的jdk安裝包下載(jdk-8u5-windows-x64.exe或jdk-7u45-windows-i586.exe)下載完成以後,打開軟件進行安裝。apache
配置環境變量編程
系統環境變量JAVA_HOME:d:\Java\jdk1.8.0_05(寫本身安裝的jdk地址)小程序
系統環境變量Path:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;windows
系統變量CLASSPATH:;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
配置完成以後,在doc下輸入javac,若是出現用法:javac。。,證實配置好了
Jdbc用於java讀取sql server數據庫。
數據庫安裝就很少說了,我本地64位計算機,jdk1.8,Sql Server 2008R2。
eclipse-standard-kepler-SR1-win32-x86_64
TestNG
TestNG框架相關:
bsh-2.0b4.jar,jcommander.jar,snakeyaml.jar這三個包。
在org.testng.eclipse_6.9.9.201510270734中lib中,我把整個文件夾(rg.testng.eclipse_6.9.9.20151027073)放在了eclipse所在的目錄:\eclipse\features\org.testng.eclipse_6.9.9.201510270734\lib ,以後在引入這三個包。
Selenium
selenium-server-standalone-2.48.2.jar
Jxl.jar
用於讀取excel表格
瀏覽器使用火狐瀏覽器39.0.3,雖然版本比較低,可是與selenium版本兼容,須要安裝組件:firepath
經過頁面元素的固定屬性,來肯定元素。能夠經過id,name,className,tagName,cssSelector,linkText,partialLinkText等屬性來定位,不太好定位的元素,可使用xpath方式。
driver.findElement( By.id("Text1"))
driver.findElement( By.name("輸入"))
driver.findElement( By.xpath("html/body/div[1]/p[1]/label/input"))
driver.findElement( By.linkText ("這是一個連接"))
,須要完整匹配文字
driver.findElement( By. partialLinkText ("連接"))
,不須要完整匹配文字
定位多個元素,返回一個list,List elements,經過elements.get(index).click();進行遍歷操做,index從0開始。
注意:若是屬性中有空格,就只能使用xpath方法肯定元素。
1.文本框賦值
sendKeys("你好!")
2.清空文本框
clear()
3.獲取文本框中內容
getAttribute("value")
4.點擊
.click()
5.下拉框
Select select = new Select(driver.findElement(By.xpath("//*[@id='select_k1']")));
//經過可見文本去選擇 select.selectByVisibleText("哈爾濱"); //經過html中的value值去選擇 select.selectByValue("heb"); //經過index(索引從 0 開始) 選擇 select.selectByIndex(2);
獲取下拉框已選值
使用getFirstSelectedOption()得到所選的項,再經過getText()得到值:
select. getFirstSelectedOption().getText()
6.複選框
7.單選按鈕
//選中
click();
//判斷單選框是否被選中,返回布爾值
isSelected();
8.頁面彈框處理(alert)
//聲明對話框變量 Alert alert = driver.switchTo().alert(); //獲取彈框中的文字 alert.getText() //點擊彈框中的肯定 alert.accept();
9.表單(Form)
Form 中的元素的操做和其它的元素操做同樣,對元素操做完成後對錶單的提交:
WebElement approve = driver.findElement(By.id("approve")); approve.submit(); //只適合於表單的提交,例如百度搜索框輸入關鍵字後按回車鍵進行搜索
10.上傳文件
//定位上傳控件 WebElement upload = driver.findElement(By.id("替換成實際的定位的值")); //定義了一個本地文件的路徑 String filePath = "d:\text.txt"; //爲上傳控件進行賦值操做,將須要上傳的文件的路徑賦給控件 upload.sendKeys(filePath);
11.拖拉
//定義第一個元素 WebElement element1 =driver.findElement(By.XX)); //定義第二個元素 WebElement element2= driver.findElement(By.XX)); //將第一個元素拖拽到第二個元素 (new Actions(driver)).dragAndDrop(element1, element2).perform();
12.鼠標懸停
Actions action = new Actions(driver); action.moveToElement(driver.findElement(By.XX)).perform();
13.滾動頁面至某元素出現
JavascriptExecutor js = (JavascriptExecutor) driver; js.executeScript("arguments[0].scrollIntoView(true);", driver.findElement(By.XX));
使用TestNG中的@Test執行用例。
@Beforeclass 在執行類以前執行, @Afterclass在執行類以後執行
TestNG自帶的結果,html類型。
1.配置:
下載
三個包:guice-3.0.jar,reportng-1.1.4.jar,velocity-dep-1.4.jar,導入到項目中;
配置監聽
Windows->preference-TestNG,配置以下圖:
關閉默認監聽,改成:org.uncommons.reportng.HTMLReporter
配置xml文件
新增:
<listener class-name="org.uncommons.reportng.HTMLReporter" />
註明:我放在了前面
2.二次開發
反編譯工具:jd-gui.exe(打開導入文件便可)或jad.exe和net.sf.jadclipse_3.3.0.jar
2.1 配置:
下載jad.exe和jadclipse(須要下載支持eclipse版本的,個人eclipse是4.3.0)。
將jad.exe放在java目錄下:E:\Program Files\Java\jdk1.8.0_05\jre\bin;
下載地址:http://download.csdn.net/detail/shilinjie_8952/9674940
將net.sf.jadclipse_3.3.0.jar拷貝到:XX\eclipse\plugins下面,重啓eclipse
打開以後,選擇Eclipse->Window->Preferences->Java,設置以下圖:
配置打開.class默認方式:
.class和.class without source都要修改成默認值是JadClipse
注意:若是修改完成後,打開的.class文件全是註釋,說明Jad的路徑不正確。
有時這個反編譯的很差用,能夠配合jd-gui.exe或者其餘反編譯軟件一塊兒查看源碼。
2.2 修改源碼
思路:新建一個工程,導入須要的包,按照ReportNG建立目錄和java文件,確定會有些錯誤,修改一(由於是反編譯的,因此會有些問題)能編譯經過就能夠,(個人是最笨的,一個一個建立的java文件,應該有更好的辦法)。按照需求修改源碼,右鍵工程,就能夠導出jar了。
兩種方法均可以對元素進行管理:
用例管理
用例採用excel進行管理,用sheet區分不一樣功能,儲存相關須要驗證的字段,固定列:第一列(編號),倒數第二列(預期結果),最後一列(錯誤類型),三列固定的值,用於在代碼中使用。
採用Jenkins+Ant+Svn實現。
Jenkins是基於Java開發的一種持續集成工具,用於監控持續重複的工做,功能包括:持續的軟件版本發佈/測試項目、監控外部調用執行的工做。
Ant:形象來講,你要把代碼從某個地方拿來,編譯,再拷貝到某個地方去等等操做,這裏用來:從svn上籤出到某個文件夾下—>編譯—>執行用例
下載下來的是一個msi文件,直接點擊安裝,默認安裝,時間挺長的,並且好多插件裝不上,不要緊,用到再哪一個裝哪一個。
裝完以後,訪問:http://127.0.0.1:8080/ ,須要登陸,登陸名:admin,admin的密碼保存在安裝目錄Jenkins\secrets\initialAdminPassword文件中。
插件安裝
Ant Plugin:執行build.xml 文件
SVN Publisher plugin:經過SVN簽出源碼
HTML Publisher Plugin:將測試結果顯示在Jenkins中
Email Extension Plugin:發郵件使用
系統配置
系統管理—Global Tool Configuration,配置jdk和ant
注意:登陸就去有時會報錯,錯誤大概就是插件沒有安裝好,去系統設置裏面,找一下報錯的插件,裝上就行了。步驟以下:
找到插件,勾選,點擊下面直接安裝:
安裝過程當中可能會出現下載插件失敗的狀況,能夠根據失敗提示中的下載地址,下載到本地,選擇「高級」上傳下載的插件,就會自動安裝了:
節點配置:
有時候沒有選項:Launch slave agents using Java Web Star
解決:系統管理-Configure Global Security-隨機選取勾上 tcp port for JNLP agents,原來是禁用的
環境變量:
ant_home:E:\ant\apache-ant-1.9.7-bin\apache-ant-1.9.7,bin目錄所在路徑
Path: %ANT_HOME%\bin ant.bat所在路徑
在doc下,測試:ant.bat,出現下圖配置成功:
1.建立節點
點擊ok
進入配置節點:
建立好以後,以下圖:
啓動節點:點擊「Launch」,下載,以後,雙擊下載到的slave-agent.jnlp文件,或在doc下執行紅框中的那一串(我用命令啓動提示Unable to access jarfile slave.jar),均可以啓動,啓動好以下圖:
2.建立任務
點擊「建立一個新任務」,填寫任務名稱,選擇自由風格,以下圖:
設置源碼管理:添加svn源碼路徑,設置svn的用戶名密碼
構建觸發器:設置什麼時候什麼頻率進行構建
我設置的是:天天17點28分構建,28 17 * * *說明:
第一個參數表明的是分鐘 minute,取值 0~59;
第二個參數表明的是小時 hour,取值 0~23;
第三個參數表明的是天 day,取值 1~31;
第四個參數表明的是月 month,取值 1~12;
最後一個參數表明的是星期 week,取值 0~7,0 和 7 都是表示星期天。
因此 28 17 * * * 表示的就是天天的17點28構建一次。
構建:選擇Execute Windows batch command,填寫ant
或者選擇Invoke Ant:
構建後,須要顯示一下測試報告,採用publish html report方式,實際上就是讀取一個html文件,顯示在jenkins裏面的Html Report中
若是須要發送郵件,也能夠添加一個構建後操做:
須要填寫收件人地址,郵件內容選擇了html;Attach Build Log,選擇Attach Build Log(發送日誌附件);trigger觸發發郵件,選擇老是發郵件。
須要參考下面:5.配置發送郵件 將發郵件配置好
Defult content內容
<body> <table border="1" cellspacing="0" cellpadding="5"> <tr height=30 bgcolor="#aaa"> <td align="center" >名稱</td> <td align="center" >值</td> </tr> <tr height=30 bgcolor="#d5d5d5"> <td align="left" >項目名稱</td> <td align="left" >$PROJECT_NAME</td> </tr> <tr height=30 bgcolor="#d5d5d5"> <td align="left">執行編號</td> <td align="left" >$BUILD_NUMBER</td> </tr> <tr height=30 bgcolor="#d5d5d5"> <td align="left" >構建狀態</td> <td align="left" >$BUILD_STATUS</td> </tr> <tr height=30 bgcolor="#d5d5d5"> <td align="left" >觸發緣由</td> <td align="left" >${CAUSE}</td> </tr> <tr height=30 bgcolor="#d5d5d5"> <td align="left" >日誌地址</td> <td align="left" ><a href="${BUILD_URL}console">${BUILD_URL}console</a></td> </tr> <tr height=30 bgcolor="#d5d5d5"> <td align="left" >構建地址</td> <td align="left" ><a href="$BUILD_URL">$BUILD_URL</a></td> </tr> <tr height=30 bgcolor="#d5d5d5"> <td height=30 bgcolor="#d5d5d5" colspan="2" > ${JELLY_SCRIPT,template="html"} </td> </tr> </table>
到此,任務就建立好了。
構建的過程是:先利用svn簽出源碼,而後根據構建中的ant命令或Invoke Ant方式執行構建,實際上就是在源碼文件夾中尋找build.xml文件,並執行,接下來須要說明一下被執行的build.xml文件如何配置。
3.配置build.xml文件
這個配置很重要,決定了可否執行測試用例
4.構建
能夠按照構建觸發器中的設置進行構建,也能夠馬上構建查看各項是否設置正確:
構建過程當中查看控制檯,能夠查看到過程:
執行完用例以後,經過HTML Report查看結果
5.配置發送郵件
系統設置:Jenkins Location 設置系統管理員地址
系統設置:Extended E-mail Notification設置
我用的是qq郵箱,密碼是16位受權碼,須要勾選ssl,否則服務器報錯
系統設置:郵件通知
要與系統管理員郵箱設置一致,密碼16位受權碼
1.問題:構建過程當中,不顯示瀏覽器
解決方法:不使用系統級服務,而是手動啓動Jenkins。
個人電腦->管理->服務和應用程序->服務,將jenkins服務禁用,而且禁止啓動,自行用命令啓用
java -Dhudson.model.DirectoryBrowserSupport.CSP= -jar "E:\Program Files (x86)\Jenkins\jenkins.war"
最好寫成bat文件,內容:
echo "Jenkins CI automation testting"
java -Dhudson.model.DirectoryBrowserSupport.CSP= -jar "E:\Program Files (x86)\Jenkins\jenkins.war"
pause
每次啓動經過bat文件啓動
2.問題:構建報錯:編碼GBK的不可映射字符
解決方法:在build.xml中,javac下,增長,build.xml中有註釋。
3.問題:報告顯示不正確,index中沒有值
解決方法:在啓動時,用:java -Dhudson.model.DirectoryBrowserSupport.CSP= -jar "E:\Program Files (x86)\Jenkins\jenkins.war"啓動。
轉載自《https://testerhome.com/topics/6495》 -- 站在巨人的肩膀上