[英]Py.test running very slowly (and not at all with some Python3 statements)
[英]py.test running Python2 and Python3
我编写了一个可同时在Python2和Python3上运行的包( http://github.com/anntzer/parsedcmd )。 但是,我不得不为Python2和Python3编写单独的(py.test)单元测试(主要是因为我想测试Python3的其他功能,特别是仅关键字参数),所以我有一个test_py2.py
和test_py3.py
在test
子包中。 现在,如果我运行,请说py.test2 mypkg
, test_py2
通过,但是test_py3
失败,并出现SyntaxError
。 同样,对于py.test3 mypkg
, test_py3
通过但test_py2
失败(不过我可以使这一工作正常,这只是StringIO
移至io
)。
我可以设计test
子包,以便import mypkg.test
仅导入测试的正确版本,但显然py.test不在乎-它只看到两个匹配test_*
文件,并抓住了它们中的所有测试,而忽略了__init__.py
告诉他要导入的内容。
所以现在我必须同时执行py.test2 mypkg/test/test_py2.py
和py.test3 mypkg/test/test_py3.py
。 有没有办法设置整个东西,以便py.test2 mypkg
和py.test3 mypkg
可以“正常工作”?
谢谢。
然后,如果可以使您的模块可在所有解释器上导入,并适当地跳过测试,则是常见的解决方案。 否则,您可以将以下内容作为“ conftest.py”放入测试目录:
import sys
py3 = sys.version_info[0] >= 3
class DummyCollector(pytest.collect.File):
def collect(self):
return []
def pytest_pycollect_makemodule(path, parent):
bn = path.basename
if "py3" in bn and not py3 or ("py2" in bn and py3):
return DummyCollector(path, parent=parent)
这将获得一个特定于项目的插件,并将正确地忽略测试模块,该模块的文件名包含在错误的解释器版本上的“ py2”或“ py3”子字符串。 当然,您可以对其进行优化,以使其直接在conftest.py文件中具有一个显式列表,而不用检查文件名etc.pp。
霍尔格(Holger)
您可以将测试放入不同的程序包中,并仅在适当的程序包中运行测试。 或者,您可以在脚本中加载适当的测试模块:
import sys, unittest
cur_version = sys.version_info
if cur_version[0] < 3:
import myApp.test.test_py2
unittest.TestLoader().loadTestsFromModule(myApp.test.test_py2).run()
else:
import myApp.test.test_py3
unittest.TestLoader().loadTestsFromModule(myApp.test.test_py3).run()
或者,使用setup.py
文件,以便您可以运行:
python setup.py test
并在其中放置版本控制逻辑:
versionedTestSuite = "parsedcmd.test.test_py2" # do something as above here
setup(name='parsedcmd',
...
test_suite=versionedTestSuite,
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.