2017-04-18 4 views
1

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.

Antwort

0

Ich hatte ein ähnliches Problem. Der Fehler ist nach dem Entfernen aller zwischengespeicherten Dateien und des entfernten Speichers verschwunden.

Verwandte Themen