У DebanjanB отличный ответ.
Я из ткани, что нет единого универсального ответа.
Нужно найти веселый баланс. В зависимости от того, какую платформу вы используете, вы можете придумать. Мне нравится pytest за уникальное использование светильников.
Для этого вы можете выполнять тесты или наборы тестов в любом случае, в зависимости от того, что вам нужно. Вы можете сбалансировать время загрузки браузера и время выполнения для того, что имеет смысл.
Как пример в pytest:
conftest.py:
import pytest
from selenium import webdriver
@pytest.fixture(scope='module')
def module_browser(request):
"""Fixture lasts for an entire file of tests."""
driver = webdriver.Chrome()
def fin():
driver.quit()
request.addfinalizer(fin())
return driver
@pytest.fixture(scope='function')
def function_browser(request):
"""Fixture lasts for just a test function."""
driver = webdriver.Chrome()
def fin():
driver.quit()
request.addfinalizer(fin())
return driver
Теперь module_browser()
позволяет вам получить браузер для всего тестового модуля.
funtion_browser()
дает вам новый браузер для каждой тестовой функции.
Позволяет себе представить ... у вас есть куча тестов, в которые нужно войти, и они делают косметические проверки на стандартном аккаунте:
conftest.py продолжение ...
@pytest.fixture(scope='module')
def logged_in_browser(request):
"""Provide a logged in browser for simple tests."""
driver = webdriver.Opera()
# Now go and log this browser in,
# so we can use the logged in state for tests.
log_in_browser(username='RedMage', password='masmune')
def fin():
driver.quit()
request.addfinalizer(fin())
return driver
Это примерно то же самое, но позволяет оставить браузер открытым на несколько тестов, и он вошел в систему. Если вход в систему занимает, скажем, 5 секунд, и у вас есть 30 тестов, которые атомарно проверяют косметические вещи, вы можете несколько минут.
Эта гибкость позволит вам быстрее выполнять некоторые тесты, а некоторые - в более чистом состоянии. Нам может понадобиться каждый из них для запуска пакета и при этом мы сможем получить прирост эффективности в срок. Единого универсального ответа не существует.
Использование прибора в pytest позволяет вам выбирать, что вы хотите для каждого теста ... должен ли он быть чистым браузером или должен быть быстрее.
Затем в тестах мы видим такие вещи:
test_things.py
def test_logged_out_assets(function_browser):
driver = function_browser # just for clarity here.
driver.get('http://example.com/')
check_some_stuff(driver)
language_subdomain_list = ['www', 'es', 'de', 'ru', 'cz']
@pytest.parametrize(language_subdomain, language_subdomain_list)
def test_logged_out_assets_multlingual(module_browser, language_subdomain):
"""
Check the assets come up on each language subdomain.
This test will run for each of the subdomains as separate tests.
5 in all.
"""
driver = module_browser # for clarity in example.
url = "http://{}.example.com".format(language_subdomain)
driver.get(url)
check_some_stuff(driver)
def test_logged_in_assets(logged_in_browser):
"""
Check specific assets while logged in.
Remember, our web browser already is logged in when we get it!
"""
driver = logged_in_browser # for clarity in example.
check_some_assets(driver)
Py.test Светильники: https://docs.pytest.org/en/latest/fixture.html