2017-07-03 134 views
-1

我的项目有以下结构:的Python - InvocationError在TOX运行py.test和覆盖测试

my_project 
| 
setup.py 
tox.ini 
src 
    | 
    core_functions.py 
    client.py 
    server.py 
    sql_database.py 
    tests.py 

tests.py文件包含在文件client.py, server.py, sql_database.py, core_functions.py

下一页所有功能测试,我创建我想用于py.testscoverage tests的自动化的tox.ini文件。该tox.ini文件的结构如下:

[tox] 
envlist = py27,cov 

[testenv] 
commands = py.test -sv --doctest-modules my_project/__init__.py my_project/tests.py 


[testenv:py27] 
commands = coverage erase 
      coverage run --source=my_project -m pytest 
      coverage report -m 
deps = pytest 

当我在命令行tox的py.tests成功运行,但覆盖测试失败,出现以下错误:

============== test session starts =================== 
platform darwin -- Python 2.7.13, pytest-3.1.1, py-1.4.33, pluggy-0.4.0 
rootdir: /Users/xyz/Documents/ProjectGit/MyProject/my_project, inifile: 
plugins: cov-2.5.1 
collecting 10334 items/167 errorsERROR: InvocationError: 
'/Users/xyz/Documents/ProjectGit/MyProject/my_project/.tox/py27/bin/coverage run --source=my_project -m pytest' 
cov inst-nodeps: /Users/xyz/Documents/ProjectGit/MyProject/my_project/.tox/dist/my_project-0.0.1.zip 
cov installed: asn1crypto==0.22.0,attrs==17.2.0,Automat==0.6.0,bitarray==0.8.1,boto3==1.4.4, 
botocore==1.5.59,cffi==1.10.0,constantly==15.1.0,coverage==4.4.1,cryptography==1.9, 
cycler==0.10.0,docutils==0.13.1,enum34==1.1.6,Fabric==1.13.2,functools32==3.2.3.post2, 
future==0.16.0,futures==3.1.1,idna==2.5,incremental==17.5.0,ipaddress==1.0.18,jmespath==0.9.3, 
my_project==0.0.1,matplotlib==2.0.2,msgpack-python==0.4.8,numpy==1.12.1,paramiko==2.1.2, 
Paver==1.2.4,petlib==0.0.41,py==1.4.33,pyasn1==0.2.3,pybloom==1.1,pycparser==2.17, 
pyparsing==2.2.0,pytest==3.1.1,pytest-cov==2.5.1,python-dateutil==2.6.0,pytz==2017.2, 
s3transfer==0.1.10,scapy==2.3.3,scipy==0.19.0,six==1.10.0,sphinxmix==0.0.6, 
subprocess32==3.2.7,Twisted==17.1.0,zope.interface==4.4.1 
cov runtests: PYTHONHASHSEED='3903710496' 
cov runtests: commands[0] | py.test -sv --doctest-modules my_project/__init__.py my_project/tests.py 

我如何修复我的tox.ini文件以使其工作?

+0

我没有看到任何错误。复制/粘贴不足? – phd

+0

@phd看看以'收集10334个项目/ 167个错误ERROR'开始的行# – Ziva

+0

啊,对不起。似乎pytest在进口时发现了167个错误。 pytest测试通过没有tox? – phd

回答

1

问题是你的两个调用之间的差异。

[testenv]你基本上美其名曰:

py.test -sv --doctest-modules my_project/__init__.py my_project/tests.py 

但等效采用覆盖你只是运行:

py.test 

py.test不带参数会从当前目录,并尝试递归发现测试。这通常不是你想要什么(你不关心测试STDLIB,和所有的依赖,你已经加入的virtualenv等)

如果您从其他调用添加参数您的覆盖范围行将按照您的意愿行事:

coverage run --source=my_project -m pytest -sv --doctest-modules my_project/__init__.py my_project/tests.py 
相关问题