Ich habe ein pytest Testprojekt Selen Tests ausgeführt, die eine Struktur wie hat:Wie verwendet man mehrere pytest conftest-Dateien in einem Testlauf mit einem duplizierten Parser.addoption?
ProjRoot
|
|_Pytest.ini
|_____________TestFolderA
| |
| |_test_folderA_tests1.py
| |_test_folderA_tests2.py
|
|____________TestFolderB
| |
| |_test_folderB_test1.py
| |_test_folderA_tests2.py
|
|
|___________TestHelperModules
| |
| |_VariousTestHelperModules
|
|____________DriversAndTools
|___(contains chromedriver.exe, firefox profile folder etc)
ich eine confTest.py-Datei, die ich zur Zeit in der ProjRoot laufen, die ich als Setup verwenden und abzureißen für die Festlegung die Browsersitzung für jeden ausgeführten Test. Es führt jeden Test zweimal durch. Einmal für Chrome und einmal für Firefox. In meinen Tests verwende ich nur die resultierende Treibervorrichtung. Die conftest Datei ist wie folgt:
#conftest.py
import pytest
import os
import rootdir_ref
from selenium.webdriver.common.keys import Keys
import time
from webdriverwrapper.pytest import *
from webdriverwrapper import Chrome
from webdriverwrapper import DesiredCapabilities
from webdriverwrapper import Firefox
from webdriverwrapper import FirefoxProfile
#when running tests from command line we should be able to pass --url=www..... for a different website, check what order these definitions need to be in
def pytest_addoption(parser):
parser.addoption('--url', default='https://test1.testsite.com.au')
@pytest.fixture(scope='function')
def url(request):
return request.config.option.url
browsers = {
'firefox': Firefox,
'chrome': Chrome,
}
@pytest.fixture(scope='function',
params=browsers.keys())
def browser(request):
if request.param == 'firefox':
firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True
firefox_capabilities['handleAlerts'] = True
theRootDir = os.path.dirname(rootdir_ref.__file__)
ffProfilePath = os.path.join(theRootDir, 'DriversAndTools', 'FirefoxSeleniumProfile')
geckoDriverPath = os.path.join(theRootDir, 'DriversAndTools', 'geckodriver.exe')
profile = FirefoxProfile(profile_directory=ffProfilePath)
print (ffProfilePath)
print (geckoDriverPath)
b = browsers[request.param](firefox_profile=profile, capabilities=firefox_capabilities, executable_path=geckoDriverPath)
elif request.param == 'chrome':
desired_cap = DesiredCapabilities.CHROME
desired_cap['chromeOptions'] = {}
desired_cap['chromeOptions']['args'] = ['--disable-plugins', '--disable-extensions']
theRootDir = os.path.dirname(rootdir_ref.__file__)
chromeDriverPath = os.path.join(theRootDir, 'DriversAndTools', 'chromedriver.exe')
b = browsers[request.param](chromeDriverPath)
else:
b = browsers[request.param]()
request.addfinalizer(lambda *args: b.quit())
return b
@pytest.fixture(scope='function')
def driver(browser, url):
driver = browser
driver.maximize_window()
driver.get(url)
return driver
Was Ich mag würde, ist eine conftest Datei in jedem Ordner Test zu tun haben, anstelle des ProjRoot. Aber wenn ich nutze diese vorhandene conftest Datei und legen Sie sie in jedem Testordner und dann pytest aus dem Projekt root ausführen mit
python –m pytest
lassen pytest Pickup dem Test Verzeichnisse von pytest.ini (erwarten den Test Ordner mit laufen ihrem bzw. enthaltene Conftest-Dateien) Ich habe Probleme mit dem Parser.Addoption --url, der bereits hinzugefügt wurde. Das Ende der Fehlermeldung lautet:
ClientScripts\conftest.py:19: in pytest_addoption
parser.addoption('--url', default='https://test1.coreplus.com.au/coreplus01')
..\..\..\VirtEnv\VirtEnv\lib\site-packages\_pytest\config.py:521: in addoption
self._anonymous.addoption(*opts, **attrs)
..\..\..\VirtEnv\VirtEnv\lib\site-packages\_pytest\config.py:746: in addoption
raise ValueError("option names %s already added" % conflict)
E ValueError: option names {'--url'} already added
Der Zweck des --url addOption ist, so kann ich die Standardwerte in der conftest Datei auf Kommandozeile überschreiben, wenn ich sie alle auf eine andere URL in derselben verweisen soll Zeit, aber ansonsten lassen Sie sie standardmäßig auf andere URLs laufen, wie in ihren Conftest-Dateien angegeben.