【问题标题】:Python unittest, running only the tests that failedPython unittest,只运行失败的测试
【发布时间】:2017-10-12 02:01:33
【问题描述】:

我有一个使用 unittest 从命令行运行的大型 python 测试文件。有些测试需要一段时间才能运行。这是一个轻微的痛点,因为我通常只关心我添加的最后一个测试。我想要的是这样的:

  1. 添加测试。
  2. 运行测试(一个失败是因为我没有编写代码让它通过)
  3. 实现行为
  4. 只运行上次失败的测试
  5. 修复我在实现代码时犯的愚蠢错误
  6. 只运行这次通过的失败测试
  7. 运行所有测试以找出我破坏了什么。

是否可以从命令行执行此操作?

【问题讨论】:

  • 将单元测试分成单独的文件最有可能解决您的问题。
  • 这将如何工作?我仍然需要 python 知道哪些文件有效,哪些文件无效......
  • 可以,但您需要自己创建。您可以导入unittest,运行发现,收集失败的测试,然后只执行那些。但是您必须创建自己的 CLI。

标签: python unit-testing tdd


【解决方案1】:

(不是完全自动化的解决方案,但比现有解决方案更好)

如果您将测试类的名称作为参数传递给测试脚本,则只会运行该测试。例如,如果您只想在脚本test_whatever.py 中的MyTest 类中运行测试:

python3 test_whatever.py MyTest

您还可以将单个测试指定为该类的成员。例如,假设您要在 MyTest 类中运行测试 test_something

python3 test_whatever.py MyTest.test_something

【讨论】:

  • 投了赞成票,因为这让我大部分时间都在那里 - 会暂时保持开放,以防有人有我们还没有看到的非常方便的东西:)
【解决方案2】:

每个测试函数的声明如下:

    def test_something_something(self):

如果前面加下划线,比如:

    def _test_something_something(self):

该测试将被忽略。您可以做的一件事是快速发送find and replace in vim。找到所有“test_”并将它们替换为“_test_”,然后找到一个失败的测试并删除下划线。

【讨论】:

    【解决方案3】:

    只需使用 --last-failed 选项运行测试(您可能需要 pytest)

    【讨论】:

    • 这不是一个选项!
    • @chiktin 根据文档docs.pytest.org/en/latest/cache.html 该插件提供了两个命令行选项来重新运行上次 pytest 调用的失败:--lf、--last-failed - 仅重新运行失败。 --ff, --failed-first - 先运行失败,然后运行其余测试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多