程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

針對Java、C++和Python語言的單元測試工具,你最喜歡哪一個?

編輯:Python

目錄:導讀

前言

單元測試框架

1)JUnit​編輯 

2)TestNG

3)GoogleTest

4)pytest

5)unittest

單元測試Mock工具

6)JMockit

單元測試覆蓋率工具

7)JCoCo

8)gcov、lcov、gcovr

9)Coverage.py

10)EvoSuite

結語


前言

在應用程序中,單元是具有一個或多個輸入和單個輸出的軟件中最小可測試部分。單元測試是一種測試軟件代碼單元的方法,通常包括一個或兩個輸入,產生一個輸出。單元測試主要關注獨立模塊的功能正確性,目的是確保每個單元都按照預期的方式運行

要進行單元測試,開發人員需要編寫測試代碼。單元測試有手動和自動化測試兩種類型,自動化通常是首選的方法,可以為開發人員節省大量的時間和精力。

 

單元測試是自動化測試金字塔模型中占比最大的測試類型,做好單元測試對於保證軟件產品的質量非常重要,單元測試可以:

  • 及早發現軟件中的缺陷並及早修復
  • 修復單元測試發現的缺陷時,代碼更改不會影響其他模塊
  • 模塊集成變得更容易
  • 減少缺陷率和時間成本

現在讓我們來總結一下針對Java、C++和Python語言的單元測試中,受歡迎的測試工具,它們不僅包括單元測試框架,還包括了Mock工具、代碼覆蓋率工具,以及兩個智能化的單元測試用例自動生成工具:

1、Junit

2、TestNG

3、GoogleTest

4、pytest

5、unittest

6、Jmockit

7、JaCoCo

8、gcov、lcov、gcovr

9、Coverage.py

10、EvoSuite

11、Diffblue Cover

單元測試框架

當前成熟的單元測試框架包括:JUnit、TestNG、gtest、pytest、unittest。

1)JUnit 

JUnit是一個為Java編程語言設計的開源單元測試框架,由 Kent Beck 和 Erich Gamma建立,它是單元測試框架家族中的一個,這些框架被統稱為xUnit,JUnit是xUnit 家族中最為成功的一個。JUnit 有它自己的 Junit 擴展生態圈,多數 Java 的開發環境都已經集成了 JUnit 作為單元測試的工具。JUnit 的最新版本是JUnit 5,它不再是一個單一的JAR 包,而是由JUnit platform(平台)、JUnit Jupiter 和JUnit Vintage 這3 部分組成。

官網地址:https://junit.org/junit5/

2)TestNG

TestNG 是另一個為Java編程語言設計的開源單元測試框架,是一個受JUnit和NUnit啟發而來的測試框架,但它引入了一些新功能,使其更強大、更容易使用,例如:

核心特性是多線程測試執行,測試代碼是否是多線程安全的;

提供注釋支持;

支持數據驅動測試(使用@DataProvider);

支持參數化測試;

強大的執行模型(不再有TestSuite);

支持各種工具和插件(Eclipse, IDEA, Maven等…);

嵌入BeanShell以獲得更多的靈活性;

用於運行時和日志記錄的默認JDK函數(沒有依賴關系)。

官網地址:https://testng.org/

3)GoogleTest

GoogleTest是一個跨平台的(Liunx、Mac OS X、Windows 、Cygwin 、Windows CE and Symbian ) C++單元測試框架,由google公司發布,為在不同平台上為編寫C++測試而開發的。它提供了豐富的斷言、致命和非致命判斷、參數化、”死亡測試”等等。例如:

測試用例本身就是一個exe工程,編譯之後可以直接運行,非常的方便。

編寫測試案例變的非常簡單(使用一些簡單的宏如TEST),讓我們將更多精力花在測試用例設計上。

提供了強大豐富的斷言的宏,用於對各種不同檢查點的檢查。

提高了豐富的命令行參數對腳本運行進行一系列的設置。

代碼開源地址:https://github.com/google/googletest

4)pytest

 

pytest是一個非常成熟的全功能的支持Python語言的單元自動化測試框架。簡單靈活,容易上手,支持參數化;能夠支持簡單的單元測試和復雜的功能測試,還可以用來做selenium/appnium等自動化測試,以及接口自動化測試(pytest集成requests)。

官網地址:http://pytest.org/

5)unittest

 

unittest 是 Python 自帶的一個單元測試框架,無需安裝,使用簡便,引入包 import unittest 即可使用。unittest單元測試框架作為python的標准庫,是其他單元測試框架的基礎。

官網地址:http://docs.python.org/zh-cn/3/library/unittest.html

單元測試Mock工具

在進行單元測試時,需要測試的類有很多依賴,這些依賴的類或者資源又會有依賴,導致在單元測試代碼裡無法完成構建。因此,我們需要采用Mock 技術隔離依賴對象,即模擬這些需要構建的類或者資源,提供給需要測試的對象使用。

6)JMockit

 

JMockit是一個用於Java語言單元測試的開源Mock工具,包含了工具和API集合。Jmockit可以和junit和TestNG配合使用編寫單元測試。

JMockit支持類級別整體mock和部分方法重寫,以及實例級別整體mock和部分mock,可以mock靜態方法、私有變量及局部方法。

這個工具還具有統計單元測試代碼覆蓋率的功能,提供了三種類型的代碼覆蓋率,如行覆蓋率、路徑覆蓋率和數據覆蓋率。

官網地址:http://jmockit.org/

單元測試覆蓋率工具

單元測試中還需要用到代碼覆蓋率工具。代碼覆蓋率是用來度量在單元測試過程中被覆蓋代碼的指標。代碼覆蓋率統計工具用來發現沒有被測試覆蓋的代碼,完善單元測試的覆蓋率。另外,這類工具還可以用來構建代碼調用關系,精准的確定回歸測試范圍,避免全量回歸造成測試資源的浪費。

7)JCoCo

 

Jacoco是一個開源的免費Java代碼覆蓋工具,由EclEmma創建,其使用方法很靈活,可以嵌入到Ant、Maven中;可以作為Eclipse插件,可以使用其Java Agent技術監控Java程序等等。很多第三方的工具提供了對JaCoCo的集成,如sonar、Jenkins等。

JaCoCo包含了多種尺度的覆蓋率計數器:

指令級覆蓋(Instructions,C0coverage)

分支(Branches,C1coverage)

圈復雜度(CyclomaticComplexity)

行覆蓋(Lines)

方法覆蓋(non-abstract methods)

類覆蓋(classes)

官網地址:https://www.jacoco.org/jacoco/

8)gcov、lcov、gcovr

 

gcov、lcov、gcovr都是支持C/C++語言代碼覆蓋率的工具。

gcov是由gcc內建的代碼覆蓋率生成工具,可以很方便的和GCC編譯器配合使用,通常情況下,直接安裝gcc工具鏈,也就同時包含了gcov命令行工具。gcov得到的結果是文本形式的,而且不同的源碼文件需要一一執行gcov命令,對於大工程是不方便的,這時就需要lcov。

lcov是gcov工具的圖形前端,收集多個源文件的gcov數據,生成描述覆蓋率的HTML頁面。生成的結果中會包含概述頁面,方便浏覽。

一般場景下使用gcov和lcov能滿足代碼覆蓋率的獲取和展示工作,lcov和genhtml配合生成的HTML報告內容詳盡,簡潔直觀,行覆蓋率、分支覆蓋率都有,但是HTML文件在常用的持續集成工具(比如Jenkins、gitlab-ci)中均無法集成,因此我們需要其他的工具用於覆蓋率結果的持續集成展示。gcovr是一款針對C/C++代碼覆蓋率並支持以多種方式(包括列表方式、XML文件方式、HTML網頁方式等)展示出來的工具,而XML文件剛好是可以被持續集成工具解析的。

lcov下載地址:https://github.com/linux-test-project/lcov

gcovr下載地址:https://github.com/gcovr/gcovr

9)Coverage.py

 

Coverage.py是一個度量Python語言代碼覆蓋率的工具。Coverage.py可以指定要通過配置文件分析哪些源文件,通過分析源代碼,發現沒有被測試覆蓋的代碼。

官網地址:https://coverage.readthedocs.io

智能化的單元測試用例自動生成工具

單元測試的重要性毋庸置疑,但是在很多企業推行的並不好,一個非常重要的原因是開發人員不願意把時間花費在編寫單元測試代碼上。如今,有兩個值得推薦的智能化工具可以自動生成單元測試用例,幫助提高單元測試的覆蓋率,提高企業的研發效能。

10)EvoSuite

 

EvoSuite是由英國Sheffield(謝菲爾德)等大學聯合開發的一種開源工具,用於自動生成測試用例集,生成的測試用例均符合Junit的標准,可直接在Junit中運行,並得到了Google和Yourkit的支持。通過使用此自動測試工具能夠在保證代碼覆蓋率的前提下極大地提高測試人員的開發效率。但是只能輔助測試,並不能完全取代人工,測試用例的正確與否還需人工判斷。

官網地址:https://www.evosuite.org/

開源代碼地址:https://github.com/EvoSuite/evosuite

 

Diffblue Cover是一個自動化的單元測試編寫工具,通過分析Java應用程序編寫反映當前行為的單元測試,提高測試覆蓋率,並幫助開發人員在將來的代碼更改中發現回歸缺陷。

插件開源社區版地址:https://plugins.jetbrains.com/plugin/14946-diffblue-cover--community-edition/versions 

 

下面是一份非常優質的學習資源,對於做【軟件測試】的朋友來說應該是最全面最完整的備戰倉庫,這個倉庫也陪伴我走過了最艱難的路程,希望也能幫助到你!

 

以上軟件測試資料需要的可以私信我都可以免費獲取

這還有一份216頁軟件測試工程師面試寶典文檔資料。以及相對應的視頻學習教程免費分享!,其中資料包括了有基礎知識、Linux必備、Shell、互聯網程序原理、Mysql數據庫、抓包工具專題、接口測試工具、測試進階-Python編程、Web自動化測試、APP自動化測試、接口自動化測試、測試高級持續集成、測試架構開發測試框架、性能測試、安全測試等。

學習不要孤軍奮戰,最好是能抱團取暖,相互成就一起成長,群眾效應的效果是非常強大的,大家一起學習,一起打卡,會更有學習動力,也更能堅持下去。

結語

最後再唠唠一句,如果想以測試為長期發展職業目標,是需要時刻保持學習的,要使自己具備競爭力,無論你現在工作幾年,只要行動起來,你就已經占優勢了,好啦就到這裡了,祝大家2022年能升職加薪,沒入職的就早日拿到心儀公司的offer,事事順遂。

歡迎留言,或是關注我的專欄和我交流。


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved