python的hooks方法之pytest_collection_modifyitems

文章讲述了在pytest框架下,通过`pytest_collection_modifyitems`钩子方法对测试用例进行修改,特别是针对包含特定关键词的用例添加识别验证码的前置和后置操作,以及在验证码识别失败时的重跑机制。这涉及到接口自动化测试中的注册流程,包括发送验证码、识别验证码和注册接口,并且强调了不能在pytest配置中使用`--strict-markers`参数以避免未注册标记的错误。
摘要由CSDN通过智能技术生成

pytest_collection_modifyitems钩子方法作用于用例收集以后,对测试集中的用例进行重新排序等等操作。

项目需求:

完成IB/CL账号的注册-发送邮件-kyc接口自动化脚本:业务逻辑比较简单,涉及到三个接口:发送图片验证码,识别验证码,注册接口的请求体数据中添加进识别的验证码来完成注册。

接口逻辑:

前置:发送验证码、识别验证码

后置:删除前置设置的全局变量:验证码code、验证码id

考虑到验证码不一定识别正确,这时候需要加上失败重跑机制,但是由于用例中的每个接口并不一定需要加上这个前置和后置,需要对收集的用例进行处理,自定义一个规则:当用例的title包含‘验证码时’,加上识别验证码的前置及后置,以及验证码识别失败导致的注册失败的重跑机制。

前置后置处理如下,用到了pytest_collection_modifyitems钩子方法:

#conftest.py
@pytest.fixture()
def verify_code():
    logger.info('============运行用例前置:verify_code,满足用例的预置条件==============')
    captcha_url = SystemEnv.CAPTCHA.get(SystemEnv.ENTITY).get(env)
    if hasattr(SystemEnv,'cp_token'):
        token = getattr(SystemEnv,'cp_token')
    else:
        token = None
    captcha_resp = HandelRequests.request('get',captcha_url,token=token)
    #设置全局变量
    verify_img_code(captcha_resp)
    handleExtract('{"captchaid":"$..id"}',captcha_resp.json())
    yield
    #环境恢复,删除全局变量
    logger.info('运行用例后置:verify_code,环境恢复:删除设置的全局变量')
    delattr(SystemEnv,'imgcode')
    delattr(SystemEnv,'captchaid')


#收集用例以后:
def pytest_collection_modifyitems(items):
    logger.info('================================================开始为每个用例加上必须夹具=======================================================')
    for item in items:
        case_title = item.callspec.params.get('case').title
        if '验证码' in case_title:
            logger.info(f'用例{item.nodeid}需要加上前置verify_code夹具:发送验证码并识别验证码')
            logger.info(f'加上夹具的用例title为:{case_title}')
            item.add_marker(pytest.mark.verify_code)
            item.fixturenames.append('verify_code')

踩坑点:

item.add_marker(pytest.mark.verify_code)

给用例加上标记verify_code,运行verify_code这个fixture

这里需要注意的是:pytest.ini或者其他pytest的配置文件的addopts配置不能加上--strict-markers参数:只允许使用已知标记,未在pytest.ini文件中注册的任何标记都将引发异常。否则会报错;或者我们把fixture函数verify_code加入到markers中。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值