首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只运行依赖于更改的测试。

只运行依赖于更改的测试。
EN

Stack Overflow用户
提问于 2021-05-05 09:31:36
回答 3查看 745关注 0票数 7

如何检测pytest需要运行的测试?

到目前为止,我在CI中进行了所有的测试。太慢了。

难道没有一种方法可以自动检测哪些测试需要运行,并且只执行整个测试套件的一小部分?

背景:我正在读谷歌SE ( Google )的书,还读到了他们巨大的单细胞体,他们的工具火焰可以检测到哪些测试需要运行。听起来很酷。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-05-14 19:09:11

我对pytest-testmon有很好的经验,它根据测试覆盖率确定要在代码更改上执行的测试子集。这方面的细节在确定受影响试验testmon文档中解释得很清楚,但一般的建议是保持高行/分支覆盖,以使testmon有效。这也意味着,如果coverage失败,它就会失败。

如果要在CI中使用它,则需要在测试作业之间缓存.testmondata数据库文件,并确保在调用pytest时使用--testmon arg。它也取决于您的CI提供者,但最流行的那些提供缓存机制(Github,Gitlab,CircleCI,Appveyor等)。

testmon还可以与pytest-watch看门狗有效地结合,以保持一个守护进程以运行测试执行。一个示例命令,用于重新运行代码更改的测试子集,并在成功或失败时发送系统通知:

代码语言:javascript
复制
$ pytest-watch --runner="pytest --testmon" \
  --onfail="notify-send --urgency=low -i error 'Tests Failed'" \
  --onpass="notify-send --urgency=low -i info 'Tests passed'"

您也可以使用Bazel进行构建和测试;但是,IMO对于纯Python项目来说是过分的,仅仅为了增量测试目的而不值得这样做。

票数 6
EN

Stack Overflow用户

发布于 2021-05-13 14:12:00

您可以为此使用pytest-增量插件,它使用AST分析项目的导入结构,并且只运行源代码已更改的测试。

代码语言:javascript
复制
pip install pytest-incremental
python -m pytest --inc

分析图表很容易看出,app中的更改只会导致执行test_app。而util中的更改将导致执行所有的测试。

从医生那里

票数 4
EN

Stack Overflow用户

发布于 2021-05-05 12:39:32

可以将@pytest.mark添加到测试中

代码语言:javascript
复制
@pytest.mark.SomeFeature
@pytest.mark.Regression
def test_example1(self):
    pass

@pytest.mark.AnotherFeature
@pytest.mark.Regression
def test_example2(self):
    pass

并在触发测试时使用它

代码语言:javascript
复制
pytest TestsFolder -m SomeFeature

这将只运行test_example1-m Regression将运行这两个测试。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67398655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档