常見自動化測試工具及框架的選用


作者:cai.ruiying[ZSK]

一、自動化測試簡介

1、什么是自動化測試

        軟件測試是軟件產品開發過程中不可或缺的環節,眾所周知,軟件測試的分類方法非常多,根據不同的分類,測試可以分為很多種不同的測試方式。如果根據不同的測試點分類,可以將測試分類划分為功能測試、性能測試,這也是我們最常見的的軟件測試范疇。而我們的自動化測試,一般意義上來說,是指對功能、性能進行脫離手工的自動化的測試。

        對於自動化測試,更廣泛的意義,是對界面功能的自動化測試。因此,按照對軟件測試的自動化程度,可以分為手工測試、自動化測試。再進一步細分,界面自動化測試,又可根據平台的不同,分為Web自動化測試、移動端自動化測試,而他們的測試工具及框架基本是大相徑庭的。

        本文,我將依托Web UI自動化測試(網頁界面功能自動化測試),簡單談談我對幾款常用的自動化工具及框架的看法。

2、它可以做自動化測試么

        關於自動化測試的適用性,一定要明確一點,那就是:不是所有的系統都適合做自動化測試!甚至有的系統根本無法做自動化測試。那么什么樣的系統適合做自動化測試呢?總結幾點重要因素,如下圖所示。

二、工具篇

1、UFT(QTP)

        UFT 就是以前最常用的自動化測試工具QTP,用來進行Web UI自動化測試的。QTP實現的是獨占屏幕操作,仿真實際用戶操作,一般用於回歸測試和新版本測試。

        它的特點是:支持Windows平台,使用VBScript編寫測試腳本,相比Java/C#這類語言,顯然更受測試人員歡迎。

        它的測試流程是:【制定測試計划】-【創建測試腳本】-【增強測試腳本】-【運行測試】-【分析測試結果】。QTP的腳本生成是通過軌跡錄制,再進行增強優化,最后實現回放。因此VBScript腳本的邏輯比較松散,因此對於復雜頁面情況的處理能力比較弱,腳本維護的成本就非常高。最重要的是,QTP是收費的,QTP11.5版本發布改名為UFT。下圖是UFT的工作台界面。

2、Selenium

        Selenium是目前最常用的一種Web自動化測試工具,是開源的,它可並行測試,模擬用戶操作,貼近用戶實際操作,測試效果直觀。它的優勢,首先,兼容性好,兼容多平台,多瀏覽器,多語言編寫腳本,因此它從測試腳本開發,到部署運行,都比較穩定;其次,API豐富,可以實現對瀏覽器、頁面元素、鼠標鍵盤、JS窗口等幾乎所有的用戶操作,執行效率較高。

        當前Selenium已發展到第3代,包含三大組件,Selenium IDE + WebDriver + Selenium Grid。

        Selenium IDE是Firefox中的一個組件,可以錄制操作軌跡,自動生成腳本並進行回放,但它的缺點是不穩定,生成的代碼效率低,定位大多采用自動的xpath方式定位,定位繁瑣,回放成功率低,且不適用於復雜系統。

        Selenium Grid是用於實現分布式測試。

        WebDriver是Selenium核心組件,它就是實現頁面操作的組件,利用瀏覽器原生的API,封裝成一套更加面向對象的SeleniumWebDriverAPI,直接操作瀏覽器頁面里的元素,執行效率更高,且穩定性依賴於瀏覽器廠商,顯然更加穩定,因此各大常見瀏覽器都有對應的WebDriver,例如Chrome對應chromedriver,Firefox對應geckodriver,IE對應iedriver,甚至比較高版本的selenium還自帶了部分常用瀏覽器的驅動,使用起來非常方便。它的優勢顯而易見,使用瀏覽器源廠的驅動來進行自動化控制,給我們帶了更高的安全感。

3、Appium

        Appium是目前最常用的一款移動端自動化測試工具,是開源的,它支持Android和iOS平台的原生應用、web應用和Hybrid應用。它的優勢,支持跨平台,多語言腳本編寫。因此,兼容性很好,開發便捷。

        Appium是C/S架構,提供了基於Selenium WebDriver協議的統一接口。那么這里就需要說明一下Appium與Selenium的關系了。Appium封裝了標准的Selenium客戶端類庫,Appium繼承了Selenium中的WebDriver,因此也是通過WebDriver實現界面的定位及操作。而Appium實現的是PC端連接移動端的橋梁作用,這樣才能通過PC端對移動端進行自動化測試。

4、工具對比

        由於Selenium和Appium都是使用的WebDriver實現操作的,因此這里只對比UFT和Selenium。下面這個表格,充分體現了兩者之間的優勢與劣勢,測試人員可以根據需要選擇合適的測試工具,以實現最高的測試效率。

三、框架篇

        時下比較主流的自動化測試框架,有TestNG、unittest、pytest、Robot Framework。第一個框架基於Java,后三者基於Python,Java和Python是編寫自動化測試腳本最常用的兩種語言。下面就簡單介紹這四款框架。

1、TestNG

        Test NG是一款基於Java的自動化測試框架。說到TestNG就不得不提到JUnit,兩者都是基於Java的測試框架,功能差異不大,但是TestNG底層調用的是JUnit,因此TestNG的使用對於測試人員來說更友好。而JUnit更偏向白盒測試,所以開發人員用來做單元測試比較多,而且測試結果可讀性對測試人員也有一定難度。Test NG使用更便捷,例如並發測試JUnit需要調用第三方庫,TestNG則不需要。一般TestNG主要測試人員使用。

        TestNG的主要特點有:(1)涵蓋單元測試、功能測試、集成測試等;(2)基於Annotation(注解)機制,測試方法更靈活,當我們想執行一部分測試腳本的時候,就可以使用xml配置文件進行配置,在xml配置文件里,可以選擇某些需要執行的測試腳本,排除不需要運行的測試腳本;(3)支持多線程測試,這一點很重要,可以大大提高執行效率。

        TestNG還可以自動生成html、xml格式的測試報告。測試報告位於 "test-output" 目錄下,只需要執行測試用例時使用TestNG執行即可自動生成,無需配置,使用便捷。同時還可以對報告內容的詳細程度進行設置,可以說是比較完善的測試報告了,測試報告的樣式如下圖所示,展示比較直觀、簡明,可以直接看到共執行了多少個用例,成功/失敗分別是多少個,設置級別更高的報告,還可以查看具體的失敗情況。

        TestNG的使用方法,是將測試用例生成測試套件,通過執行測試套件來執行測試用例,常用的組件如下圖所示:

        @Test表示一個測試用例;

        @BeforeMethod/@AfterMethod表示在每一個方法執行前/后執行一次;

        @BeforeTest/@AfterMethos表示在每個測試用例執行前/后執行一次;

        例如,在使用TestNG框架時,就可以將“啟動瀏覽器”的操作步驟封裝在@BeforeTest中,“關閉瀏覽器進程”的操作封裝在@AfterTest中,這樣就提高了代碼復用性。

2、unittest

        unittest是一款常用的單元測試框架。它更偏向底層,二次開發方便,因此對於測試人員來說,就具備一定的難度了。它的優勢是Python自帶框架,可生成HTML測試報告,使用的是HTMLTestRunnerNew庫。由此,若基於Python開發的測試代碼,就非常適合采用unittest測試框架。只需要使用自帶的方法生成測試套件,執行測試套件,即可完成多種組合方式的測試。因此,針對Python的自動化測試,unittest可謂是最佳拍檔,可以輕松完成大部分的測試功能。

        unittest也可以將瀏覽器啟動、關閉等通用方法封裝,生成測試用例,再將測試用例生成測試套件來執行,如下圖所示。

        unittest也可以自動生成測試報告,報告形式如下圖所示,報告的內容與TestNG生成的報告內容相似,展勢執行用例的數量、結果等信息,也可以設置詳細等級、標題等信息。

3、pytest

        pytest是基於unittest擴展的第三方測試框架,比unittest更簡潔高效。 pytest可以執行unittest風格的測試用例,無須修改unittest用例的任何代碼,有較好的兼容性。pytest插件豐富,比如returnfailures插件,可用於用例出錯重跑;還有xdist插件,可用於設備並行執行測試用例。可使用pytest-HTML插件生成測試報告。pytest也可用來進行驗收測試,適合復雜度不是很高的系統。

4、Robot Framework

        Robot Framework也是一款功能強大的自動化測試框架,基於Python的關鍵字驅動測試框架,自帶報告生成,功能完善。因此它易用性更高,測試人員使用成本低,但靈活性就偏低了。一般多用於驗收測試和驗收測試驅動開發的自動化測試框架。支持跨平台(Windows/Linux/MacOS)。

        它的特點,關鍵字驅動測試(KDT),簡化自動化過程,對測試人員來說更易讀,測試數據語法也簡單易用,擴展性高,例如支持Selenium第三方類庫可進行Web UI自動化測試,支持Selenium Grid執行並發測試,並且可生成html測試報告但操作較麻煩。表格式的測試數據語法和關鍵詞驅動測試使得易用性較高。

5、框架對比

        TestNG是基於Java的測試框架,unittest、pytest、Robot Framework是基於Python的測試框架。其實測試框架的選擇,更主要還是根據系統的特性,選擇適合的框架。

        對於unittest、pytest、Robot Framework這三個測試框架,都可支持跨平台,語言單一支持Python,差別並不大,主要如下表所示,而實際選用,可結合系統、框架的優勢對號入座,以帶來更高的自動化測試開發效率。

四、如何選擇

        這篇文章對比了一些具有相似性的工具、框架,主要是為了大家在做自動化測試時,選擇具體的工具、框架做准備。但這里並不存在絕對的優劣,主要還是取決於項目的測試需求及系統的特點。

        業內常傳說,不會編程,有錢,就用UFT,會編程,沒錢,就用Selenium,其實總結的很通俗了。UFT很強大,通過錄制就能實現自動化測試,不需要會編程,你只需要有輸入、輸出值,就可以做自動化測試,聽起來當然很好,但它的維護是需要費用的。而Selenium和Appium其實底層是一樣的,API的使用也基本相同,只是針對Web和移動端APP做了不同程度的二次封裝,但是Selenium和Appium的使用當然需要一定的代碼基礎,這樣可以針對龐大的復雜系統,做PageObject頁面封裝設計的自動化測試,可以降低維護成本,但可以做到一定程度上的“一勞永逸“。

        而對於框架,其實原理是相同的,都是將測試用例封裝成測試套件,通過設定用例的執行方式,來執行測試套件,實現一定程度的“封裝“。除此之外,框架還有一些其他復蘇功能,例如很實用的自動生成測試報告,不同的框架測試報告的風格也不同,這就根據自己的需求和喜好來選擇就可以了。

        自動化測試的目的是為了一定程度上的解放人工測試,提高測試的效率,避免人工反復進行同樣的操作測試。雖然如此,人工測試仍然是不可替代的重要的軟件測試手段之一,不要盲目地進行自動化測試。因此,在選擇自動化工具及框架時,一定要根據被測系統的特點,充分利用工具及框架的優勢,這樣才能真正達到節省人力、提高效率的目的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM