Ris*_*sal 4 python code-coverage
我想从代码内部捕获覆盖范围。我尝试了下面的一种,但出现错误。请参阅以下链接了解覆盖 API。 https://coverage.readthedocs.io/en/v4.5.x/api.html#api
import os
import pandas as pd
import sys
import requests
import xml.etree.ElementTree as ET
from xml.dom import minidom
import coverage
cov = coverage.Coverage()
cov.start()
#actual code
cov.stop()
cov.save()
cov.html_report(directory='covhtml')
Run Code Online (Sandbox Code Playgroud)
低于错误
CoverageException Traceback (most recent call last)
<ipython-input-15-2047badbbd57> in <module>()
48 cov.save()
49
---> 50 cov.html_report(directory='covhtml')
C:\Users\\Anaconda2\lib\site-packages\coverage\control.pyc in html_report(self, morfs, directory, ignore_errors, omit, include, extra_css, title, skip_covered)
1093 )
1094 reporter = HtmlReporter(self, self.config)
-> 1095 return reporter.report(morfs)
1096
1097 def xml_report(
C:\Users\\Anaconda2\lib\site-packages\coverage\html.pyc in report(self, morfs)
137
138 # Process all the files.
--> 139 self.report_files(self.html_file, morfs, self.config.html_dir)
140
141 if not self.all_files_nums:
C:\Users\\Anaconda2\lib\site-packages\coverage\report.pyc in report_files(self, report_fn, morfs, directory)
81
82 if not file_reporters:
---> 83 raise CoverageException("No data to report.")
84
85 self.directory = directory
CoverageException: No data to report.
Run Code Online (Sandbox Code Playgroud)
如果你将你所拥有的任何东西包装#actual code在一个函数中,那么它就会起作用。这是一个(最小的)示例:
import coverage\n\ndef test_it(x):\n return x + 1\n\ncov = coverage.Coverage()\ncov.start()\n\ntest_it(123)\n\ncov.stop()\ncov.save()\n\ncov.html_report(directory=\'covhtml\')\nRun Code Online (Sandbox Code Playgroud)\n\n但是,如果您test_it(123)仅通过执行一些内联语句(例如x = 123; x += 1; print(x))来替换,那么覆盖率模块将会失败。
它隐藏得很好,但文档确实解释了这种行为:
\n\n\n\n\n开始()
\n\n开始测量代码覆盖率。
\n\n覆盖率测量仅发生在调用 start() 后调用的函数中。与 start() 相同范围内的语句将不会被测量。
\n\n一旦调用 start(),您最终还必须调用 stop(),否则您的进程可能无法彻底关闭。
\n
强调我自己的,这里是链接:https://coverage.readthedocs.io/en/v4.5.x/api_coverage.html#coverage.Coverage.start
\n| 归档时间: |
|
| 查看次数: |
2258 次 |
| 最近记录: |