问题描述
所有内容均从此处开始:https://github.com/pytest-dev/pytest-cov/issues/425
我现在可以说我的终端上有一个可行的解决方案,所以当我运行时:
pytest --cov views --cov db --cov-report term-missing:skip-covered -sv
==================== test session starts ====================
platform darwin -- Python 3.7.6,pytest-5.4.3,py-1.9.0,pluggy-0.13.1 -- /usr/local/Caskroom/miniconda/base/bin/python
cachedir: .pytest_cache
rootdir: /Users/alan/myproject
plugins: xdist-1.33.0,forked-1.2.0,cov-2.10.0
collected 46 items
tests/test_admin.py::test_attempt_create_user PASSED
tests/test_auth.py::test_login_logout * Serving Flask app "views" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production Wsgi server instead.
* Debug mode: off
2020-09-03 18:26:26,157-INFO-werkzeug::_internal|113:: * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
PASSED
...
---------- coverage: platform darwin,python 3.7.6-final-0 -----------
Name Stmts Miss Cover Missing
-----------------------------------------------------------
views/general.py 52 2 96% 111,113
views/helpers.py 18 11 39% 10-14,18-24
views/individual.py 218 113 48% 49-68,74-125,129-139,145-155,190,336-382,386-393,400-428
views/save_configuration.py 34 23 32% 17-44
views/users.py 128 104 19% 18-37,52-90,96-140,144-155,159-164,168-173,177-184
views/variant.py 61 5 92% 34-36,74-75
-----------------------------------------------------------
TOTAL 985 258 74%
11 files skipped due to complete coverage.
我可以看到覆盖范围正确报告。
现在我正试图在Eclipse/PyDev
中使用它。
基本上,在运行Eclipse:Run:Run As:Python unit-test
使用本地pytest插件(fix_api.py)进行的测试基本上不会抱怨它等待应用程序服务启动并且超时。
@pytest.fixture(scope="session")
def app_server():
with TestProcess("python","application.py") as app_server:
> wait_for_strings(app_server.read,10,"Running")
../Programmes/myproject/tests/fix_api.py:17:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
cb = <bound method BufferingBase.read of TestProcess(pid=78818,is_alive=False)>
seconds = 10,strings = ('Running',),start = 1599149418.9482582
buff = ' File "/usr/local/Caskroom/miniconda/base/lib/python3.7/site.py",line 177\n file=sys.stderr)\n ^\nSyntaxError: invalid Syntax\n'
check_strings = ['Running']
def wait_for_strings(cb,seconds,*strings):
"""
This checks that *string appear in cb(),IN THE GIVEN ORDER !
"""
start = time.time()
while True:
buff = cb()
check_strings = list(strings)
check_strings.reverse()
for line in buff.splitlines():
if not check_strings:
break
while check_strings and check_strings[-1] in line:
check_strings.pop()
if not check_strings:
return
if time.time() - start > seconds:
break
time.sleep(0.05)
raise AssertionError("Waited %0.2fsecs but %s did not appear in output in the given order !" % (
> seconds,check_strings
))
E AssertionError: Waited 10.00secs but ['Running'] did not appear in output in the given order !
/usr/local/Caskroom/miniconda/base/lib/python3.7/site-packages/process_tests.py:247: AssertionError
对我来说,最重要的功能是能够使用Eclipse中的“代码覆盖率”视图,并能够快速查看未覆盖的代码。
如果我无法使用两个独立的进程进行pytest进行覆盖,我想知道如何在终端中运行时为PyDev加载coverage.xml
文件,例如:
pytest --cov views --cov db --cov-report xml:coverage.xml -sv
“代码覆盖率”视图具有“打开cov”按钮,但它没有实现我希望的功能,也没有从本地.coverage
文件中进行“刷新”加载。
因此,如果有人可以在此给出如何使其工作的任何提示,将不胜感激。
解决方法
在PyDev方面,代码覆盖率信息是从特定目录加载的。
在代码覆盖率视图中,有一个Open cov dir
(参见下图),必须放置覆盖率内容(我可以看到PyDev设置了--coverage_output_dir
和--coverage_include
-{{3 }} –在命令行中,当您设置Enable code coverage for new launches?
并已经选择要分析的目录时,因此,如果您是在PyDev内部运行测试,则应该可以立即使用。)
现在,如果从终端运行它,则必须在运行测试时从命令行进行设置。
PyDev coverage目录中的文件应命名为:.coverage.<xxx>
(然后在Refresh
上,PyDev将收集以.coverage.
开头的所有多个文件,并将它们合并为一个文件.coverage
,然后将其用于显示PyDev内部的覆盖率信息。
因此,您需要做的是使生成的coverage文件在适当的位置创建(应该可以从PyDev运行,也可以使用适当的命令行参数在PyDev coverage目录中创建文件。然后手动刷新)。