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 中使用fixture 可以让你为每个测试选择你想要的东西。如果它应该是一个干净的浏览器,或者它是否需要更快。
然后在测试中我们看到这样的东西:
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