Python代碼覆蓋率分析工具----Coverage

      網友投稿 1807 2022-05-30

      本文來自Tynam Yang投稿

      簡介

      Python代碼覆蓋率分析工具----Coverage

      在測試中,為了度量產品質量,代碼覆蓋率被作為一種測試結果的評判依據,在Python代碼中用來分析代碼覆蓋率的工具當屬Coverage。代碼覆蓋率是由特定的測試套件覆蓋被測源代碼的程度來度量,Coverage是一種用于統計Python代碼覆蓋率的工具,通過它可以檢測測試代碼的有效性,即測試case對被測代碼的覆蓋率幾何。

      Coverage支不僅持分支覆蓋率統計,還可以生成HTML/XML報告。并且XML報告可以結合Jenkins和Sonar集成工具一起使用。

      Coverage官方文檔:http://coverage.readthedocs.org/en/latest/

      安裝

      Coverage作為Python的一個第三方庫,使用時需要先安裝,使用pip命令進行安裝。

      安裝命令:pip install coverage

      C:\Users\TynamYang>pip?install?coverage

      Collecting?coverage

      Downloading?coverage-5.1-cp37-cp37m-win32.whl?(204?kB)

      |████████████████████████████████|?204?kB?731?kB/s

      Installing?collected?packages:?coverage

      Successfully?installed?coverage-5.1

      安裝完成后可以看到安裝的版本:coverage-5.1

      安裝完成后使用coverage,coverage有兩種使用方法,一種是在命令行中使用,一種是調用API使用。方便控制部分需要測試的代碼。

      命令行中使用

      1、基本參數

      命令行中使用文檔:http://coverage.readthedocs.org/en/latest/cmd.html

      命令行中使用時常用參數:

      run – 運行Python程序并收集執行數據

      report – 報告覆蓋率結果

      html – 生成HTML文件,內容含覆蓋率結果列表

      json – 生成JSON文件,內容含覆蓋率結果

      xml – 生成XML報告文件,內容含覆蓋率結果

      erase – 清除之前收集的覆蓋率數據

      combine – 合并多個數據文件

      debug – 獲取調試信息

      可以使用help命令查看幫助:

      coverage help

      2、運行代碼收集信息

      在使用coverage時,基本需要兩步運行,第一步運行源代碼,收集被測試的源代碼覆蓋率的信息,第二步生成代碼覆蓋率的信息報告。

      如下測試代碼:

      import?unittest

      def?add_numb(a,?b):

      return?a?+?b

      def?division_numb(a,?b):

      return?a?/?b

      class?Test(unittest.TestCase):

      def?test_add_1(self):

      self.assertEqual(add_numb(1,1),?2)

      def?test_add_2(self):

      self.assertEqual(add_numb(2,0),?1)

      def?test_division_1(self):

      self.assertEqual(division_numb(2,1),?2)

      def?test_division_2(self):

      self.assertEqual(division_numb(2,0),?2)

      if?__name__?==?"__main__":

      unittest.main(verbosity=2)

      使用命令運行:

      coverage run test.py

      C:\Users\TynamYang\Desktop>?coverage?run?test.py

      test_add_1?(__main__.Test)?...?ok

      test_add_2?(__main__.Test)?...?FAIL

      test_division_1?(__main__.Test)?...?ok

      test_division_2?(__main__.Test)?...?ERROR

      ======================================================================

      ERROR:?test_division_2?(__main__.Test)

      ----------------------------------------------------------------------

      Traceback?(most?recent?call?last):

      File?"test.py",?line?22,?in?test_division_2

      self.assertEqual(division_numb(2,0),?2)

      File?"test.py",?line?9,?in?division_numb

      return?a?/?b

      ZeroDivisionError:?division?by?zero

      ======================================================================

      FAIL:?test_add_2?(__main__.Test)

      ----------------------------------------------------------------------

      Traceback?(most?recent?call?last):

      File?"test.py",?line?16,?in?test_add_2

      self.assertEqual(add_numb(2,0),?1)

      AssertionError:?2?!=?1

      ----------------------------------------------------------------------

      Ran?4?tests?in?0.003s

      FAILED?(failures=1,?errors=1)

      代碼執行完成后會生成一個覆蓋率統計結果文件:.coverage。該文件名可通過設置COVERAGE_FILE環境變量進行修改。

      3、生成報告

      查看報告有兩種方式,一種是在當前命令行模式下查看,一種是生成HTML報告文件查看。

      命令行模式下查看

      根據運行代碼后生成的.coverage文件,使用report參數可在命令行模式下查看覆蓋率統計結果。

      使用命令:

      coverage report

      PS?C:\Users\TynamYang\Desktop>?coverage?report

      Name??????Stmts???Miss??Cover

      -----------------------------

      test.py??????16??????0???100%

      由結果可以得知,執行的test.py文件,代碼覆蓋率是100%

      結果展示中的字段含義:

      tmts:語句總數

      Miss:未執行到的語句數

      Cover:覆蓋率,計算公式 Cover=(Stmts-Miss)/Stmts

      生成HTML報告文件

      使用命令生成HTML報告:

      coverage html -d covhtml

      其中參數-d是指定生成的html所在的文件夾名

      命令執行完成后會生成一個covhtml文件。

      文件中的index.html文件覆蓋率數據統計。

      也可以看一些示例:https://nedbatchelder.com/files/sample_coverage_html/

      各字段說明:

      Stmts 總的有效代碼行數(不包含空行和注釋行)

      Miss 未執行的代碼行數(不包含空行和注釋行)

      Branch 總分支數

      BrMiss 未執行的分支數

      Cover 代碼覆蓋率

      Missing 未執行的代碼部分在源文件中行號

      以執行的測試原文件命名的文件,可以高亮顯示覆蓋和未覆蓋的代碼。如test_py.html。

      也可以看一些示例,http://nedbatchelder.com/code/coverage/sample_html/

      使用

      調用API使用文檔:http://coverage.readthedocs.org/en/latest/api.html

      在python代碼中通過調用coverage模塊執行代碼生成代碼覆蓋率的統計結果。使用方法也非常簡單,如下示例:

      if?__name__?==?"__main__":

      #?實例化對象

      cov?=?coverage.coverage()

      #?開始分析

      cov.start()

      suite?=?unittest.defaultTestLoader.discover(os.getcwd(),?"test.py")

      unittest.TextTestRunner().run(suite)

      #?結束分析

      cov.stop()

      #?結果保存

      cov.save()

      #?命令行模式展示結果

      cov.report()

      #?生成HTML覆蓋率報告

      cov.html_report(directory='covhtml')

      文章鏈接地址:

      https://www.cnblogs.com/tynam/p/12788442.html

      以上,便是今天的內容,希望大家喜歡,歡迎「轉發」或者點擊「在看」支持!

      “掃一掃,關注我吧”

      HTML Python

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

      上一篇:最完美的數學公式轉圖片:純Python實現,可設置字體、字號、顏色和分辨率
      下一篇:【微信開發】上傳用戶語音 并轉碼 分享
      相關文章
      亚洲精品无码不卡| 亚洲av无码天堂一区二区三区| 亚洲国产成人久久精品大牛影视| 亚洲午夜精品一区二区 | 亚洲国产精品激情在线观看| 亚洲欧美中文日韩视频| 亚洲二区在线视频| 亚洲精品日韩专区silk| 91亚洲精品视频| 亚洲一区二区中文| 亚洲黄色一级毛片| 久久亚洲私人国产精品| 国产亚洲成av片在线观看| 亚洲综合国产一区二区三区| 亚洲色大成网站www永久一区| 亚洲熟妇少妇任你躁在线观看无码| 亚洲国产成人精品女人久久久 | 亚洲一区精彩视频| 亚洲依依成人亚洲社区| 亚洲高清一区二区三区电影| 亚洲欧美日韩中文字幕在线一区| 亚洲综合精品第一页| 亚洲а∨精品天堂在线| 亚洲成AⅤ人影院在线观看| 亚洲男人天堂2020| 久久精品国产亚洲综合色| 西西人体44rt高清亚洲| 久久亚洲精品成人无码网站| 亚洲三级视频在线| 亚洲精品国产高清在线观看| 春暖花开亚洲性无区一区二区| 亚洲国产成人久久综合区| 中文字幕亚洲综合久久菠萝蜜| 亚洲中文字幕无码一区 | 亚洲性色AV日韩在线观看| 国产亚洲情侣久久精品| 亚洲尤码不卡AV麻豆| 久久亚洲成a人片| 亚洲av午夜精品无码专区| 亚洲人成未满十八禁网站| 亚洲AV中文无码乱人伦在线视色|