pytest hook中定义marker的筛选条件
2025年11月11日 - 由Bo 0 评论 12 阅读
做个备忘。主要是现在多个项目的自动化脚本有不同的筛选条件,并且每个pytest的test方法上加太多fixture实在不利于维护,而且平台上不打算再加一个用于传递参数的表单项。所以打算直接在pytest hook中过滤一下,达到简化的目的。
比如简单来说,测试方法可能是这样
@pytest.mark.xxx
@pytest.mark.env("stage", "qa")
def test_add_unsubscribed(precondition, parameters)
......
(这里忽略了一些实际的marker和逻辑)
虽然本地调试加-m参数就行,不过从平台上触发并发测试并不打算支持增加启动的表单项,要不就刹不住了,谁都要加各自的参数,所以就从公共的conftest里改一下pytest_runtest_setup就行了,在实际运行前pytest_runtest_call就可以决定跑还是不跑。
def pytest_runtest_setup(item):
env_mark = [mark.args for mark in item.iter_markers(name="env")]
env = item.config.getoption("-E")
if len(env_mark) > 0 and env not in env_mark:
pytest.skip(f"{item.originalname} not supported to run in {env} environment.")
# 这里还有些逻辑,但有些信息不便写上来,自己之后记得要总结一下
上一篇:
DRF创建或更新时对字段的选择限制