写在前面:
程序:

import pytest
import time
class TestClass_10000():
    def setup_method(self):
        print ("setup ---->")

    def teardown_method(self):
        print ("teardown ---->")

    def test_one(self):
        print ("here is test_one")
        assert 1 == 2

在终端执行的命令:
pytest test_collection/test_collection01/test_01.py::TestClass_10000::test_one --html report.html --reruns 1
测试平台信息:
Packages {"pluggy": "1.0.0", "py": "1.11.0", "pytest": "7.1.2"}
Platform macOS-10.16-x86_64-i386-64bit
Plugins {"forked": "1.4.0", "html": "3.1.1", "metadata": "2.0.1", "parallel": "0.0.10", "rerunfailures": "10.2", "xdist": "2.5.0"}
Python 3.9.1
输出的报告:

预期实现的场景:
测试用例在执行前会输出一次"setup",执行过程中输出一次"here is test_one",执行结束输出一次"teardown"。 测试用例失败,重新执行一次测试用例,测试用例在执行前会输出一次"setup",执行过程中输出一次"here is test_one",执行结束输出一次"teardown"。

按照预期,报告应该是:
Failed:
setup-->
here is test_one
teardown-->
Rerun:
setup -->
here is test_one
teardown-->
疑惑的地方:

  1. 为什么最终报告里面, Failed 中 "setup" + "here is test_one" + "teardown" 打印了 2 次?
  2. 为什么最终报告里面, Rerun 中只有 "setup" + "here is test_one", 那 "teardown" 哪里去了呢?

恳请各位路过的大神,慷慨解囊,提供宝贵意见。


↙↙↙阅读原文可查看相关链接,并与作者交流