简体   繁体   中英

Python - InvocationError in tox running py.test and coverage test

My project has the following structure:

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

The tests.py file contains the tests for all the function in files client.py, server.py, sql_database.py, core_functions.py

Next, I created the tox.ini file which I want to use for automation of py.tests and coverage tests . The structure of the tox.ini file is as follows:

[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

When I run in the command line tox the py.tests succeed, but the coverage tests fail with the following error:

============== 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

How can I fix my tox.ini file to make it work?

The problem is the difference between your two invocations.

In [testenv] you're essentially calling:

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

But the equivalent with coverage you're just running:

py.test

py.test with no arguments will recurse from the current directory and attempt to discover tests. This generally isn't what you want (you don't care about testing the stdlib, and all the dependencies you've added to a virtualenv, etc.)

If you add your arguments from your other invocation to your coverage line it will act as you want:

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

如果在一些修改后发生这种情况,您可以删除.lock文件并让tox再次创建它。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM