如何在每个测试用例之间使用 pytest fixture 和共享变量
How to use pytest fixture and sharing variable between each testcase
我需要用 python3 和 selenium webdriver 编写一些 ui 测试。使用以下测试用例,测试运行良好。但是,我的问题是编写测试用例的更好方法是什么,以及如何在每个测试用例和 pytest fixture 函数之间传递 "base" 变量
我需要在每个测试用例之前 1:open 主页,2:在每个测试用例之后重新加载主页,并通过在每个测试用例和 pytest fixture 函数之间共享变量 "base" 来减少代码。
导入pytest
来自 modules.base 导入首页
class TestLogin(object):
def setup_method(self, method):
self.driver = WebDriver(desired_capabilities=desired_capabilities, command_executor=command_executor)
self.current_method_name = method.__name__
def teardown_method(self, method):
self.driver.close()
self.driver.quit()
@pytest.fixture(scope="function")
def loadpage():
self.base = Home(self.driver).open()
def loadLogin():
base.loadLogin()
def test_a(self):
base = Home(self.driver).open()
assert True == base.dotesta()
base.loadLogin()
def test_b(self):
base = Home(self.driver).open()
assert True == base.dotestb()
base.loadLogin()
def test_c(self):
base = Home(self.driver).open()
assert True == base.dotestc()
base.loadLogin()
def test_d(self):
base = Home(self.driver).open()
assert True == base.dotestd()
base.loadLogin()
对于您当前的要求,您不需要使用夹具。这是您的代码。
class TestLogin(object):
def setup_method(self, method):
self.driver = WebDriver(desired_capabilities=desired_capabilities, command_executor=command_executor)
self.current_method_name = method.__name__
self.base = Home(self.driver).open()
def teardown_method(self, method):
self.base.loadLogin()
self.driver.close()
self.driver.quit()
def test_a(self):
assert True == self.base.dotesta()
def test_b(self):
assert True == self.base.dotestb()
def test_c(self):
assert True == self.base.dotestc()
def test_d(self):
assert True == self.base.dotestd()
编辑:
为了只打开一次页面,将设置和拆卸替换为
def setup_class(cls):
cls.driver = WebDriver(desired_capabilities=desired_capabilities, command_executor=command_executor)
cls.current_method_name = method.__name__
cls.base = Home(self.driver).open()
def teardown_method(cls):
cls.base.loadLogin()
cls.driver.close()
cls.driver.quit()
有关 cls 的详细信息。
我需要用 python3 和 selenium webdriver 编写一些 ui 测试。使用以下测试用例,测试运行良好。但是,我的问题是编写测试用例的更好方法是什么,以及如何在每个测试用例和 pytest fixture 函数之间传递 "base" 变量 我需要在每个测试用例之前 1:open 主页,2:在每个测试用例之后重新加载主页,并通过在每个测试用例和 pytest fixture 函数之间共享变量 "base" 来减少代码。 导入pytest 来自 modules.base 导入首页
class TestLogin(object):
def setup_method(self, method):
self.driver = WebDriver(desired_capabilities=desired_capabilities, command_executor=command_executor)
self.current_method_name = method.__name__
def teardown_method(self, method):
self.driver.close()
self.driver.quit()
@pytest.fixture(scope="function")
def loadpage():
self.base = Home(self.driver).open()
def loadLogin():
base.loadLogin()
def test_a(self):
base = Home(self.driver).open()
assert True == base.dotesta()
base.loadLogin()
def test_b(self):
base = Home(self.driver).open()
assert True == base.dotestb()
base.loadLogin()
def test_c(self):
base = Home(self.driver).open()
assert True == base.dotestc()
base.loadLogin()
def test_d(self):
base = Home(self.driver).open()
assert True == base.dotestd()
base.loadLogin()
对于您当前的要求,您不需要使用夹具。这是您的代码。
class TestLogin(object):
def setup_method(self, method):
self.driver = WebDriver(desired_capabilities=desired_capabilities, command_executor=command_executor)
self.current_method_name = method.__name__
self.base = Home(self.driver).open()
def teardown_method(self, method):
self.base.loadLogin()
self.driver.close()
self.driver.quit()
def test_a(self):
assert True == self.base.dotesta()
def test_b(self):
assert True == self.base.dotestb()
def test_c(self):
assert True == self.base.dotestc()
def test_d(self):
assert True == self.base.dotestd()
编辑: 为了只打开一次页面,将设置和拆卸替换为
def setup_class(cls):
cls.driver = WebDriver(desired_capabilities=desired_capabilities, command_executor=command_executor)
cls.current_method_name = method.__name__
cls.base = Home(self.driver).open()
def teardown_method(cls):
cls.base.loadLogin()
cls.driver.close()
cls.driver.quit()
有关 cls 的详细信息。