当前位置: 首页 > 知识库问答 >
问题:

新闻报道如果是py,则py不包括脚本。测试从另一个目录执行它

阴高寒
2023-03-14

我得到了一个python脚本,它接受命令行参数,处理一些文件。我正在用py编写成功的测试。测试将此脚本置于其运行状态,并使用子流程执行它。呼叫

现在我想用coverage分析代码覆盖率。py。当通过pytest-cov插件(内置子流程处理)使用覆盖率时,当从使用py创建的临时测试目录调用脚本时,覆盖率不会看到/覆盖我的脚本。测试tmpdir夹具。Coverage在它所在的目录中调用我的脚本时(并且filename参数指向远程路径),确实可以看到我的脚本。

在这两种情况下,我的测试都通过了!覆盖范围3.6,pytest-2.3。5,pytest cov 1.6,均来自PyPi。

问:即使脚本在另一个目录中执行,我如何才能获得识别脚本的覆盖率?这是覆盖范围中的错误,还是不可能做到的事情?会感到惊讶,如果后者,毕竟,tmpdir是一个股票机制的py.test....

最小示例:

我有一个脚本我的脚本。py仅回显文件arg\u文件的内容。txt通过命令行参数提供。在两个不同的测试中,一次在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
Command: /home/cbuchner/pytest_experiment/my_script.py arg_file.txt
--Contents of arg_file.txt--

.

================================= 2 passed in 0.06 seconds =================================

新闻报道:

~/pytest_experiment$ py.test --cov=my_script.py tests/test_in_scriptdir.py=================================== test session starts ====================================
platform linux2 -- Python 2.7.4 -- pytest-2.3.5
plugins: cov
collected 1 items 

tests/test_in_scriptdir.py .
--------------------- coverage: platform linux2, python 2.7.4-final-0 ----------------------
Name        Stmts   Miss  Cover
-------------------------------
my_script       3      0   100%

================================= 1 passed in 0.09 seconds =================================
~/pytest_experiment$ py.test --cov=my_script.py tests/test_in_tmpdir.py=================================== test session starts ====================================
platform linux2 -- Python 2.7.4 -- pytest-2.3.5
plugins: cov
collected 1 items 

tests/test_in_tmpdir.py .Coverage.py warning: No data was collected.

--------------------- coverage: platform linux2, python 2.7.4-final-0 ----------------------
Name    Stmts   Miss  Cover
---------------------------

================================= 1 passed in 0.09 seconds =================================

文件在这里:https://gist.github.com/bilderbuchi/6412754

编辑:有趣的是,当使用-s运行覆盖率测试时,也有更奇怪的输出覆盖率警告没有收集数据,而显然它是收集的,并且在tmpdir测试中警告模块my_script.py从来没有进口过。

~/pytest_experiment$ py.test -s --cov=my_script.py tests/test_in_scriptdir.py
=================================== test session starts ====================================
platform linux2 -- Python 2.7.4 -- pytest-2.3.5
plugins: cov
collected 1 items 

tests/test_in_scriptdir.py 
set_up: In directory /tmp/pytest-63/test_10
Running in directory /home/cbuchner/pytest_experiment
Command: ./my_script.py /tmp/pytest-63/test_10/arg_file.txt
--Contents of arg_file.txt--

Coverage.py warning: No data was collected.
.
--------------------- coverage: platform linux2, python 2.7.4-final-0 ----------------------
Name        Stmts   Miss  Cover
-------------------------------
my_script       3      0   100%

================================= 1 passed in 0.09 seconds =================================
~/pytest_experiment$ py.test -s --cov=my_script.py tests/test_in_tmpdir.py=================================== test session starts ====================================
platform linux2 -- Python 2.7.4 -- pytest-2.3.5
plugins: cov
collected 1 items 

tests/test_in_tmpdir.py 
set_up: In directory /tmp/pytest-64/test_10
Running in directory /tmp/pytest-64/test_10
Command: /home/cbuchner/pytest_experiment/my_script.py arg_file.txt
--Contents of arg_file.txt--

Coverage.py warning: Module my_script.py was never imported.
Coverage.py warning: No data was collected.
Coverage.py warning: Module my_script.py was never imported.
Coverage.py warning: No data was collected.
.Coverage.py warning: No data was collected.

--------------------- coverage: platform linux2, python 2.7.4-final-0 ----------------------
Name    Stmts   Miss  Cover
---------------------------

================================= 1 passed in 0.09 seconds =================================

共有3个答案

宇文良骏
2023-03-14

根据这个博客:https://thomas-cokelaer.info/blog/2017/01/pytest-cov-collects-no-data-on-travis/

您应该添加所有的\uuuu init\uuu。py测试文件夹中的文件!这个解决方案对我有效。

东方化
2023-03-14

当测量的脚本从另一个目录运行时,这是一个相对路径混淆覆盖率的问题。覆盖率结果文件最终位于该目录中,而不是项目的根目录。

为了解决这个问题,我停止使用pytestcov,而是使用纯coverage。我在相关的地方使用了完整路径而不是相对路径。

因此,例如,通过export coverage\u PROCESS\u START=/full/path/to/定义启用子流程覆盖所需的环境变量。coveragerc。在中。coveragerc,通过

     [run]
     data_file = /full/path/to/.coverage

而且,任何--Source--all选项都应该使用完整路径。然后就有可能得到正确的覆盖测量。

邹嘉荣
2023-03-14

我在打电话给“py.test时也遇到了同样的问题...”来自毒理。我在这个页面上发现了一个提示:http://blog.ionelmc.ro/2014/05/25/python-packaging/尽管它没有明确提到这一点。使用tox的“开发”将确保覆盖数据收集是从与覆盖分析相同的目录中调用的。tox.ini的这一节让我有了一个覆盖的测试环境:

[tox]
envlist = ...,py34,cov

[testenv:cov]
# necessary to make cov find the .coverage file
# see http://blog.ionelmc.ro/2014/05/25/python-packaging/
usedevelop = true
commands = py.test --cov=<MODULE_NAME>
deps = pytest pytest-cov
 类似资料:
  • 问题内容: 我有这种文件结构(目录和箭头文件之后): 主要: 型号目录: 报告目录: 现在,我想导入,但是我尝试做的错误是没有这样的模块。 我尝试了这个: 然后: 看起来这两个文件夹没有看到对方。从其他目录导入文件的方式是什么?我需要在 init .py文件中指定一些其他导入吗? 问题答案: 您可以在运行时添加到系统路径: 到目前为止,这是最简单的方法。

  • 本文向大家介绍如何在python中执行另一个py文件,包括了如何在python中执行另一个py文件的使用技巧和注意事项,需要的朋友参考一下 使用命令:os.system('python file_name.py') 解释:os.system是执行当前的系统命令 1、拿windows系统举例: 2、linux: 其他方法: execfile('xx.py'),括号内为py文件路径; 如果专需要传参数

  • 问题内容: 我有一个验收测试用例,结果是纯文本。我想使用Jenkins来显示结果,并且JUnit格式适合我。 因此,我想检查是否存在用于生成JUnit格式XML的python代码,以便可以轻松添加我的解析代码。 问题答案: 我发现一个python模块https://bitbucket.org/db_atlass/python-junit-xml-output- module/ ,看起来很适合我的需

  • 我想执行我开发的三个python脚本。我发现了一个疑问,我怎么能使用python脚本呢? 我想把它转换成一个。因为我们的解决方案被认为是在没有安装python的机器上执行的,所以有一个独特的脚本会很有帮助。 编辑:我不知道我的老问题结束的原因,我知道如何使用pyinstaller,我的问题是如何使用python脚本执行3 python,或者如果可能的话。请,如果你要结束一个问题,请确保该问题是重复

  • 在tests目录中有两个子目录,如tests/api和tests/sanity。注:测试/api已完成测试。希望找到输入的py。tests/api目录中的conf。注意:从测试/api运行测试工作正常。但从父目录测试运行测试,失败原因是:py。测试——测试选项=输入。conf用法:py。测试[选项][文件或目录][文件或目录][…] py.test:错误:没有这样的选项:--test_option

  • 现有结构:src/test/java-- 更新:我也尝试了构建助手插件 现在,如果我运行“测试”目标,我看到添加了C:\Developer\Code\myProj\rc\test\groovy。 但是我没有看到任何为groovy文件生成的类。 最后的答案,感谢@khmarbaise,我刚刚升级了版本,并删除了GMaven编译