Интеграция сгенерированных из командной строки файлов .coverage python с PyDev

Моя среда сборки настроена на компиляцию, запуск и создание файла покрытия в командной строке (используя инструмент Ned Batcheldercoverage.py).

Я использую Eclipse с PyDev в качестве редактора, но по практическим причинам мне невозможно/неудобно конвертировать всю мою среду сборки в Eclipse (и, таким образом, генерировать данные покрытия непосредственно из IDE, как это и было задумано)

Похоже, что PyDev использует тот же инструмент покрытия (или что-то очень похожее на него) для создания информации о покрытии, поэтому я предполагаю, что должен быть какой-то способ интеграции моих внешних файлов покрытия в Eclipse/PyDev.

Любая идея о том, как это сделать?


person Kena    schedule 17.11.2008    source источник


Ответы (2)


Мне нужно было что-то подобное некоторое время назад, когда PyDev все еще использовал более старую версию coverage.py, чем та, которая доступна на странице создателя скрипта.

Что я сделал, так это обнаружил, где PyDev сохраняет свой файл .coverage. Для меня это было:

 C:\Users\Admin\workspace\.metadata\.plugins\org.python.pydev.debug\.coverage

Затем я вручную запустил новую версию coverage.py из отдельного скрипта и сказал ей сохранить свой файл .coverage в том месте, где PyDev сохраняет свой. Я не могу вспомнить, есть ли аргумент командной строки для coverage.py или я просто скопировал файл .coverage с помощью сценария, но после этого, если вы просто откроете Просмотр результатов покрытия кода и щелкните Обновите информацию о покрытии!, PyDev прекрасно обработает данные, как если бы он сам создал файл.

person DzinX    schedule 28.01.2009
comment
Для меня это сработало для действительно большого (20+ KLOC) проекта с большим количеством наборов тестов. - person DzinX; 29.01.2009

Я ничего не знаю об интеграции PyDev с файлом cover.py (и использует ли он покрытие.py), но файлы .coverage довольно просты. Это маршалированные словари.

Я не тестировал этот код, но вы можете попробовать объединить два файла .coverage в один:

import marshal
c1_dict = marshal.load(open(file_name_1, 'rb'))
c2_dict = marshal.load(open(file_name_2, 'rb'))
c1_dict.update(c2_dict)
marshal.dump(c1_dict, open(file_name_out, 'wb'))
person Ned Batchelder    schedule 18.11.2008
comment
Хотелось бы, чтобы вы и DzinX ответили как принятые, поскольку ваше понимание файлов .coverage помогло решить часть моей проблемы. Это более прямой ответ на мой вопрос, так что он получит репутацию, но и вы ее заслужили. - person Kena; 29.01.2009