本文主要总结的是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]。