溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何使用Python代碼覆蓋率工具Coverage

發(fā)布時間:2021-10-09 17:44:14 來源:億速云 閱讀:212 作者:柒染 欄目:大數(shù)據(jù)

如何使用Python代碼覆蓋率工具Coverage,針對這個問題,這篇文章詳細介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

1. 代碼覆蓋率

單元測試代碼覆蓋率作為一種度量方式,可以計算單元測試用例對于被測代碼的覆蓋程度,即:被執(zhí)行的代碼數(shù)量和代碼總數(shù)量的比值

統(tǒng)計代碼覆蓋率,經(jīng)常在單元測試后再進行,可以為測試結(jié)果提供評判依據(jù)

Python 項目最常使用的代碼覆蓋率統(tǒng)計工具就是:Coverage

 

2. Coverage

Coverage 是用于統(tǒng)計 Python 代碼覆蓋率的工具,不僅支持分支覆蓋率統(tǒng)計,生成 HTML 格式的統(tǒng)計報告,而且可以集成到 Jenkins 中使用

安裝 Coverage 依賴同樣是使用 pip 安裝

# 安裝 Coverage 依賴
pip3 install coverage
 

Coverage 官方提供了 2 種方式,用于統(tǒng)計代碼覆蓋率,分別是:

1、Coverage 命令行

2、Coverage API 

更詳細的介紹可以參考官方文檔:

https://coverage.readthedocs.io/en/latest/

 

3. 實戰(zhàn)一下

首先,用 Python 編寫一段簡單被測代碼,如下:
# 被測代碼 
# main.py
def get_level(cource):
    """
    自定義的方法
    :param cource:成績
    :return:
    """
    if cource >= 90:
        return "優(yōu)秀"
    elif cource >= 80:
        return "良好"
    elif cource >= 60:
        return "合格"
    elif cource >= 40:
        return "不合格"
    else:
        return "差"
然后,編寫單元測試用例  
 
根據(jù)上面的被測方法,這里使用 Python 自帶的  unitte  st   依賴庫來編寫 2 個簡單的測試用例
并且,特意只  覆蓋到了上面  方法的   2 個分支,即:優(yōu)秀和良好
# 單元測試 
# test_get_level.py 
import unittest

from main import *


class GetLevel(unittest.TestCase):

    def test_get_level1(self):
        self.assertEquals(get_level(90), "優(yōu)秀")

    def test_get_level2(self):
        self.assertEquals(get_level(80), "良好")


if __name__ == '__main__':
    unittest.main(verbosity=2)
右鍵運行單元測試,會發(fā)現(xiàn)兩個測試用例都是通過的
接下來,分別使用 Coverage 命令和 API 在本地生成代碼覆蓋率統(tǒng)計報告
1、Coverage  命令  
在項目根目錄下,運行 coverage run 命令,生成 .coverage 文件,搜集被測試源代碼覆蓋率的信息
# 1、搜集被測代碼覆蓋率信息,保存到 .coverage 文件中
coverage run test_get_level.py

# 2、生成覆蓋率統(tǒng)計結(jié)果報告
coverage html -d coverage_result
然后,使用 coverage html -d  命令在同級目錄下生成代碼覆蓋率統(tǒng)計報告

如何使用Python代碼覆蓋率工具Coverage

用瀏覽器打開統(tǒng)計報告文件夾中的 index.html 文件,  其中:
statements  :代碼總行數(shù),不包含空行和注釋行
missing  :未執(zhí)行的代碼行數(shù)
coverage  :代碼覆蓋率

如何使用Python代碼覆蓋率工具Coverage

點擊 test_get_level.py 文件,可以非常直觀地查看到,哪些代碼執(zhí)行了,哪些代碼沒有被執(zhí)行

如何使用Python代碼覆蓋率工具Coverage

2、C  overage API
使用 Coverage API生成代碼覆蓋率統(tǒng)計報告更方便
只需要使用查找測試套件并運行,然后使用 Coverage API 進行分析、保存、展示即可  
 
# 使用 API 生成代碼覆蓋率統(tǒng)計報告
# exec_api.py

import coverage
import unittest

# 實例化一個對象
cov = coverage.coverage()
cov.start()

# 測試套件
suite = unittest.defaultTestLoader.discover("./", "test_get_level.py")
unittest.TextTestRunner().run(suite)


# 結(jié)束分析
cov.stop()

# 結(jié)果保存
cov.save()

# 命令行模式展示結(jié)果
cov.report()

# 生成HTML覆蓋率報告
cov.html_report(directory='result_html')

4. 最后

上面只是通過一個簡單的 Python 方法結(jié)合 unittest 單元測試框架,展示了 Coverage 獲取代碼覆蓋率統(tǒng)計報告的方法

實際項目中,更多應(yīng)用場景是: Python自動化、Django/Flask Web項目統(tǒng)計單元測試用例的代碼覆蓋率,以提升產(chǎn)品的質(zhì)量關(guān)于如何使用Python代碼覆蓋率工具Coverage問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI