qileilove

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

          用Selenium WebDriver+Grid2實現瀏覽器端性能測試

          在 Web 2.0 應用中,頁面裝載時間和瀏覽器渲染時間將成為決定性能的關鍵因素。我們在測試過程中不僅需要手動觸發性能測試工具,而且需要模仿不同的用戶行為,包括不同的瀏覽器、不同的網絡條件和不同的使用習慣。在這種情況下我們需要新的方法與工具來覆蓋特別是瀏覽器端的性能測試。用 Selenium WebDriver + Grid2 可以解決瀏覽器端性能測試中的自動化和并發性問題。本文介紹了這種新的測試框架和腳本的開發過程,并結合案例給出了具體的代碼和結果分析。使用 Selenium WebDriver+Grid2 可以將已有的自動化測試資源為性能測試服務,將測試人員從繁雜的手動測試中解放出來,專注于結果分析和問題解決。
            我們需要新的方法與工具來覆蓋瀏覽器端的性能測試
            在瀏覽器端的性能測試中遇到的一些問題
            在傳統的互聯網應用中,由于瀏覽器端的時間消耗比較有限,并且頁面裝載時間也比較簡單且有限,所以在對傳統互聯網應用的響應時間分析中,我們通常忽略頁面裝載時間和瀏覽器渲染時間,而著重分析服務器響應時間。而在 Web 2.0 應用中,頁面裝載時間和瀏覽器渲染時間將成為決定性能的關鍵因素,所以我們需要新的方法與工具來覆蓋特別是客戶端的性能:瀏覽器響應時間。
            我們使用一些工具來幫助我們測試瀏覽器端的性能;比如說 DummyNet 可以模擬不同網絡帶寬和延遲,以便我們分析不同網絡情況下的的網頁性能;HttpWatch 可以分別記錄每個請求的服務器端響應時間、頁面裝載時間、瀏覽器渲染時間;DynaTrace AJAX 是一種詳細的底層工具,它不僅可以顯示所有請求和文件在網絡中的傳輸時間,還會記錄瀏覽器 render、CPU 消耗、JavaScript 解析和運行的詳細情況。我們使用這些工具的時候大多是手動觸發,為了得到數據和分析報告,必須將用戶案例在不同的瀏覽器上手動實現,并且在某一時刻打開或關閉工具和保存結果。過多的手動操作使我們很難專注于數據分析和發現問題。所以我們需要解決以下問題:
            需要有工具在模仿用戶使用 web 應用程序的同時自動觸發這些工具,生成分析數據。
            可以同時模仿不同的用戶行為,包括不同的瀏覽器,網絡條件和使用習慣。
            下面的章節將介紹如何利用自動化工具 Selenium 來搭建測試網頁瀏覽器端性能的測試框架,實現瀏覽器端自動測試和并行測試。
            瀏覽器端性能測試框架中用到的技術
            我們的測試框架主要采用了以下技術:
            Selenium WebDriver
            Selenium 是針對 Web 應用的測試框架,支持多種瀏覽器和多種編程語。WebDriver 通過原生瀏覽器支持或者瀏覽器擴展直接控制瀏覽器。它提供了一個更為簡單,一致的編程接口并且解決了在 Selenium-RC API 遇到的問題。Selenium WebDriver 更好的支持了動態網頁。它的目標是為現代的網頁程序測試提供設計良好的面向對象的 API。
            Selenium Grid2
            Selenium Grid 允許用戶將測試案例分布在幾臺機器上并行執行。用戶可以在一個集中控制點控制不同的環境。在不同的瀏覽器 / 系統組合上面更為容易的運行測試案例。允許用戶更多的利用虛擬資源減少了維護測試環境的成本。Selenium Grid2 很好的支持了 WebDriver。利用原有的 WebDriver 腳本和 Grid 技術就可以將不同的測試用例分布在不同的機器或虛機上,在特定的瀏覽器版本上運行,自動地啟動關閉分析工具,統一地保存測試結果。Selenium Grid2 的機制如圖 1,啟動一個中央節點(Hub),然后啟動多個遠程控制節點(rc),啟動 rc 時告知 Hub 的位置,這樣這些 rc 就可以注冊到 Hub 上,測試程序與 Hub 通訊,當測試被并發地發給 Hub 時,Hub 會自動將這些測試命令分發給已經注冊的 rc,rc 接到命令后執行測試。
            TestNG
            本測試系統還使用 TestNG 工具來輔助配置自動測試。TestNG 是測試 Java 應用程序的框架之一。TestNG 以其靈活性和參數化成為定義 Selenium 的驅動驗收測試的首選。它通過一些語義注釋來傳遞測試的參數,定義測試腳本的順序并配置運行時的性能。用戶可以通過配置來生成各式測試報告,十分方便。
            圖 1. Selenium Grid2 的機制
            Ant
            在框架中我們使用 Ant 來構建版本 , 然后部署到測試環境中去 , 再然后執行測試腳本到生成發送測試報告 .
            瀏覽器端性能測試框架的實現
            Selenium WebDriver 編寫測試腳本
            利用 Selenium WebDriver 為動作執行和頁面跳轉進行設計。Selenium WebDriver 可以模擬用戶上網的行為,添加計時代碼用以測算用戶某個動作執行的時間或是頁面跳轉需要的時間。以用戶登錄為例,在輸入用戶名和密碼之后開始用 startTrans 函數開始計時,在點擊提交按鈕頁面跳轉之后用 endTrans 函數結束計時。
            清單 1. 在 Selenium 中添加計時代碼
            利用 DummyNet 模擬不同網絡條件下用戶的案例執行。帶寬模擬與控制是性能測試的一個常規需求。很多時候我們必須能夠提供可變的帶寬、上行和下行速率,從而獲得這些條件下性能的表現。開源工具 DummyNet 是一款優秀的網絡控制工具,它通過重載本機的網卡驅動,提供給開放人員命令行接口去模擬帶寬可變利用。調用 DummyNet 的命令后執行 Selenium 腳本可以設置網絡帶寬和延遲。以下命令限制從源地址到目的地址的流量帶寬 2Mb, 延遲 300ms。
            ipfw add pipe 2 ip from %sourceip%  to %targetip% out proto ip
            ipfw pipe 2 config delay 300ms bw 2Mbit/s
            利用 HttpWatch 和 DynaTrace AJAX 為特定的頁面請求記錄時間。HttpWatch 和 DynaTrace AJAX 是兩款強大的網頁數據分析工具。它們通常集成在瀏覽器的工具欄。以往我們通過手動打開這些工具在瀏覽頁面的同時收集所需的分析數據。在新的框架中 Selenium 腳本可以調用它們的接口驅動瀏覽器從會話中啟動分析工具并收集保存性能信息。
            清單 2. Selenium 腳本調用 DynaTrace AJAX 接口
            Selenium Grid2 集中控制測試環境
            步驟一:啟動中央節點(Hub)。Hub 會接收測試請求并將它們分布在正確的節點上。啟動 Hub 的默認端口為 4444,也可以通過參數指定端口。打開地址:http://localhost:4444/grid/console,通過頁面可以觀察 Hub 的狀態。啟動命令如下 :
            java -jar selenium-server-standalone-2.14.0.jar -role hub
            步驟二:配置和啟動遠程控制節點(rc)。遠程節點是您需要測試的測試機所在的物理機或虛擬機。啟動節點時需要傳入 Hub 的 IP 地址和端口號。默認情況下,節點的端口為 5555,每個節點可以啟動 11 個瀏覽器,包括 5 個 firefox、5 個 chrome 和 1 個 ie 瀏覽器。最多有 5 個并行的測試案例。用戶也可以通過參數指定端口和瀏覽器,以下命令將會啟動 Linux 遠程節點上的三個 firefox 瀏覽器進行并行測試,它們指向在另一臺機器的 Hub 節點。
            java -jar selenium-server-standalone-2.14.0.jar -role node \
            -hub http://remotehost:4444/grid/register \
            -browser browserName=firefox,version=3.6,maxInstances=3,\
            platform=LINUX
            Selenium WebDriver 和 Grid2 并發執行測試用例
            TestNG 可以很方便的加載在已經開發好的 Selenium WebDriver 測試案例,測試用例中的參數通過 @Parameters 傳遞。在測試中我們需要將同一個測試案例發送到不同的節點或是瀏覽器上執行。所以我們從已有的 Selenium 腳本中選出案例后用 @Test 標注并加入節點的 IP、端口和瀏覽器類型參數。

           清單 3. 將 TestNG 加載在已有的 Selenium 測試腳本
            @Test
            @Parameters({"seleniumHost", "seleniumPort", "bs"})
            public void sitenav(String Host,String Port,String browser)
            TestNG 要求將所有要運行的測試用例都記錄在一個叫 testng.xml 的文件中,然后根據該文件中的測試用例順序依次執行測試。通過 suit 標簽的屬性可以指定 method、tests 或是 classes 的并發執行。我們在 testng.xml 中將測試的并行粒度設為 Test, 用參數傳入不同的 IP 地址、端口號、瀏覽器名稱,形成不同的測試案例,以便在不同節點上的不同瀏覽器中并行執行。
            清單 4. testng.xml 中有關并行測試案例的配置
            最后用 Ant 從命令行運行 TestNG 類。用戶通過命令行啟動 Ant,讀取目標文件 build.xml 來獲得項目的參數,例如目標定義、類路徑、引入的文件等。Ant 通過讀取 TestNG 的配置文件 testng.xml 來獲取參數,將 Java 代碼編譯成 TestNG 類,并且根據配置文件中傳入的參數和順序來執行這些類。以下是在 Ant 的 build.xml 里面如何正確配置 TestNG。
            清單 5. Build.xml 里配置 TestNG
            應用示例
            IBM Connections 3 是 IBM 專門為滿足企業業務需求而設計的一款社交軟件。我們用它作為目標程序來測試其瀏覽器端的性能。用 Selenium WebDriver 編寫腳本模擬用戶依次瀏覽主頁、登陸、個人資料、博客等主要頁面。我們將同樣的腳本在不同網絡環境、不同操作系統、不同瀏覽器中并行執行,并且記錄頁面的響應時間,完整下載時間,對不同瀏覽器,不同網絡條件下的頁面響應時間加以比較。測試過程如下:
            選取幾臺測試機作為測試節點,測試機器上具有我們所需要的操作系統、瀏覽器類型、測試分析工具,選取一臺測試機作為 Hub。配置和啟動 Hub 和測試節點。
            準備不同類型的測試案例 Test1.....TestN。根據操作系統、瀏覽器和所需的測試工具,在 testng.xml 中將測試腳本分配給相對應的測試節點 Node1.......NodeN 形成不同的測試案例。圖 2 是測試節點配置和測試案例的分布圖。
            編輯 build.xml 文件。執行 ant 命令。通過網頁觀察 Hub 的狀態和測試節點的執行情況。
            測試執行完,從各節點和 Hub 上收集測試數據加以整理和分析。
            測試數據從幾個方面獲得。有關測試環境的數據將會直接從配置文件獲取,簡單的頁面響應時間會由 Selenium 腳本獲取。瀏覽器響應時間分解和網頁分析數據將會由 HTTPWACTH 等輔助測試工具獲得。圖 3 是由部分測試數據經過匯總整理后形成的表格。從表格中可以看到同一個頁面請求在不同配置的測試機上的響應時間,如果該機器加載了性能分析工具,還可以通過抓取 HTTPWACTH 分析結果進一步得到響應時間分解。
            小結
            利用 Selenium WebDriver 和 Grid2 可以將已有的自動化測試腳本為性能測試服務,并發、自動地執行測試案例節省了時間和人力,使測試人員能夠將精力集中在數據分析和性能調優上。靈活的配置測試環境,包括網絡環境、操作系統和瀏覽器類型,可以在短時間內得出不同情況下目標程序的客戶端性能數據,方便比較和發現問題。

          posted on 2014-07-09 15:59 順其自然EVO 閱讀(1240) 評論(0)  編輯  收藏 所屬分類: selenium and watir webdrivers 自動化測試學習

          <2014年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 武穴市| 马鞍山市| 广饶县| 盐城市| 丁青县| 横山县| 张家川| 尉氏县| 岐山县| 自治县| 宁德市| 革吉县| 大连市| 赤水市| 海阳市| 当涂县| 治多县| 滦南县| 襄汾县| 佛山市| 志丹县| 甘洛县| 东安县| 上杭县| 平顺县| 环江| 金湖县| 克山县| 九江市| 玛纳斯县| 四平市| 彭州市| 苗栗市| 高安市| 礼泉县| 凌海市| 乌拉特中旗| 阿拉尔市| 四川省| 互助| 洛隆县|