zoukankan      html  css  js  c++  java
  • 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]。

  • 相关阅读:
    hadoop yarn日志分离
    hadoop优化
    hive UDF
    hadoophttpfs
    spark编译
    spark feature
    python
    python 装饰器
    HTML特殊转义字符列表
    博客园数据统计
  • 原文地址:https://www.cnblogs.com/LCboss/p/12027977.html
Copyright © 2011-2022 走看看