对于Jedi,我们想要生成我们的测试覆盖率.stackoverflow中有一个相关的问题,但它没有帮助.
我们使用py.test作为测试运行器.但是,我们无法将导入和其他"导入"内容添加到报表中.例如__init__.py,始终报告为未被发现:
Name Stmts Miss Cover
--------------------------------------------------
jedi/__init__ 5 5 0%
[..]
Run Code Online (Sandbox Code Playgroud)
显然,此文件正在导入,因此应报告为已测试.
我们开始这样的测试[*]:
py.test --cov jedi
Run Code Online (Sandbox Code Playgroud)
如你所见,我们正在使用pytest-coverage.
那么如何正确计算文件的覆盖范围__init__.py呢?
[*]我们还尝试在没有--doctest-modules(从中删除pytest.ini)的情况下启动测试并在之前激活覆盖模块py.test -p pytest_cov --cov jedi.它们都不起作用.
我提供了赏金.请尝试在Jedi内修复它.它是公开的.
我有一个python脚本,它接受命令行参数,使用一些文件.我正在编写成功的测试,py.test将这个脚本放在其脚本中,并执行它subprocess.call.
现在我想分析代码覆盖率coverage.py.覆盖范围,通过使用时pytest-cov的插件(其中有子装卸内置),没有看到/覆盖我的剧本时,它从创建一个临时目录测试名为py.test的tmpdir夹具.Coverage 在其所在的目录中调用时会看到我的脚本(并且filename参数指向远程路径).
在这两种情况下,我的测试通过!覆盖范围3.6,pytest-2.3.5,pytest-cov 1.6,全部来自PyPi.
问题:即使在另一个目录中执行脚本,如何识别我的脚本?这是覆盖范围内的错误,还是一些无法做到的事情?如果后者毕竟tmpdir是py.test的股票机制,那会感到惊讶......
最小的例子:
我有一个脚本my_script.py,它只是回应arg_file.txt通过命令行参数提供的文件的内容.在两个不同的测试中,这一次在a中调用tmpdir,一次在脚本的位置调用.两个测试都通过了,但是在tmpdir测试中,我没有得到任何覆盖信息!
测试运行:
~/pytest_experiment$ py.test -s
=================================== test session starts ====================================
platform linux2 -- Python 2.7.4 -- pytest-2.3.5
plugins: cov
collected 2 items
tests/test_in_scriptdir.py
set_up: In directory /tmp/pytest-52/test_10
Running in directory /home/cbuchner/pytest_experiment
Command: ./my_script.py /tmp/pytest-52/test_10/arg_file.txt
--Contents of arg_file.txt--
.
tests/test_in_tmpdir.py
set_up: In directory /tmp/pytest-52/test_11
Running in directory /tmp/pytest-52/test_11 …Run Code Online (Sandbox Code Playgroud)