首页 > 解决方案 > 为什么在 Python 中使用覆盖率时得分太低?

问题描述

我在下面运行代码来解析 xml 文件。分数仅接近 21%。无法理解为什么?您能否建议在这里需要做些什么来提高分数。

import os
import pandas as pd
from xml.dom import minidom
import coverage



def parseXml(DF, filePath):

    xmldoc = minidom.parse(filePath)
    PODs= xmldoc.getElementsByTagName("POD")
    for pod in PODs:
        if pod.hasAttribute("name") and pod.hasAttribute("DC") and pod.hasAttribute("deferLPUpgrade"):
            DF = DF.append({'PODNAME': pod.getAttribute("name"), 'DC': pod.getAttribute("DC"), 'Upgrade': pod.getAttribute("deferLPUpgrade")}, ignore_index=True)
    return(DF)

if __name__ == "__main__":
    cov = coverage.Coverage()
    cov.start()
    FILENAME = "schedule.xml"
    COL_NAMES = ['PODNAME', 'DC', 'Upgrade']
    DF = pd.DataFrame(columns = COL_NAMES)
    DF = parseXml(DF, FILENAME)
    print DF
    head, tail = os.path.splitext(FILENAME)
    OUT_FILE = os.path.join(head + '.csv')
    DF.to_csv(OUT_FILE, sep=',', index=False)

    cov.stop()
    cov.save()

    cov.html_report(directory='covhtml')

下面是 temp_py.html

temp_py.html 的屏幕截图

标签: pythoncode-coverage

解决方案


您不需要使用覆盖 API。只需使用覆盖命令行运行您的程序。然后将涵盖您的所有代码。

您在这里的得分很低,因为覆盖率无法衡量在覆盖率开始之前运行的代码。因为您是从程序内部开始覆盖,所以在您调用 coverage.start() 之前运行的所有程序都不会被覆盖。此外,框架中调用 start() 的任何代码都不会被覆盖,只有从那里调用的函数中的代码。这解释了屏幕截图中的所有红色。


推荐阅读