(Selenium+TestNG+Java+ReportNG+Jenkins)自動化測試
測試程式碼
程式碼結構
採用頁面物件模型(Page Object),減少UI修改後,對程式碼的影響。
Java編寫,採用TestNG測試框架。
先說點概念的:
-
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
Selenium RC: Selenium Remote Control,是客戶端利用各種程式語言,通過網路向Selenium Server傳送指令,Selenium Server接收到測試指令後,啟動瀏覽器並向其發出JavaScript呼叫實現對Html頁面的全面追蹤,並通過網路把執行結果返回給呼叫者。
Selenium WD: Selenium WebDriver。Web驅動。
Selenium Grid:允許同時並行地、在不同的環境上執行多個測試任務,極大地加快 Web 應用的功能測試。 (沒有用過,不太瞭解) -
TestNG
TestNG是一個測試框架,使用
環境搭建
Java執行環境
根據個人電腦系統型別選擇對應的jdk安裝包下載(jdk-8u5-windows-x64.exe或jdk-7u45-windows-i586.exe)下載完成之後,開啟軟體進行安裝。
-
配置環境變數
系統環境變數JAVA_HOME:d:\Java\jdk1.8.0_05(寫自己安裝的jdk地址)
系統環境變數Path:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
系統變數CLASSPATH:;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
配置完成之後,在doc下輸入javac,如果出現用法:javac。。,證明配置好了
JDBC配置
Jdbc用於java讀取sql server資料庫。
資料庫安裝就不多說了,我本地64位計算機,jdk1.8,Sql Server 2008R2。
- 配置環境變數CLASSPATH
新增:C:\sqljdbc4;( 我放在了C盤根目錄下) - 複製包到相關目錄下
sqljdbc4.jar檔案拷到
E:\Program Files\Java\jdk1.8.0_05\jre\lib\ext
E:\Program Files\Java\jre8\lib\ext
目錄下,分別拷貝一份(看你的安裝目錄了)
Java開發工具
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方式。
- 1. 通過id定位
driver.findElement( By.id("Text1"))
- 2. 通過name定位
driver.findElement( By.name("輸入"))
- 3. 通過xpath定位
driver.findElement( By.xpath("html/body/div[1]/p[1]/label/input"))
- 4. 通過linkText定位連結
driver.findElement( By.linkText ("這是一個連結"))
,需要完整匹配文字
- 5. 通過partialLinkText定位連結
driver.findElement( By. partialLinkText ("連結"))
,不需要完整匹配文字
- 6. findElements()
定位多個元素,返回一個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
TestNG自帶的結果,html型別。
ReportNG
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檔案儲存元素
可以將元素統一儲存在excel中,在執行用例之前,統一讀取到陣列中,包括:編號,名稱,查詢方法,值,描述。
用例管理
用例採用excel進行管理,用sheet區分不同功能,儲存相關需要驗證的欄位,固定列:第一列(編號),倒數第二列(預期結果),最後一列(錯誤型別),三列固定的值,用於在程式碼中使用。請見
持續整合
採用Jenkins+Ant+Svn實現。
Jenkins是基於Java開發的一種持續整合工具,用於監控持續重複的工作,功能包括:持續的軟體版本釋出/測試專案、監控外部呼叫執行的工作。
Ant:形象來說,你要把程式碼從某個地方拿來,編譯,再拷貝到某個地方去等等操作,這裡用來:從svn上籤出到某個資料夾下—>編譯—>執行用例
Jenkins配置
下載下來的是一個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配置
環境變數:
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,出現下圖配置成功:
Jenkins使用
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下,增加
<compilerarg line="-encoding UTF-8 "/>
,build.xml中有註釋。
3.問題:報告顯示不正確,index中沒有值
解決方法:在啟動時,用:java -Dhudson.model.DirectoryBrowserSupport.CSP= -jar "E:\Program Files (x86)\Jenkins\jenkins.war"啟動。
~~