pytest(二):关于pytest自动化脚本编写中,初始化方式setup_class与fixture的对比

本文对比了在pytest自动化测试脚本中,使用`setup_class`和`fixture`两种初始化方式的优缺点。setup_class优点是代码结构清晰,但其teardown_class调用时机与setup_class不一致。fixture则是Pytest处理类级别资源的标准方法,通过yield实现更灵活的teardown逻辑,但可能增加测试方法的参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、自动化脚本实例对比

下面是一条用例,使用pytest框架,放在一个类中,两种实现方式:

1.1 setup_class初始化方式
1. 优点:
  • 代码结构清晰,setup_class 和 teardown_class 看起来像传统的类级别的 setup 和 teardown 方法。
2. 缺点:
  • 使用 autouse=True 的 fixture 作为类方法可能不是最佳实践,因为 fixture 通常不是类的一部分,而是独立的函数。

  • teardown_class 实际上并不是在每个测试方法之后调用,而是在整个类中的所有测试方法之后调用一次。这与 setup_class 的行为不一致,可能会导致误解
    在这里插入图片描述

1.2 fixture初始化方式
1. 优点:
  • 使用类级别的 fixture (scope=“class”) 是处理类级别资源初始化和清理的标准 Pytest 方法。
  • fixture 的返回值直接传递给测试方法,避免了使用 self 变量来存储状态。
  • yield 语句允许在 fixture 中定义 teardown 逻辑,确保在每个测试方法之后执行。
2. 缺点:
  • 需要测试方法显式地接收 fixture 作为参数,这可能会稍微增加一些样板代码。
import pytest
import logging


class TestCGJGLogin:
    """
    【川高】建管首页冒烟自动化 登录测试
    """

    @pytest.fixture(autouse=True)
    def setup_class(self, open_browser_login):
        """
        这里用来设置类级别的资源,每个测试方法执行前都会调用
        """
        self.driver, self.index, self.home, self.lg = open_browser_login

    @pytest.fixture(autouse=True)
    def teardown_class(self):
        """
        这里用来清理类级别的资源,每个测试方法执行后都会调用
        """
        if hasattr(self, 'home'):
            self.home.switch_to_home(r=True)

    @pytest.mark.smoke
    def test_01_login(self):
        """
        登录账号:lxl ,获取首页用户名称展示text 与 yaml 文件data断言
        """
        text = self.home.user_ele().text
        logging.info(text)
        assert self.lg.dt.get_cell_data(14, 'assert_val') in text
import pytest
import logging

@pytest.fixture(scope="class", autouse=True)
def manage_home_resource(request, open_browser_login):
    """
    类级别的fixture,自动应用于所有测试方法,用来管理home资源。
    """
    # 初始化资源
    driver, index, home, lg = open_browser_login
    yield driver, index, home, lg
    # 测试方法在此yield之后执行
    # teardown逻辑放在这里,确保每次测试后执行
    home.switch_to_home(r=True)
    # 如果有需要在所有测试完成后执行的最终清理,可以考虑使用request.addfinalizer


class TestCGJGLogin:
    """
    【川高】建管首页冒烟自动化 登录测试
    """

    @pytest.mark.smoke
    def test_01_login(self, manage_home_resource):
        """
        登录账号:lxl ,获取首页用户名称展示text 与 yaml 文件data断言
        """
        driver, index, home, lg = manage_home_resource
        logging.info(self.__dict__)
        text = home.user_ele().text
        logging.info(text)
        assert lg.dt.get_cell_data(14, 'assert_val') in text
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冷凝娇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值