Python得天獨厚的優勢造就了一系列測試框架,在這些測試框架面前,孰優孰劣?具體該如何選擇?
俗話說 「沒有最好的,只有最合適的」,今天我們就Python當前使用較為頻繁的4大主流自動化測試框架, 來一回比拼,從中挑選最為合適你當前項目需求的那一款。
Robot Framework
Unittest
Nose2
Pytest
Robot Framework,簡稱RF,是一個基於Python的開源自動化測試框架,以關鍵字形式來創建測試用例。
其表格樣式的用例編寫模式,豐富的庫和工具集,以及其並行測試等強大功能,使得RF 在測試人員中非常受歡迎。
RF主要應用於驗收測試和測試驅動開發(Test-driven development)這兩個場景。
此外,RF還支持在Windows、Mac OS和Linux等跨平臺上進行桌面應用、移動應用、Web應用等的自動化測試。
*** Settings ***Library SeleniumLibrary*** Variables ***${SERVER} localhost:7272${BROWSER} Firefox${DELAY} 0${VALID USER} demo${VALID PASSWORD} mode${LOGIN URL} http://${SERVER}/${WELCOME URL} http://${SERVER}/welcome.html${ERROR URL} http://${SERVER}/error.html*** Keywords ***Open Browser To Login Page Open Browser ${LOGIN URL} ${BROWSER} Maximize Browser Window Set Selenium Speed ${DELAY}Login Page Should Be Open Title Should Be Login PageGo To Login Page Go To ${LOGIN URL} Login Page Should Be OpenInput Username [Arguments] ${username} Input Text username_field ${username}Input Password [Arguments] ${password} Input Text password_field ${password}Submit Credentials Click Button login_buttonWelcome Page Should Be Open Location Should Be ${WELCOME URL} Title Should Be Welcome Page(左右滑動查看完整代碼)
Unittest是一個基於Python的自動化單元測試框架,屬於Python標準庫中的一員,支持測試套件的復用。
只需在測試腳本中導入Unittest庫,測試人員就可以自定義測試類,創建測試用例,通過unittest.main()運行所有測試用例。
import unittestdef add(x, y): return x + yclass Test(unittest.TestCase): def test_add_001(self): self.assertEquals(add(4, 5), 9) def test_add_002(self) self.assertNotEqual(add(1,2),10)if __name__ == '__main__': unittest.main()(左右滑動查看完整代碼)
Nose2繼承自Nose,同樣是一個基於Python的單元測試框架, 可以視為Unittest框架的拓展,因此,Nose2下可以運行Unittest編寫的測試用例。
Nose2有豐富的插件,集編寫測試用例,異常處理等多種功能。相較於上面提到的Unittest和Robot Framework而言,卻沒那麼高的普及度,但仍不失為一款好用的開源測試框架。
from mynum import *import nosedef add(x, y): return x + ydef test_add_integers(): assert add(5, 3) == 8def test_add_floats(): assert add(1.5, 2.5) == 4def test_add_strings(): nose.tools.assert_raises(AssertionError, add, 'hello', 'nose2')if __name__ == '__main__': nose.run()(左右滑動查看完整代碼)
Pytest是Python另一款非常熱門的開源測試框架。其語法簡單,且擁有豐富的插件,可應用於功能測試,API測試,資料庫及UI測試等多種測試類型。
import pytestdef test_demo_method1(): x = 1 y = 2 assert x+1 == y, "test pass"def test_demo_method2(): x = 6 y = 3 assert x-1 == y+2, "test failed"(左右滑動查看完整代碼)
下面以@pytest.fixture裝飾器為例,簡單看下它的初始化功能:
(1)單獨創建一個conftest.py文件,文件中包含一個用@pytest.fixture修飾的方法,該方法返回一個列表數據。
import pytest@pytest.fixturedef supply_AA_BB_CC(): aa = 25 bb = 35 cc = 45 print("這是一個獨立的文件[conftest.py],包含了fixture標籤") return[aa,bb,cc](左右滑動查看完整代碼)
(2)調用conftest.py中被修飾的方法,獲取初始化測試數據。
import pytestdef test_withAA(supply_AA_BB_CC): zz = 35 assert supply_AA_BB_CC[0]== zz, "校驗失敗,兩者不相等"def test_withBB(supply_AA_BB_CC): zz = 35 assert supply_AA_BB_CC[1]== zz, "校驗失敗,兩者不相等"def test_withCC(supply_AA_BB_CC): zz = 35 assert supply_AA_BB_CC[2]== zz, "校驗失敗,兩者不相等"(左右滑動查看完整代碼)
這是一個獨立的文件[conftest.py],包含了fixture標籤FAILED test_basic_fixture1.py::test_withAA - AssertionError: 校驗失敗,兩者不...FAILED test_basic_fixture1.py::test_withCC - AssertionError: 校驗失敗,兩者不...(左右滑動查看完整代碼)
在對Python四類主流自動化測試框架有了基本了解後,如何選擇適合當前項目的那一款框架呢?
要想做到有的放矢,了解每款框架的優點及局限性是選擇最佳Python測試框架的首選方案,下面就讓我們一探究竟。
在對比測試框架的優勢及局限性的同時,需要結合測試類型進行考慮:
通過上述分析對比,結合實際項目的自動化測試需求,綜合考慮後才能得出一個最佳選項,這樣才更有助於自動化項目的進展,達到事半功倍的效果,真正將自動化框架有效進行落實,找到那個屬於你的唯一。