[英]tox/pytest tests pass/fail depending on whether another module is installed in host environment
我有许多使用tox
部署的pytest
测试,它们安装了模块的旧版本,然后将其导入,然后安装了该模块的新版本。 测试检查升级已加载的模块会引发警告(告诉用户重新启动会话/解释器)。
我的问题是测试是否成功取决于主机环境中是否安装了模块的旧版本(例如pip install --user random_module && tox
或pip uninstall random_module && tox
)。 我很惊讶地发现测试对我在用户中安装的内容敏感。 这是怎么回事,以及如何避免这种交互作用,以便无论用户的site-packages
安装了什么软件,测试都可以相同地运行?
我正在为pip编写包装程序包,以允许从REPL / console / script内部安装程序包 。 这带来的一个复杂情况是,有人可能已经加载了模块,然后安装了升级,但是旧版本将保留在内存中。 在这些情况下,我需要警告用户,他们需要重新启动会话才能使新安装生效。
在失败/通过之间切换的两个测试的问题是progress
包的安装未在测试运行之间回滚。 一种可能的解决方案是通过运行tox --recreate
强制tox
重新创建虚拟tox --recreate
,如您在注释中所建议。 另一个可能是在夹具中实现回滚,例如
@pytest.fixture
def rollback_progress_package():
yield # wait for the test to finish
subprocess.run(['pip', 'install', '--force-reinstall', 'progress==1.5'])
@pytest.mark.usefixtures('rollback_progress_package')
def test_progress_already_loaded_warning():
...
这具有很好的效果,即可以在测试运行之间进行回滚,而在重新创建虚拟环境时,不仅可以在每次运行中进行回滚。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.