pytest中直接参数传递和@pytest.mark.usefixtures的区别

1.举个例子

根目录conftest.py:

@pytest.fixture(scope="function")
def delete_register_user():
    """注册用户前,先删除数据,用例执行之后,再次删除以清理数据"""
    del_sql = base_data["init_sql"]["delete_register_user"]
    db.execute_db(del_sql)
    step_first()
    logger.info("注册用户操作:清理用户--准备注册新用户")
    logger.info("执行前置SQL:{}".format(del_sql))
    yield
    db.execute_db(del_sql)
    step_last()
    logger.info("注册用户操作:删除注册的用户")
    logger.info("执行后置SQL:{}".format(del_sql))

delete_register_user使用pytest fixture装饰器进行定义,作用是在每个测试用例执行前后,对数据库中的注册用户数据进行清理。具体操作为:执行删除注册用户的数据SQL语句,然后执行测试用例,最后再次执行删除注册用户的数据SQL语句。通过日志记录操作信息,并使用了step_first()和step_last()函数进行标记。

2.测试用例中该如何正确引用实现前后置操作

@pytest.mark.usefixtures("delete_register_user") def test_register_user(self,delete_register_user )这两种前置delete_register_user有什么区别?

在这两个例子中,delete_register_user都是一个fixture,它会在test_register_user测试函数运行之前被调用。但是,它们之间存在一些关键区别:
1.直接参数传递:

   def test_register_user(self, delete_register_user):
   

在这种情况下,delete_register_user作为测试函数的一个参数直接被传递。这意味着测试函数可以直接访问fixture的返回值,如果fixture有返回值,测试函数可以利用这些值进行操作。这种方式更加灵活,因为你可以根据需要更改fixture的参数或行为。


2.使用@pytest.mark.usefixtures装饰器:

   @pytest.mark.usefixtures("delete_register_user")
   def test_register_user(self):
   

这种方法是通过标记的方式使用fixture,不需要在函数签名中声明delete_register_user。fixture仍然会在测试开始前运行,但测试函数无法直接访问fixture的返回值。通常,如果fixture用于设置环境(如清理或初始化),并且不需要在测试函数中显式使用其返回结果,这种方式更合适。


总结来说,第一种方式提供了fixture返回值的直接访问,第二种方式仅确保fixture执行,不关心返回值。选择哪种方式取决于测试的具体需求。

  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值