pytest中怎么引用前置中的变量

本文主要总结的是pytest中的前置后置怎么返回参数

我们在做自动化的过程中,如果运用的是pytest的话,会遇到怎么使用前置条件中的变量

比如:

@pytest.fixture()
def init_driver():
    driver = webdriver.Chrome()
    login = LoginPageOperation(driver)
    home = HomePageOperation(driver)
    driver.get(common_datas.login_url)
    driver.maximize_window()
    yield 
    driver.quit()

在这个前置中,我们怎么使用这个driver、login、home呢?

其实我们透过本质来看,这个前置后置本身是一个函数,既然是函数,那么肯定是可以有返回值的,那么问题来了,这个返回值应该在哪里呢?

请看代码:

@pytest.fixture()
def init_driver():
    driver = webdriver.Chrome()
    login = LoginPageOperation(driver)
    home = HomePageOperation(driver)
    driver.get(common_datas.login_url)
    driver.maximize_window()
    yield driver, login, home
    driver.quit()

以上标记的地方就是我增加的地方,可以看出这个返回值是跟在yield后面的,而且这个返回值我现在是写的是一个元祖,所有在调用的时候就还能根据索引来调用了,例如:

@pytest.fixture()
def init_driver():
    driver = webdriver.Chrome()
    login = LoginPageOperation(driver)
    home = HomePageOperation(driver)
    driver.get(common_datas.login_url)
    driver.maximize_window()
    yield driver, login, home
    driver.quit()


class TestLogin:

    @pytest.mark.usefixtures("init_driver")
    def test_success_login(self, init_driver):
        """
        登录成功测试用例
        """
        init_driver[1].login(test_login_datas.login_success_data["name"], test_login_datas.login_success_data["passwd"])
        assert(init_driver[-1].logout_text())

如果这个前置后置继承了其他的前置后置,那么调用被继承的变量该怎么做呢?是不是感觉这个问题很绕,哈哈,看代码吧

@pytest.fixture()
def init():
    """
    公共的前置后置
    :return: driver, login
    """
    driver = webdriver.Chrome()
    login = LoginPageOperation(driver)
    driver.get(common_datas.login_url)
    driver.maximize_window()
    yield driver, login
    driver.quit()

@pytest.fixture
def login(init):
    home = HomePageOperation(init[0])
    yield home, init


class TestLogin:

    @pytest.mark.smoke
    @pytest.mark.usefixtures("login")
    def test_success_login(self, login):
        """
        登录成功测试用例
        """

        login[-1][-1].login(test_login_datas.login_success_data["name"], test_login_datas.login_success_data["passwd"])
        assert(login[0].logout_text())

从上面代码可以看出login是继承了init这个函数,然后在我们测试用例中我们是引用了login这个前置后置函数,那么我们在用例中的代码是需要引用init中的driver返回值和login返回值的,所以上面脚本中标记为红色的地方就是我引用init函数里面的login方法。

透过本质其实可以看出我在login函数里面其实是返回了init的,但是init的返回值其实是有两个的(driver、login),所以我就写成了login[-1][-1]。

原文地址:https://www.cnblogs.com/LCboss/p/12027977.html