Как использовать покрытие Python внутри кода - PullRequest
0 голосов
/ 25 октября 2018

Я хочу захватить покрытие внутри кода.Я попробовал ниже одного, но получаю ошибку.Ссылка ниже для покрытия 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')

получение ошибок ниже

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.

1 Ответ

0 голосов
/ 25 октября 2018

Если вы поместите в функцию все, что у вас есть для #actual code, то это сработает.Вот (минималистичный) пример:

import coverage

def test_it(x):
    return x + 1

cov = coverage.Coverage()
cov.start()

test_it(123)

cov.stop()
cov.save()

cov.html_report(directory='covhtml')

Однако, если вы замените test_it(123), просто выполнив какое-то встроенное выражение (например, x = 123; x += 1; print(x)), модуль покрытия завершится неудачей.

Это хорошо скрыто, но документы действительно объясняют это поведение:

start ()

Начало измерения покрытия кода.

Измерение покрытия происходит только вфункции, вызываемые после запуска start ().Операторы в той же области, что и start (), не будут измеряться.

После того, как вы вызовете start (), вы также должны в конце концов вызвать stop (), иначе ваш процесс может не завершиться корректно.

Подчеркну свое, вот ссылка: https://coverage.readthedocs.io/en/v4.5.x/api_coverage.html#coverage.Coverage.start

...