因爲前期三個月公司的項目一直在改需求階段,一直是手動測試,如今項目雛形以及基本頁面功能都肯定下來,爲了避免讓本身陷入每天測同一功能的無限循環中,故開始自動化測試的學習之路,也爲本身之後的發展鋪鋪路。php
一.自動化測試介紹css
自動化測試使用狀況:html
目的:主要用於迴歸測試:檢驗修復bug後確保好的功能沒有被破壞,並非爲了找新bug。前端
下面從四個方面來講明:測試類型/流程/框架/工具
1.自動化測試類型:java
API testing:webservice測試,接口測試,輸入參數,看服務端數據是否正確python
UNIT testing:單元測試,測試代碼測試方法輸入的參數與return返回值
GUI testing:自動化方式驅動瀏覽器實現手動模擬的方式,以下面的selenium自動化,用腳本驅動瀏覽器android
performance testing:性能測試,產生大的併發,負載,多線程方式產生併發,節省成本。web
2.自動化測試流程:chrome
設計測試用例-設計測試腳本-運行測試腳本-獲取測試結果-分析測試報告
分析case的可能性,計劃評估,作測試用例,測試環境搭建(測試數據準備),自動化腳本書寫,執行腳本,查看測試的腳本。數據庫
3,測試代碼結構
配置:測試對象,測試環境,輸入參數
src:類庫,測試用例,測試腳本,
test Suites:用例分類
測試數據:如何更新!!
測試日誌:對錯誤的記錄,緣由,現象,記錄錯誤場景
測試結果:記錄全部結果,錯誤和正確的都有
4.測試工具
傳統的自動化測試更關注的產品UI層的自動化測試,而分層的自動化測試倡導產品的不一樣階段(層次)都須要自動化測試,表示不一樣階段所投入自動化測試的比例。
咱們須要規範的來作單元測試一樣須要相應的單元測試框架,如java的Junit、testNG,C#的NUnit ,python 的unittest、pytest 等,幾乎全部的主流語言,都會有其對應的單元測試框架。
單元測試關注代碼的實現邏輯,例如一個if 分支或一個for循環的實現;那麼集成、接口測試關注的一是個函數、類(方法)所提供的接口是否可靠。例如,我定義一個add()函數用於計算兩個參數的結果並返回,那麼我須要調用add()並傳參,並比較返回值是否兩個參數相加。
固然,接口測試也能夠是url的形式進行傳遞。例如,咱們經過get方式向服務器發送請求,那麼咱們發送的內容作爲URL的一部分傳遞到服務器端。但好比 Web service 技術對外提供的一個公共接口,須要經過soapUI 等工具對其進行測試。
UI層的自動化測試工具很是多,比較主流的是QTP,Robot Framework、watir、selenium 等。
首先要先確認你所測試的產品是桌面程序(C/S)仍是web應用(B/S)。
桌面程序的工具備:QTP、 AutoRunner
web應用的工具備:QTP、AutoRunner、Robot Framework、watir、selenium
被測試有產品是C/S架構的,那麼推薦QTP ,QTP在UI自動化測試領域佔到了一半的試用率。因此,足以說明QTP在自動化領域強大,易用性等。學習主流的工具也可使你得到更多的機會。市面上關於QTP的書籍也很是豐富。固然,要想學好QTP ,你必需要掌握VBS腳本語言。
被測產品是B/S 結構,那麼推薦selenium ,爲何不是QTP 或其它工具?由於selenium 對B/S應用支持很好,更重要的一點,它支持多語言的開發,真正的試用selenium ,你所要掌握的不只僅是一個工具而已,你還須要學習一門語言。
假如你決定試用selenium 了以後,你又面臨了一個新的問題,選擇一門語言。selenium 是支持java、python、ruby、php、C#、JavaScript 。
從語言易學性來說,首選ruby ,python
從語言應用廣度來說,首選java、C#、php、
從語言相關測試技術成度(及 資料)來說:ruby ,python ,java
二.selenium入門
首選你在開始selenium以前,須要花一到兩個月時間去學一門語言,這裏是根據沒有語言基礎的同窗而定的。我推薦ruby ,python ,java 任意一門語言來進行學習。
固然,已經若是有很好的語言基礎略過這個環節,或者你的豐富的java編程能力,那麼學習python 可能只須要幾天時間或更短。
學習selenium以前你必需要理解html、xml和xpath(用於定位測試的元素路徑)基本概念。
1.seleniumIDE(錄製並導出腳本,時ff的一個插件,因此只能在ff瀏覽器上運行)
selenium IDE
selenium IDE 是嵌入到Firefox瀏覽器中的一個插件,實現簡單的瀏覽器操做的錄製與回放功能。那麼什麼狀況下用到它呢?
快速的建立bug重現腳本,在測試人員的測試過程當中,發現了bug以後能夠經過IDE將重現的步驟錄製下來,以幫助開發人員更容易的重現bug。
IDE錄製的腳本能夠能夠轉換成多種語言,從而幫助咱們快速的開發腳本。
安裝準備:
(1)須要先安裝firbug和firePath(主菜單/附加組件/搜索後直接安裝便可):用於方便查找和定位元素
(2)安裝selenium IDE(用ff搜索直接安裝便可)
錄製測試用例(關鍵字驅動):
主要爲三項:
導出:選中文件/export test case suite as (不支持C#和Python2)
2.selenium1 (selenium -RC):幾乎支持全部瀏覽器,可是受js安全模型致使的限制,面向過程。
selenium服務器:對應 selenium-server-standalone-2.44.0.jar,捆綁了selenium core (js程序,一系列js函數,用於調用瀏覽器內置的js解釋器,解釋和執行selenese命令),並自動將其注入瀏覽器,
selenium客戶端:對應selenium-java-2.44.0.jar(使用客戶端庫文件的api函數,執行api函數)
安裝準備及使用:
1.安裝eclipse,配置環境jdk
2.新建java項目和包,導入 selenium-java-2.44.0.jar(客戶端包,junit包配置) 和 selenium-server-standalone-2.44.0.jar(服務器),(後續會有selenium-java-2.44.0-srcs.jar 即不用啓動服務器,二代,selenium源碼,js文件)
3.導入Selenium IDE的測試腳本(只能爲java),特別注意:
selenium = new DefaultSelenium("localhost", 4444, "*iexplore", "http://dhw.lxhbysn.com/pages/E02/index.jsp");
(使用的瀏覽器爲IE的能夠打開,其餘瀏覽器須要配置路徑,如:"C:\\Users\\DELL\\AppData\\Local\\Google\\Chrome\\Application\\chromedriver.exe,路徑爲雙反斜線)
4.啓動selenium服務器,啓動bat(本身手動生成bat文件:java -jar jar包路徑)
5.運行測試腳本,即運行junit腳本,測試經過,出現 selenium Remote Control ,腳本開始自動執行。
也能夠本身建立selenium腳本進行測試:
(1)建立測試實例(用哪一個瀏覽器,起始的打開頁面)
DefaultSelenium selenium = new DefaultSelenium("localhost", 4444, "*iexplore", "http://dhw.lxhbysn.com/pages/E02/index.jsp");
selenium.start();
瀏覽器導航操做總結:open、goback、refresh、windowsFocus、windowMaxinize、close
對頁面元素的操做總結:type、typeKeys、click、clickAt、doubleClick、doubleClickAt、select、check、focus
獲取頁面元素:getTitle、getLocation、getValue、getText、isChecked、getSelectedIndex、getSelectedLabel、getSelectedValue、getSelectedOptions、getTable、getAttribute、isTextPresent、isElementPresent、isVisible、getXpathCount、
設置等待:waitForPageToLoad(timeout),setTimeout(只針對open),setSpeed(執行速度)
測試控制和調試類:captureEntirePageScreenShot(),highlight(抓取圖片時只能用火狐,谷歌和IE代理瀏覽器)
js彈出框處理:isAlertPresent(是否彈出),getAlert(獲取文本內容),chooseOkOnNextConfirmation,AnswerOnNextPrompt
selenium1採用的是js注入進行測試,沒法處理js對話框(alert,confirmation,prompt),由於預處理,因此看不到,可是已經處理
瀏覽器多窗口處理:getAllwindowIds/names/titles(),waitForPopUp(windowID,timeout)/代替thread.sleep()等待窗口完成後,selectPopUp(windowId)/選擇子窗口,selectWindow(windowID)/選擇任意窗口,openWindow(url,windowID)/在彈出窗口打開新的url
結束測試:close 關瀏覽器,stop中止服務器會話,關控制界面,shutDownSeleniumServer關服務器。
3.selenium2(WebDriver):一套類庫,不依賴任何測試框架(junit),無需啓動服務器,經過原生瀏覽器支持或瀏覽器擴展直接支持瀏覽器,基於對象的測試
selenium2:繞過js限制,API更易用,只支持:ff,chrome,ie,opera,android,iphone
selenium1:支持更多的瀏覽器
安裝準備和使用:
1.導入selenium-java-2.44.0-srcs.jar,之後運行腳本不用啓動服務器
2.對火狐瀏覽器自帶瀏覽器驅動,其餘的瀏覽器須要下載並配置以下:
System.setProperty("webdriver.chrome.driver", "C:\\Users\\DELL\\AppData\\Local\\Google\\Chrome\\Application\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
Navigation navigation = driver.navigate(); //設置導航實例
navigation.to("http://dhw.lxhbysn.com/pages/E02/login.jsp");
導航操做:to、back/forward、refresh
查找元素:WebElment a=driver.findElment.(By.id/name/linkText/ClassName/TagName/Xpath
對頁面元素的操做:click(勾選操做也用這個),sendKeys,clear,submit
獲取頁面元素及其內容:getTitle,getCurrentUrl,getText,selected(勾選狀態),getTagName,Enabled,Displayed,getAttribute,
彈出對話框的處理:點擊後,driver.switchTo().alert().dismiss()/accept()都是點擊後關閉,driver.switchTo().alert().sendKeys()填寫內容,driver.switchTo().alert().getText()爲獲得對話框內容,
瀏覽器多窗口處理:windowHandles,window(轉到某個窗口)
設置管理:cookie,超時時間和瀏覽器窗口
4.testNG(用於測試管理,生產測試報告)
下載插件(可到微盤上搜)解壓後: 將features.rar解壓後的文件件放入eclipse安裝路徑下的features中 org.testng...rar解壓後的文件夾放入eclipse安裝路徑下的plugins文件夾中 重啓eclipse便可,文件名太長,將壓縮文件拷過去而後用7zip解壓便可。
TestNG是一個測試框架,其靈感來自JUnit和NUnit的,但引入了一些新的功能,使其功能更強大,使用更方便。
TestNG是一個開源自動化測試框架;TestNG表示下一代。 TestNG是相似於JUnit(特別是JUnit 4),但它不是一個JUnit擴展。它的靈感來源於JUnit。它的目的是優於JUnit的,尤爲是當測試集成的類。 TestNG的創造者是Cedric Beust(塞德里克·博伊斯特)
TestNG消除了大部分的舊框架的限制,使開發人員可以編寫更加靈活和強大的測試。 由於它在很大程度上借鑑了Java註解(JDK5.0引入的)來定義的測試,它也能夠告訴你如何使用這個新功能在真實的Java語言生產環境中。
註解
TestNG使用Java和麪向對象的功能
支持綜合類測試(例如,默認狀況下,沒有必要建立一個新的測試每一個測試方法的類的實例)
獨立的編譯時間測試代碼運行時配置/數據信息
靈活的運行時配置
主要介紹「測試組」。當編譯測試,只要問TestNG運行全部的「前端」的測試,或「快」,「慢」,「數據庫」等
支持依賴測試方法,並行測試,負載測試,局部故障
靈活的插件API
支持多線程測試
建立一個Java類文件名TestNGSimpleTest C: > TestNG_WORKSPACE
import org.testng.annotations.Test; import static org.testng.Assert.assertEquals; public class TestNGSimpleTest { @Test public void testAdd() { String str = "TestNG is working fine"; assertEquals("TestNG is working fine", str); } }
TestNG的幾種不一樣的方法能夠被調用:
testng.xml 文件
ant
命令行
讓咱們調用使用testng.xml文件。建立一個XML文件名稱testng.xml C: > TestNG_WORKSPACE 執行測試用例(s)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="Suite1"> <test name="test1"> <classes> <class name="TestNGSimpleTest"/> </classes> </test> </suite>
類編譯使用javac編譯以下:
=============================================== Suite1 Total tests run: 1, Failures: 0, Skips: 0 ===============================================