本文系《pytest源码剖析》系列内容
26. stepwise
插件路径:_pytest.stepwise
实现的 hook
调用的 hook
pytest_deselected
定义 fixture
无
插件功能
创建命令行参数--sw
创建命令行参数--sw-skip
创建子插件stepwiseplugin
代码片段
@pytest.hookimpldef pytest_configure(config: Config) -> None: if config.option.stepwise_skip: # allow --stepwise-skip to work on it's own merits. config.option.stepwise = True if config.getoption("stepwise"): config.pluginmanager.register(StepwisePlugin(config), "stepwiseplugin")
class StepwisePlugin: self.session.shouldstop = ( "Test failed, continuing from this test next run." )
传递参数--sw-skip,等同强制传参--sw
传递参数--sw会注册插件stepwiseplugin
通过给session.shouldstop赋值,可使 pytest 停止运行
简评
这好像是个漏网之鱼。。。
它创建了一个子插件,默认不启用,所以脚本没有识别到
子插件代码量不多,就不给他新建一个小节了,
...
传参--sw后,插件会注册插件stepwiseplugin
这个插件主要做了两件事:
用例失败时,记下用例的序号,然后退出 pytest
下次启动时,把序号前的用例全部取消选中,只执行后面的(含失败的)用例
...
传参--sw-skip后,插件stepwiseplugin会给多一次机会:
第一次用例失败时,消耗 skip 机会(只有 1 次),继续执行
第二次用例失败时,记下用例的序号,然后退出 pytest
下次启动时,把序号前的用例全部取消选中,只执行后面的(含失败的)用例
实质上,下次启动时,跳过了第一个失败的用例,从第二个用例开始执行
再下次启动时,跳过了第二个失败的用例,从第三个用例开始执行
其好处是:可以不必卡在某一个失败的用例停滞不前
有了 skip 失败的机会,只需要不断不断地启动 pytest,就可以执行完全部的用例
...
传参--sw-skip启动 pytest 多次,效果等同于不传任何参数启动 pytest
选中哪一种方式启动,取决于你希望在什么时候得到用例的失败原因:
--sw-skip:每一次失败时马上显示
无参数:全部用例执行完毕后,才会统一显示
...
自此,已经在 pytest 中见到了多种测试方法:
全量测试:默认
选择性测试:-m
冒烟测试:-x
渐增式测试:--sw
后续还会看到:
回归测试:-lf
增量测试:-nf
加上第三方插件,会更多:
并发测试:-n
领取专属 10元无门槛券
私享最新 技术干货