运行tox时出现Python调用错误py.测试和覆盖率测试

2024-10-01 11:32:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我的项目有以下结构:

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中所有函数的测试

接下来,我创建了tox.ini文件,我想用它来自动化py.tests和{}。的结构毒性试验文件如下:

^{pr2}$

当我在命令行中运行tox时py.测试成功,但覆盖测试失败,错误如下:

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

我怎样才能修复我的毒性试验文件让它工作?在


Tags: 文件pyprojecttoxpytestmymyprojecttests
1条回答
网友
1楼 · 发布于 2024-10-01 11:32:16

问题是两次调用之间的区别。在

[testenv]中,您实际上是在调用:

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

但与你刚刚运行的覆盖率相当:

^{pr2}$

不带参数的py.test将从当前目录递归并尝试发现测试。这通常不是您想要的(您不关心测试stdlib,以及添加到virtualenv的所有依赖项,等等)

如果您将其他调用中的参数添加到覆盖范围行中,则它将按您所需的方式运行:

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

相关问题 更多 >