Skip to content

Commit

Permalink
Make drivers for cloud providers case insensitive (#169)
Browse files Browse the repository at this point in the history
  • Loading branch information
BeyondEvil authored and davehunt committed Jul 31, 2018
1 parent 5ba7bd0 commit d577938
Show file tree
Hide file tree
Showing 9 changed files with 44 additions and 31 deletions.
4 changes: 2 additions & 2 deletions pytest_selenium/drivers/browserstack.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ class BrowserStack(Provider):

@property
def auth(self):
return (self.username, self.key)
return self.username, self.key

@property
def executor(self):
Expand All @@ -35,7 +35,7 @@ def key(self):
@pytest.mark.optionalhook
def pytest_selenium_runtest_makereport(item, report, summary, extra):
provider = BrowserStack()
if item.config.getoption('driver') != provider.driver:
if not provider.uses_driver(item.config.getoption('driver')):
return

passed = report.passed or (report.failed and hasattr(report, 'wasxfail'))
Expand Down
12 changes: 6 additions & 6 deletions pytest_selenium/drivers/cloud.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

from pytest_selenium.exceptions import MissingCloudCredentialError


if sys.version_info[0] == 2:
import ConfigParser as configparser
else:
Expand All @@ -15,17 +16,13 @@

class Provider(object):

@property
def driver(self):
return type(self).__name__

@property
def name(self):
return self.driver
return type(self).__name__

@property
def config(self):
name = '.{0}'.format(self.driver.lower())
name = '.{0}'.format(self.name.lower())
config = configparser.ConfigParser()
config.read([name, os.path.join(os.path.expanduser('~'), name)])
return config
Expand All @@ -41,3 +38,6 @@ def get_credential(self, key, envs):
if value:
return value
raise MissingCloudCredentialError(self.name, key, envs)

def uses_driver(self, driver):
return driver.lower() == self.name.lower()
6 changes: 3 additions & 3 deletions pytest_selenium/drivers/crossbrowsertesting.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ class CrossBrowserTesting(Provider):

@property
def auth(self):
return (self.username, self.key)
return self.username, self.key

@property
def executor(self):
Expand All @@ -36,7 +36,7 @@ def key(self):
@pytest.mark.optionalhook
def pytest_selenium_capture_debug(item, report, extra):
provider = CrossBrowserTesting()
if item.config.getoption('driver') != provider.driver:
if not provider.uses_driver(item.config.getoption('driver')):
return

videos = requests.get(
Expand All @@ -52,7 +52,7 @@ def pytest_selenium_capture_debug(item, report, extra):
@pytest.mark.optionalhook
def pytest_selenium_runtest_makereport(item, report, summary, extra):
provider = CrossBrowserTesting()
if item.config.getoption('driver') != provider.driver:
if not provider.uses_driver(item.config.getoption('driver')):
return

passed = report.passed or (report.failed and hasattr(report, 'wasxfail'))
Expand Down
11 changes: 5 additions & 6 deletions pytest_selenium/drivers/saucelabs.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,6 @@ def executor(self):
return 'https://{0}:{1}@ondemand.saucelabs.com/wd/hub'.format(
self.username, self.key)

@property
def name(self):
return 'Sauce Labs'

@property
def username(self):
return self.get_credential('username', ['SAUCELABS_USERNAME',
Expand All @@ -43,11 +39,14 @@ def key(self):
'SAUCELABS_PSW',
'SAUCE_ACCESS_KEY'])

def uses_driver(self, driver):
return driver.lower() == self.name.lower()


@pytest.mark.optionalhook
def pytest_selenium_capture_debug(item, report, extra):
provider = SauceLabs()
if item.config.getoption('driver') != provider.driver:
if not provider.uses_driver(item.config.getoption('driver')):
return

pytest_html = item.config.pluginmanager.getplugin('html')
Expand All @@ -57,7 +56,7 @@ def pytest_selenium_capture_debug(item, report, extra):
@pytest.mark.optionalhook
def pytest_selenium_runtest_makereport(item, report, summary, extra):
provider = SauceLabs()
if item.config.getoption('driver') != provider.driver:
if not provider.uses_driver(item.config.getoption('driver')):
return

passed = report.passed or (report.failed and hasattr(report, 'wasxfail'))
Expand Down
6 changes: 3 additions & 3 deletions pytest_selenium/drivers/testingbot.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ def __init__(self, host=None, port=None):

@property
def auth(self):
return (self.key, self.secret)
return self.key, self.secret

@property
def executor(self):
Expand All @@ -46,7 +46,7 @@ def secret(self):
@pytest.mark.optionalhook
def pytest_selenium_capture_debug(item, report, extra):
provider = TestingBot()
if item.config.getoption('driver') != provider.driver:
if not provider.uses_driver(item.config.getoption('driver')):
return

pytest_html = item.config.pluginmanager.getplugin('html')
Expand All @@ -56,7 +56,7 @@ def pytest_selenium_capture_debug(item, report, extra):
@pytest.mark.optionalhook
def pytest_selenium_runtest_makereport(item, report, summary, extra):
provider = TestingBot()
if item.config.getoption('driver') != provider.driver:
if not provider.uses_driver(item.config.getoption('driver')):
return

passed = report.passed or (report.failed and hasattr(report, 'wasxfail'))
Expand Down
3 changes: 1 addition & 2 deletions testing/test_crossbrowsertesting.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@

import pytest

pytestmark = pytestmark = [pytest.mark.skip_selenium,
pytest.mark.nondestructive]
pytestmark = [pytest.mark.skip_selenium, pytest.mark.nondestructive]


@pytest.fixture
Expand Down
21 changes: 19 additions & 2 deletions testing/test_driver.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,10 @@ def test_driver_case_insensitive(testdir):
file_test = testdir.makepyfile("""
import pytest
@pytest.mark.nondestructive
def test_pass(): pass
def test_pass(request):
assert request.config.getoption('driver') == 'SaUcELaBs'
""")
testdir.quick_qa('--driver', 'firefox', file_test, passed=1)
testdir.quick_qa('--driver', 'SaUcELaBs', file_test, passed=1)


def test_missing_driver(failure):
Expand Down Expand Up @@ -115,3 +116,19 @@ def test_pass(driver_kwargs):
'--driver', 'Remote',
'--port', port,
file_test, passed=1)


@pytest.mark.parametrize('name',
['SauceLabs',
'TestingBot',
'CrossBrowserTesting',
'BrowserStack'])
def test_provider_naming(name):
import importlib

driver = name
module = importlib.import_module(
'pytest_selenium.drivers.{}'.format(driver.lower()))
provider = getattr(module, driver)()
assert provider.uses_driver(driver)
assert provider.name == name
9 changes: 4 additions & 5 deletions testing/test_saucelabs.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@

monkeytime = datetime.datetime(2020, 12, 25, 17)

pytestmark = pytestmark = [pytest.mark.skip_selenium,
pytest.mark.nondestructive]
pytestmark = [pytest.mark.skip_selenium, pytest.mark.nondestructive]


@pytest.fixture
Expand Down Expand Up @@ -39,19 +38,19 @@ def failure(testdir, testfile, httpserver_base_url):

def test_missing_username(failure, monkeypatch, tmpdir):
monkeypatch.setattr(os.path, 'expanduser', lambda p: str(tmpdir))
assert 'Sauce Labs username must be set' in failure()
assert 'SauceLabs username must be set' in failure()


def test_missing_api_key_env(failure, monkeypatch, tmpdir):
monkeypatch.setattr(os.path, 'expanduser', lambda p: str(tmpdir))
monkeypatch.setenv('SAUCELABS_USERNAME', 'foo')
assert 'Sauce Labs key must be set' in failure()
assert 'SauceLabs key must be set' in failure()


def test_missing_api_key_file(failure, monkeypatch, tmpdir):
monkeypatch.setattr(os.path, 'expanduser', lambda p: str(tmpdir))
tmpdir.join('.saucelabs').write('[credentials]\nusername=foo')
assert 'Sauce Labs key must be set' in failure()
assert 'SauceLabs key must be set' in failure()


@pytest.mark.parametrize(('username', 'key'), [('SAUCELABS_USERNAME',
Expand Down
3 changes: 1 addition & 2 deletions testing/test_testingbot.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@

import pytest

pytestmark = pytestmark = [pytest.mark.skip_selenium,
pytest.mark.nondestructive]
pytestmark = [pytest.mark.skip_selenium, pytest.mark.nondestructive]


@pytest.fixture
Expand Down

0 comments on commit d577938

Please sign in to comment.