xUnit是一系列測試框架的統稱,最開始來源於一個叫做Smalltalk的SUnit框架。
現在各種面向對象的語言,如java、python的鼻祖就是Smalltalk,後來這些語言都藉助了Sunit框架的理念,有很多通用的規範和特徵,也就統稱為xUnit。
xUnit是什麼
xUnit之框架與體系
很多我們已知的單元測試框架,比如 python 的 UnitTest、PyTest 以及Java的JUnit、TestNG 他們通用體系結構統稱為「 xUnit」。
而xUnit的architecture(體系結構)通常都是由以下的結構組成: Test Runner :測試的運行器 Test Case :測試用例 Test Fixtures : 測試夾具/治具,用來管理測試用例的執行 Test Suites :測試套件,用來編排測試用例 Test Execution:測試執行,以何種順序執行 Test Result Formatter:測試結果,具備相同的格式,可被整合 Assertions:斷言
從Junit4開啟xUnit框架之旅
Why Junit4?
在目前的行業中,Junit4仍然是99%的研發工程師的首選框架,所以可以方便測試工程師與研發工程師交流(偷偷拉個關係~)。而且TestNG的使用多用於測試工程師。
Junit5還未大規模普及(但是從使用上面來說最推薦的框架,成熟、好用、研發測試通用),而很多框架依然基於Junit4定製,所以我們還無法從Junit4轉換到Junit5中。
測試用例之核心元素
一個測試用例到底應該有哪些核心的元素? 測試用例的名字:特性方法名 測試用例的描述與標籤:註解 測試用例的容器:類或者套件
- 測試過程: 單元測試 Web自動化測試 Selenium App自動化測試 Appium 接口自動化測試 RestAssured
- 測試斷言
基本demo的運行
1)創建maven工程XUnit,pom.xml中添加Junit依賴
2)src/test/java下創建測試類Junit4DemoTest 註:
測試類要以Test開頭或者結尾 maven auto-import src/main/java 存放應用實現代碼 src/test/java 存放單元測試 單元測試的原則之一:用例可以獨立運行
基本測試demo運行:
運行結果:
用例間的執行順序
Junit4的執行順序:
- Default 取決於反射方法獲得的列表,順序固定(不保險)
- @FixMethodOrder(MethodSorters.JVM) 順序可能變化
- @FixMethodOrder(MethodSorters.NAME_ASCENDING) 按照名字ASCII順序(穩定常用,建議使用)
TestNG、Junit5的執行順序:
- 可以通過註解設置順序Order
順序演示:
運行結果:
測試套件的執行順序支持
Junit4:
- @BeforeClass、@AfterClass
- @Before、@After
TestNG:
- @BeforeClass
- @BeforeMethod
- BeforeGroup、@BeforeSuite
Junit5:
- @BeforeClass
- @BeforeEach
實操演示1:
在用例執行前後增加@Before和@After:
運行結果:
實操演示2:
再增加@BeforeClass和@AfterClass
運行結果:
App自動化測試用例管理
基類的@BeforeClass:
- 配置讀取、配置Capability、初始化driver、安裝App,PageObject初始化
集成的子類執行流程:
- @Before:啟動並進入特定界面
- @Test:測試用例執行
- @After:回退到入口
- @BeforeClass:進圖特定的tab子功能頁面
- @AfterClass:關閉app
基類的@AfterClass
- driver.quit
繼承關係下的測試流程
流程順序:
- 父類@BeforeClass
- 子類@BeforeClass
- 父類@Before
- 子類@Before
- 子類@Test
- 父類@Test
- 子類@After
- 父類@After
- 子類@AfterClass
- 父類@AfterClass
實操演示1:
現在創建一個子類Junit4DemoChildrenTest,繼承Junit4DemoTest,然後實現和父類一樣的方法並運行子類:
運行結果:
從運行結果中我們可以看到,子類會將與父類中一樣的方法進行覆蓋,只執行子類中的方法
實操演示2:
現在將子類中的方法名進行修改,使其與父類方法名不同,再運行子類:
運行結果:
如何使用測試套件
測試套件有如下三種類型
- RunWith
- SuiteClasses
- class
實操演示:
新建一個子類Junit4DemoChildren2Test,繼承Junit4DemoTest
再建一個測試類SuitesTest,寫上註解@RunWith(Suite.class),表明這是一個測試套件,是多個測試類的一個集合,一個容器;
然後利用註解@Suite.SuiteClasses來設置測試類集合,設置測試類執行的順序
運行結果:
由測試結果可以看到使用套件後,測試過程為Junit4DemoChildren2Test、Junit4DemoTest、Junit4DemoChildrenTest的順序執行。