pytest_collection_modifyitems钩子函数修改测试用例的执行顺序

pytest默认执行用例是根据项目下的文件名称按ascii码去收集运行的;文件中的用例是从上往下按顺序执行的。

【严格意义上来说,我们在用例设计原则上用例就不要有依赖顺序,这样才能更好的体现出测试用例的意义。(测试用例的执行不需要按照顺序来执行,而是随即执行)】

在Python的测试框架pytest中,钩子函数是一种特殊类型的函数,可以在测试执行的不同阶段进行干预。这些钩子函数提供了在测试过程中插入自定义逻辑的机会,使测试更加灵活和可配置。其中,pytest_collection_modifyitems是一个非常有用的钩子函数,允许在测试收集阶段对测试项进行修改或过滤。
功能和作用
pytest_collection_modifyitems钩子函数允许用户在测试收集完成后、测试执行开始之前,对收集到的测试项进行修改或过滤。这意味着你可以基于收集到的测试项的信息,动态地决定是否跳过某些测试、修改测试的参数或条件等。
使用场景

  1. 动态过滤测试用例:基于某些条件(如环境变量、配置文件等),你可能希望动态地决定是否执行某些测试用例。使用pytest_collection_modifyitems,你可以在收集完所有测试用例之后,根据需要过滤掉不需要的测试项。
  2. 动态修改测试参数:在某些情况下,你可能需要根据环境或配置来动态地改变测试的参数。通过在pytest_collection_modifyitems中修改测试项,你可以实现这一目标。
  3. 集成第三方库或插件:当集成第三方库或插件时,你可能需要调整或修改已收集的测试项以适应这些库或插件的特定要求。pytest_collection_modifyitems提供了一个机会来调整这些测试项。
    实现方式
    要使用pytest_collection_modifyitems钩子函数,你需要在你的pytest配置文件(通常是conftest.py)中定义一个函数,并使用pytest.mark.hookwrapper装饰器来标记它。这样,pytest将自动在收集阶段调用这个函数,并确保它按照期望的方式工作。
    下面是一个简单的示例:
     
      
    1. import pytest
    2. @pytest.mark.hookwrapper
    3. def pytest_collection_modifyitems(session, config, items):
    4. # 在这里进行你的自定义逻辑
    5. # 例如,根据条件过滤掉某些测试项
    6. for item in items:
    7. if some_condition(item):
    8. items.remove(item) # 移除满足条件的测试项
    9. yield # 确保钩子函数正常结束
    在上面的示例中,我们定义了一个名为pytest_collection_modifyitems的钩子函数,并使用pytest.mark.hookwrapper装饰器标记它。在函数内部,我们遍历收集到的测试项,并根据某些条件(如some_condition函数)决定是否移除它们。最后,我们使用yield关键字确保钩子函数正常结束。
    请注意,上述示例仅用于说明目的。在实际应用中,你需要根据你的具体需求来实现自定义逻辑。

示例:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值