Gau*_*hah 5 python selenium fixtures pytest python-2.7
我面临着 pytest 装置的一个小问题,非常感谢您的帮助。
我有一些功能装置,如下所述。为了简单起见,我没有展示其实现。
@pytest.fixture()
def get_driver():
pass
@pytest.fixture()
def login(get_driver):
pass
@pytest.fixture()
def settings(login):
pass
Run Code Online (Sandbox Code Playgroud)
问题是我还需要一个(会话级别)固定装置,它可以在运行第一个测试用例之前进行设置。(实际开始测试)。即进入设置页面并创建一些设置。(登录后)
现在的问题是我不能使用会话级别的固定装置这样做,因为我不能在会话级别使用功能级别的固定装置。或者我可以吗?
@pytest.fixture(scope="session")
def setup(settings):
settings.create_settings()
pass
Run Code Online (Sandbox Code Playgroud)
您将需要使用解决方法。该操作需要在设置为 的function范围固定装置中完成。autouseTrue
您需要在session基础固定装置中初始化一个变量,它将检查是否settings已完成。如果没有完成,那么您将进行设置并将标志更改为False
下面是一个工作示例
import pytest
@pytest.fixture(scope="session", autouse=True)
def settings_page():
config = {"config_done": False}
return config
@pytest.fixture()
def init(request):
print("init called")
return "init"
@pytest.fixture()
def driver():
print("driver called")
return "driver"
@pytest.fixture(autouse=True)
def init_settings(settings_page, driver):
if not settings_page["config_done"]:
print("Settings being done only the first time")
settings_page["config_done"] = True
@pytest.fixture()
def login():
print("login called")
return "login"
@pytest.fixture()
def logged_in_driver(init, driver, login):
print("logged in driver is ready")
return (init, driver, login)
@pytest.fixture()
def non_logged_in_driver(init, driver):
print("non logged in driver is ready")
return (init, driver)
def test_1(logged_in_driver):
print("test_1")
def test_2(non_logged_in_driver):
print("test_2")
Run Code Online (Sandbox Code Playgroud)
输出如下
test.py driver called
Settings being done only the first time
init called
login called
logged in driver is ready
.test_1
driver called
init called
non logged in driver is ready
.test_2
Run Code Online (Sandbox Code Playgroud)
所以你可以看到设置只发生一次
| 归档时间: |
|
| 查看次数: |
5487 次 |
| 最近记录: |