找到虫子快10倍
pytest-testmon的Python项目详细描述
这是一个pytest插件,它只自动选择并重新执行受最近更改影响的测试。在python这样的动态语言中,这是如何实现的?它有多可靠?请阅读:Determining affected tests
用法
pip install pytest-testmon # build the dependency database and save it to .testmondata pytest --testmon # change some of your code (with test coverage) # only run tests affected by recent changes pytest --testmon # start from scratch (if needed) rm .testmondata # automatic re-execution on every file change with pytest-watch (https://github.com/joeyespo/pytest-watch) pip install pytest-watch ptw -- --testmon
其他开关
–project directory=coveragepy只跟踪此目录下的文件。默认为rootdir,可以重复
配置
将testmon添加到pytest.ini中
[pytest] # If you want to separate different environments running the same sources. run_variant_expression = os.environ.get('DJANGO_SETTINGS_MODULE') + ':python' + str(sys.version_info[:2]) addopts = --testmon # you can make --testmon a default if you want
可以编写更复杂的run_variant_表达式:os,sys和 hashlib模块可用,并且有一个助手函数md5 将返回hashlib.md5(s.encode()).hexDigest()。
配置子流程跟踪
如果您的测试套件使用子流程,testmon将支持此功能。您只需配置python+覆盖率 这样覆盖挂钩在每个python进程启动时执行。您可以通过安装 覆盖率
pip install coverage_pth
如果有任何问题,您仍然可以配置pythonmanually。
故障排除-常见问题
testmon选择太多要执行的测试:根据您的更改,很可能是 是故意的。如果更改了方法参数名,则可以有效地更改整个层次结构 参数->;方法->;类->;模块,因此使用该模块中任何内容的任何测试都将 重新执行。
在testmon下运行时测试失败:testmon不太可能影响执行 测试本身。但是,使用testmon取消选择并执行的测试集是高度可变的, 这意味着testmon可能会公开不需要的测试依赖项。请修复您的测试套件。
如果您的测试在没有testmon的pytest cov(coverage)下受到影响,也可以尝试。用于报告 一个描述意外行为的存储库是最好的,但是请不要犹豫 即使您的项目是封闭源代码,也要报告。我们会努力解决的!
路线图
testmon正在接近完整性。不幸的是,即使没有testmon,经典的控制台ui也达到了可用性的极限。 使用testmon,要确定哪些测试正在执行、哪些测试失败以及为什么失败,就更加困难了。 下一步将是gui的实现或集成。我不喜欢任何现有的图形测试跑者,所以 如果你有更好的新概念,请联系!
想法
单独的测试结果依赖于很多东西,所以让我们写一点关于其中一些的东西。
- 在测试项目中执行的python代码(可能变化非常频繁,一点一点地变化)
- 环境变量(例如django_settings_模块)、python版本(run_variant_expression config值表示这些)
- 在所有libraries中执行的python代码(可能很少更改)
- 数据文件(txt、xml、其他项目资产)
- 外部服务(通过网络连接)
testmon到目前为止,它处理面对1时增量运行的测试。和2。变更类别。
以后的版本可以实现对其他类别的某些检测
libraries:我们可以比较运行之间的pip freeze,但是速度很慢
数据文件:这里最好的选择可能是一种配置,开发人员可以指定进行测试所依赖的文件
赞助商
非常感谢Qvantel,Nick Coghlan 、Abilian SAS和Infinit作为testmon第一个发行版的银级赞助商。我们竞选活动的所有贡献者名单是here。非常感谢所有的贡献者。