forked from CGM_Public/pretix_original
Try SauceLabs for Selenium tests
This commit is contained in:
@@ -14,3 +14,8 @@ script:
|
|||||||
- coverage run manage.py test
|
- coverage run manage.py test
|
||||||
after_success:
|
after_success:
|
||||||
- coveralls
|
- coveralls
|
||||||
|
addons:
|
||||||
|
sauce_connect:
|
||||||
|
username: "tixl"
|
||||||
|
access_key:
|
||||||
|
secure: "a0NUwGs2jHci0hIg3jySZLkfljv6FP33fZxAyi2gKeaxcVC+a/AailSnUgDoyVWxPr0JnkLvdFcxzDBgrQ1TLsgpRDSXnc1nIGsaHjgvVGSJ1hKACYtO/9QH+dgaaHEsIsHHbvGdnjwjrX8AZtDnkcRk1T3Skj8kUCniaU39w38="
|
||||||
|
|||||||
@@ -25,4 +25,7 @@ pep8-naming
|
|||||||
flake8
|
flake8
|
||||||
coveralls
|
coveralls
|
||||||
coverage
|
coverage
|
||||||
|
selenium
|
||||||
|
PyVirtualDisplay
|
||||||
|
-e git+https://github.com/tixl/sauceclient.git@master#egg=sauceclient
|
||||||
|
travis
|
||||||
|
|||||||
@@ -0,0 +1,97 @@
|
|||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
from django.test import LiveServerTestCase
|
||||||
|
from selenium import webdriver
|
||||||
|
|
||||||
|
RUN_LOCAL = ('SAUCE_USERNAME' in os.environ)
|
||||||
|
|
||||||
|
if RUN_LOCAL:
|
||||||
|
# could add Chrome, PhantomJS etc... here
|
||||||
|
BROWSERS = ['Chrome']
|
||||||
|
else:
|
||||||
|
from sauceclient import SauceClient
|
||||||
|
USERNAME = os.environ.get('SAUCE_USERNAME')
|
||||||
|
ACCESS_KEY = os.environ.get('SAUCE_ACCESS_KEY')
|
||||||
|
sauce = SauceClient(USERNAME, ACCESS_KEY)
|
||||||
|
|
||||||
|
BROWSERS = [
|
||||||
|
{"platform": "Mac OS X 10.9",
|
||||||
|
"browserName": "chrome",
|
||||||
|
"version": "35"},
|
||||||
|
{"platform": "Windows 8.1",
|
||||||
|
"browserName": "internet explorer",
|
||||||
|
"version": "11"},
|
||||||
|
{"platform": "Linux",
|
||||||
|
"browserName": "firefox",
|
||||||
|
"version": "29"}]
|
||||||
|
|
||||||
|
|
||||||
|
def on_platforms():
|
||||||
|
if RUN_LOCAL:
|
||||||
|
def decorator(base_class):
|
||||||
|
module = sys.modules[base_class.__module__].__dict__
|
||||||
|
for i, platform in enumerate(BROWSERS):
|
||||||
|
d = dict(base_class.__dict__)
|
||||||
|
d['browser'] = platform
|
||||||
|
name = "%s_%s" % (base_class.__name__, i + 1)
|
||||||
|
module[name] = type(name, (base_class,), d)
|
||||||
|
pass
|
||||||
|
return decorator
|
||||||
|
|
||||||
|
def decorator(base_class):
|
||||||
|
module = sys.modules[base_class.__module__].__dict__
|
||||||
|
for i, platform in enumerate(BROWSERS):
|
||||||
|
d = dict(base_class.__dict__)
|
||||||
|
d['desired_capabilities'] = platform
|
||||||
|
name = "%s_%s" % (base_class.__name__, i + 1)
|
||||||
|
module[name] = type(name, (base_class,), d)
|
||||||
|
return decorator
|
||||||
|
|
||||||
|
|
||||||
|
class BrowserTest(LiveServerTestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
if RUN_LOCAL:
|
||||||
|
self.setUpLocal()
|
||||||
|
else:
|
||||||
|
self.setUpSauce()
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
if RUN_LOCAL:
|
||||||
|
self.tearDownLocal()
|
||||||
|
else:
|
||||||
|
self.tearDownSauce()
|
||||||
|
|
||||||
|
def setUpSauce(self):
|
||||||
|
self.desired_capabilities['tunnel-identifier'] = \
|
||||||
|
os.environ['TRAVIS_JOB_NUMBER']
|
||||||
|
self.desired_capabilities['build'] = os.environ['TRAVIS_BUILD_NUMBER']
|
||||||
|
self.desired_capabilities['tags'] = \
|
||||||
|
[os.environ['TRAVIS_PYTHON_VERSION'], 'CI']
|
||||||
|
self.desired_capabilities['name'] = self.id()
|
||||||
|
|
||||||
|
sauce_url = "http://%s:%s@ondemand.saucelabs.com:80/wd/hub"
|
||||||
|
self.driver = webdriver.Remote(
|
||||||
|
desired_capabilities=self.desired_capabilities,
|
||||||
|
command_executor=sauce_url % (USERNAME, ACCESS_KEY)
|
||||||
|
)
|
||||||
|
self.driver.implicitly_wait(5)
|
||||||
|
|
||||||
|
def setUpLocal(self):
|
||||||
|
self.driver = getattr(webdriver, self.browser)()
|
||||||
|
self.driver.implicitly_wait(3)
|
||||||
|
|
||||||
|
def tearDownLocal(self):
|
||||||
|
self.driver.quit()
|
||||||
|
|
||||||
|
def tearDownSauce(self):
|
||||||
|
print("\nLink to your job: \n "
|
||||||
|
"https://saucelabs.com/jobs/%s \n" % self.driver.session_id)
|
||||||
|
try:
|
||||||
|
if sys.exc_info() == (None, None, None):
|
||||||
|
sauce.jobs.update_job(self.driver.session_id, passed=True)
|
||||||
|
else:
|
||||||
|
sauce.jobs.update_job(self.driver.session_id, passed=False)
|
||||||
|
finally:
|
||||||
|
self.driver.quit()
|
||||||
|
|||||||
@@ -1,6 +1,26 @@
|
|||||||
from django.test import TestCase, Client
|
from django.test import TestCase, Client, LiveServerTestCase
|
||||||
|
from selenium import webdriver
|
||||||
|
|
||||||
from tixlbase.models import User
|
from tixlbase.models import User
|
||||||
|
from tixlbase.tests import BrowserTest, on_platforms
|
||||||
|
|
||||||
|
|
||||||
|
@on_platforms()
|
||||||
|
class LoginFormBrowserTest(BrowserTest):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super().setUp()
|
||||||
|
self.user = User.objects.create_user('dummy@dummy.dummy', 'dummy@dummy.dummy', 'dummy')
|
||||||
|
|
||||||
|
def test_login(self):
|
||||||
|
self.driver.implicitly_wait(10)
|
||||||
|
self.driver.get('%s%s' % (self.live_server_url, '/control/login'))
|
||||||
|
username_input = self.driver.find_element_by_name("email")
|
||||||
|
username_input.send_keys('dummy@dummy.dummy')
|
||||||
|
password_input = self.driver.find_element_by_name("password")
|
||||||
|
password_input.send_keys('dummy')
|
||||||
|
self.driver.find_element_by_css_selector('button[type="submit"]').click()
|
||||||
|
self.driver.find_element_by_class_name("navbar-right")
|
||||||
|
|
||||||
|
|
||||||
class LoginFormTest(TestCase):
|
class LoginFormTest(TestCase):
|
||||||
|
|||||||
Reference in New Issue
Block a user