Python 什么';pytest缓存背后的想法是什么?

Python 什么';pytest缓存背后的想法是什么?,python,testing,pytest,Python,Testing,Pytest,它似乎是一个缓存func/args->result对的工具,甚至可以在testsuite运行之间持久化它们。这似乎是一个加快速度的好主意。然而,我没有注意到有人提到自动检测函数源代码的更改并使相应的缓存项无效。这似乎违背了运行测试套件的目的,因为测试代码的更改不会被反映出来。似乎pytest的目的是促进只运行在上一次运行中失败的测试。这可能会让您将测试运行的重点放在正在被积极修改的代码上,直到这些测试工作为止,此时您应该清除缓存或使用--ff选项再次运行所有测试。pytest cache做两件事


它似乎是一个缓存func/args->result对的工具,甚至可以在testsuite运行之间持久化它们。这似乎是一个加快速度的好主意。然而,我没有注意到有人提到自动检测函数源代码的更改并使相应的缓存项无效。这似乎违背了运行测试套件的目的,因为测试代码的更改不会被反映出来。

似乎
pytest
的目的是促进只运行在上一次运行中失败的测试。这可能会让您将测试运行的重点放在正在被积极修改的代码上,直到这些测试工作为止,此时您应该清除缓存或使用
--ff
选项再次运行所有测试。

pytest cache
做两件事:

  • 提供一种机制,其他插件可以通过
    config.cache.get | set
    获取/设置值。例如,
    pytest-pep8
    pytest-flakes
    使用它来存储上次检查的mtime,以避免一直重新检查文件

  • 存储测试失败,以便您可以运行
    --lf
    仅运行最后的失败,并运行
    --ff
    先运行最后的失败,然后运行其余的测试

该功能将通过
pytest-2.7
(今天尚未发布)或后续版本移动到核心。在中,所做的更改之一是:

社区反馈后,默认缓存目录已从
.cache
重命名为
.pytest\u cache
,该名称.cache未明确表明pytest使用了该目录

根据说明,
pytest缓存
集成在
pytest 2.8
中,该插件提供了两个命令行选项来重新运行上次pytest调用的失败:

  • --lf,-last failed
    -仅重新运行故障
  • --ff,--failed first
    -首先运行失败,然后运行其余测试。 对于清理(通常不需要),一个
    --cache clear
    选项允许在测试运行之前删除所有跨会话缓存内容

由于
pytest
version 3.8.1(2018-09-22)
。pytest\u缓存
目录包含自己的
。gitignore
文件,Git会自动忽略它。()

另请注意,显示缓存状态的命令现在是
pytest--cache show
,因为
pytest
3.8.1(2018-09-22)
。pytest\u cache
目录包含自己的
.gitignore
文件,并且被Git.EvgenKo423自动忽略,谢谢,我刚刚更新了我的答案。如下所述,这现在是一个名为
cacheprovider
的标准
pytest
插件。