浅谈自动化单元测试
?
什么是單元測試?
? ? ? ?單元測試(unit testing),是指對軟件中的最小可測試單元進行檢查和驗證,可以快速驗證代碼是否準確地實現了設計目的,幫助提高代碼設計的合理性(能進行單元測試的函數,一定是低耦合的)和健壯性(遍歷函數的邏輯路徑,函數不發生意料之外的問題),還能發現代碼中的缺陷和bug。
? ? ? ?相比后續復雜的集成測試和系統測試,單元測試的創建和維護比較簡單,發現的代碼問題也容易定位和修復,具有高效率低成本的優勢。
單元測試難落地執行的原因
? ? ? 1、開發人員不認為測試代碼是自己的工作,而測試人員又很難真正了解代碼的行為;
? ? ? 2、編寫單元測試太花時間了,包括測試用例、測試驅動和測試文檔等內容;
? ? ? 3、沒有真正的測試運行環境。
? ? ? 當然,這也意味著微小廠商或公司,在測試軟件時,處于成本及效率考慮或許不會使用主打單元測試的軟件測試工具。
什么是自動化單元測試?
? ? ? 自動化單元測試是通過測試人員自己編寫可復用的測試驅動和相關環境,或者借助一些框架或者工具,進行高效自動化的單元測試。
自動化單元測試的目的:
? ? ? 降低單元測試的時間和人力成本,構建便于管理、輔助設計、快速執行、數據復用的單元測試環境。
? ? ? 用自動化單元測試的方式,研發人員(通常建議單元測試由開發人員完成最為高效,但是開發人員通常項目任務緊,時間和精力不夠)在用例設計、執行和數據管理上不需要再花費巨量的時間,就可能有足夠的精力來真正進行和完成單元測試內容。
常見的自動化單元測試通常借助于各類測試框架或者測試工具
(一)單元測試框架
? ? ? 單元測試框架提供了一種統一的編程模型,可以將測試定義為一些簡單的類,這些類中的方法可以調用希望測試的應用程序代碼。
? ? ? 開發人員不需要編寫自己的測試控制工具;單元測試框架提供了測試運行程序(runner),只需要單擊按鈕就可以執行所有測試。利用單元測試框架,可以很輕松地插入、設置和分解有關測試的功能。測試失敗時,測試運行程序可以提供有關失敗的信息,包含任何可供利用的異常信息和堆棧跟蹤。
? ? ? 對于測試來說,單單的訪問接口,實現不了跑不同的測試用例!
? ? ? 需要對測試用例進行封裝為類/函數(單元)等一系列的工作才行,也可以理解為一個模板,照著模板寫測試用例、執行用例、斷言,以及輸出測試報告等。
(二)單元測試工具
? ? ? ?主要是指工具軟件供應商提供的成熟完備的商用單元測試工具,商用工具通常具有單元測試框架包含的所有功能,其提供的功能更加強大,界面相對更加友好;
? ? ? ? 除此之外,商用工具還有完備的說明文檔和及時的技術支持,也可以進行定制化開發。如果有相應的費用支持,商用單元測試工具是更加明智的選擇。
(三)好用的單元測試框架或者工具,通常具有:
· ???界面友好、展示豐富、功能清晰、說明完備——學習成本低,讓使用者能快速上手;
· ???良好的編譯開發環境支持——不同的項目,用戶可能會使用不同的開發環境,例如Qt、Keil、CCS等,如果只能支持少數環境,那么工具的適用性就會大打折扣;
· ???良好的語法特性和數據結構支持——不支持的話,測試代碼根本跑不起來;
·??????? ???好用的用例管理、數據分析和日志管理——支持用例復用,輔助設計覆蓋更全面的測試用例集,日志管理則能幫助定位執行失敗的原因,并且提供豐富的執行結果;
·??????? ???簡單易用的標準模板測試報告生成功能——對于有測試報告文檔要求的團隊,這個功能也非常重要。幾千頁的報告,人工去編寫,有這經歷的人都不想再來第二遭。
用自動化單元測試的方式,研發人員(通常建議單元測試由開發人員完成最為高效,但是開發人員通常項目任務緊,時間和精力不夠)在用例設計、執行和數據管理上不需要再花費巨量的時間,就可能有足夠的精力來真正進行和完成單元測試內容。
?
介紹幾款好用的自動化單元測試框架的工具
unittes —— 基于python語言
? ? ? unittest 單元測試框架不僅可以適用于單元測試,還可以適用WEB自動化測試用例的開發與執行,該測試框架可組織執行測試用例,并且提供了豐富的斷言方法,判斷測試用例是否通過,最終生成測試結果。
? ? ? unittest為python內置庫,通常不需要單獨安裝。
Junit —— 基于Java語言
? ? ? JUnit 是一個編寫可重復測試的開源框架。它是單元測試框架的 xUnit 架構的一個實例。JUnit提供斷言測試預期結果、測試功能共享通用的測試數據、測試套件輕松地組織和運行測試、圖形和文本測試運行。
? ? ? Junit在業界有廣泛應用,網上信息很多很全,也方便學習和集成。
iUnit、Visual Unit —— 基于C\C++語言
? ? ? ?C\C++語言,尤其是C語言,多用于可靠性要求較高的領域,如汽車電子、航空航天、軌道交通方向的核心控制程序,因此相關行業對單元測試也都有嚴格的標準要求,多采用較為成熟的商業工具。
? ? ? ?iUnit和Visual Unit都是國內廠商研發的單元測試工具,都具有較好的語言特性支持和友好的交互界面。兩款工具都是支持用戶全表格化操作,不需要再去編寫任何測試代碼,工具具有較好的用例管理、數據分析展示、報告生成功能。
? ? ? ?此外,iUnit相比而言功能會更加全面一些,主要如下:
? ? ? ?1)提供測試用例自動生成功能,自動生成測試用例集的語句覆蓋率通常在80%-90%左右,這樣大部分的用例設計工作可以由工具自己完成,用戶可以在此基礎上進行用例補充和優化,提高覆蓋率情況或者對關注的核心函數增加測試深度。這一點對經常性項目周期緊(唉,經常性加班的程序猿舉個手)加人員缺少的團隊很有意義。
? ? ? ?2)可以適配和部署國產環境,比如銀河麒麟+飛騰,這個是一些國家秘密安全相關行業很關心的問題,也是一些國外工具的致命短板。
? ? ? ?3)支持的開發環境很多,像用的比較多的CCS、tornado、Qt、Keil,甚至于國內自己開發的一些開發環境,翼輝、海迅、天脈等等
NUnit —— 基于C#語言
? ? ? ?NUnit是一個專門針對于.NET來寫的單元測試框架,它是xUnit體系中的一員,在開始的時候NUnit和xUnit體系中的大多數的做法一樣,僅僅是將Smalltalk或者Java版本轉換而來,但是在.NET2.0之后它加入了一些特有的做法。
? ? ? ?NUnit完全用C#編寫,并且編寫時充分利用了許多 .NET 的特性,比如反射,客戶屬性等等。重要的一點是它適合于所有.NET語言。
總結
- 上一篇: Maven 打jar包部署到生产环境的p
- 下一篇: z370支持pcie信号拆分吗_不再混乱