Прежде всего, извините, если язык не на 100% правильный или что-то не имеет 100% смысла, я новичок в разработке веб-приложений и в целом публикую сообщения о переполнении стека.
У меня есть приложение web.py, и мне нужно проверить его функциональность с помощью pytest и создать отчет о покрытии кода с помощью pytest-cov
. Я заставляю тесты работать и подтверждаю ответы, но когда я генерирую отчет о коде, все строки кода внутри методов раскрываются, и поэтому я получаю очень низкое покрытие тестами (23%).
Я успешно запускаю pytest --cov
в своем репозитории через cmd и получаю в нем результат покрытия. Но затем я попытался использовать coverage run -m pytest test_Server.py
и запустить coverage report
, чтобы получить более подробную информацию.
В этом отчете я мог видеть, какие строки кода я пропустил, и я пропустил все из них, кроме определения каждого метода/класса.
Еще одна вещь, которую я пробовал, это pytest --cov=Server.py
, которая затем дает мне ошибку
Coverage.py warning: Module Server.py was never imported. (module-not-imported)
Coverage.py warning: No data was collected. (no-data-collected)
WARNING: Failed to generate report: No data to report.
Сервер.py
import os
import web
URLS = ("/", "Index")
APP = web.application(URLS, globals())
class Index:
"""
Just a test echo server.
"""
def POST(self):
web.header("Access-Control-Allow-Origin", "*")
data = web.data()
return data
test_Server.py
from paste.fixture import TestApp
import pytest
import os
import sys
sys.path.insert(1,(os.path.join(sys.path[0],'..'))) #adding parent path to import server script
import Server as lm
from Server import APP as app, Index
host = "localHost:9999"
class TestRig():
def test_server_setup(self):
middleware = []
testApp = TestApp(app.wsgifunc(*middleware))
try:
r = testApp.post("http://%s/" %host)
print ("request:", r.status)
assert r.status == 200
except TypeError:
print ("Request failed. Status:"+ r.status)
raise
Это очень упрощенная версия того, что я сейчас использую, и так или иначе мне удается заставить тесты работать и правильно утверждать ответы.
Я ожидаю, что код внутри методов будет покрыт тестами, но фактический вывод говорит мне, что покрыто только определение метода и ничего больше.
--cov=Server
.--cov
принимает полные имена, а не файлы.--cov=Server.py
будет означать поиск пакетаServer
и внутри него модуляpy
(файлpy.py
), которого у вас явно нет. - person hoefling   schedule 24.05.2019pytest --cov=Server
, покрытие на 100%. Пришлось добавить заголовокContent-Type
, чтобы удовлетворитьpaste
, но это не должно быть проблемой. Таким образом, с кодом, который вы разместили, нет проблем — попробуйте сократить свое приложение до минимально воспроизводимого примера и включите код в вашем вопросе. - person hoefling   schedule 24.05.2019pytest-cov
также может создавать отчеты, попробуйте, например.pytest --cov=Server --cov-report=term-missing --cov-report=html
, это распечатает таблицу покрытия в терминале и создаст файл отчета в формате HTML. - person hoefling   schedule 24.05.2019