如何利用 xUnit 框架對測試用例進行維護?

      網友投稿 825 2025-03-31

      先看 Wikipedia 上的解釋:

      xunit 是一系列測試框架的統稱,最開始來源于一個叫做 Smalltalk 的 Sunit 框架,現在各種面向對象的語言,如 Java、Python 的鼻祖就是 Smalltalk,后來這些語言都借助了 Sunit 框架的理念,有很多通用的規范和特征,也就統稱為 xUnit。

      Java : JUnit、TestNG

      Python : UnitTest、PyTest

      Test Runner :測試的運行器

      Test Case :測試用例

      Test Fixtures : 測試夾具 / 治具,用來管理測試用例的執行

      Test Suites :測試套件,用來編排測試用例

      Test Execution:測試執行,以何種順序執行

      Test Result Formatter:測試結果,具備相同的格式,可被整合

      Assertions:斷言

      Junit4 仍然是 99% 的研發工程師的首選框架,方便測試工程師與研發工程師交流(拉關系~~);

      TestNG 的使用多用于測試工程師;

      Junit5 還未大規模普及(最推薦的框架,成熟、好用、研發測試通用);

      很多框架基于 Junit4 定制;

      測試用例的名字:特性方法名

      測試用例描述與標簽:注解

      測試用例的容器:類或者套件

      測試過程

      單元測試

      Web 自動化測試 Selenium

      App 自動化測試 Appium

      接口自動化測試 RestAssured

      測試斷言

      1)創建 maven 工程 XUnit,pom.xml 中添加 Junit 依賴;

      2)src/test/java 下創建測試類 Junit4DemoTest

      注意

      測試類要以 Test 開頭或者結尾

      maven auto-import

      src/main/java 存放應用實現代碼

      src/test/java 存放單元測試

      單元測試的原則之一:用例可以獨立運行

      基本測試 demo 運行:

      運行結果:

      Junit4:

      Default 取決于反射方法獲得的列表,順序固定(不保險)

      如何利用 xUnit 框架對測試用例進行維護?

      @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

      運行結果:

      基類的?@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 的順序執行

      有時候我們需要對一些特定的用例進行分組測試,這個時候就可以用@Category來實現

      另外在套件執行類上運用注解:

      @Category分組需要給定一個標簽,以類或者接口都可以,這里創建連個接口SlowGroup和FastGroup

      在用例上分別分組為SlowGroup、FastGroup和SlowGroup+FastGroup

      指明SlowGroup組測試執行,FastGroup組的測試不執行:

      測試結果:

      僅指明SlowGroup組測試執行

      測試結果:

      僅指明不執行的組為FastGroup

      測試結果:

      有時候我們需要傳入測試數據,且數據可能是多組,這個時候就需要使用參數化來傳入多組數據進行測試

      Junit4 的參數化稍微有點麻煩:

      1)先在類名上加入注解@RunWith(Parameterized.class)表明要以參數化運行

      2)用注解@Parameterized.Parameters來設定數據源

      3)最后用注解?@Parameterized.Parameter?來指定數據源數據對應的參數

      4)總覽

      測試結果:

      從測試結果可以看到 3 組參數分別傳入方法中,方法各執行了一次,完成參數化測試

      測試用例之間的順序

      test fixtures 的順序

      繼承順序

      套件之間的順序

      參考文檔鏈接

      JUnit4 單元測試框架 [https://junit.org/junit4/]

      JUnit5 單元測試框架 [https://junit.org/junit5/]

      請點擊鏈接獲取更多技術文章,有驚喜喲:https://qrcode.ceba.ceshiren.com/link?name=article&project_id=qrcode&from=hwyun×tamp=1651114661

      junit 單元測試

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Excel剿滅DLL木馬
      下一篇:excel生成圖表(excel生成圖表 調整xy軸)
      相關文章
      亚洲精品123区在线观看| 亚洲va在线va天堂成人| 亚洲av日韩av无码av| 亚洲精品国产情侣av在线| 婷婷久久久亚洲欧洲日产国码AV| 亚洲第一成人影院| 亚洲Av无码乱码在线观看性色 | 蜜臀亚洲AV无码精品国产午夜.| 亚洲欧洲日韩极速播放| 亚洲中文字幕一二三四区苍井空| 亚洲伊人久久大香线蕉啊| 久久国产亚洲精品无码| 337p日本欧洲亚洲大胆精品555588 | 亚洲午夜激情视频| 亚洲欧洲中文日韩av乱码| 亚洲成a人片在线观看老师| 亚洲成?v人片天堂网无码| 亚洲äv永久无码精品天堂久久| 亚洲AV无码XXX麻豆艾秋| 在线精品自拍亚洲第一区| 亚洲а∨天堂久久精品| 国产性爱在线观看亚洲黄色一级片 | 亚洲一区爱区精品无码| 亚洲精品成人网站在线观看 | 亚洲国产精品美女久久久久| 亚洲丁香婷婷综合久久| 亚洲高清无码专区视频| 亚洲情综合五月天| 日韩亚洲AV无码一区二区不卡| 亚洲男人的天堂在线| 亚洲一区二区三区久久| 亚洲日韩中文字幕一区| 国产AV无码专区亚洲AV蜜芽| 亚洲精品A在线观看| 亚洲日韩国产精品第一页一区| 亚洲av无码乱码国产精品 | 亚洲成A人片在线观看无码3D| 久久精品国产精品亚洲艾草网美妙| 亚洲精品无码不卡在线播HE | 亚洲视频2020| 亚洲一区二区三区免费在线观看|