Update Horizon Helm test to use python3

This change updates the tests container image
to one which installs python3.

The selenium-test.py template file has been refactored
to match the structure of the selenium tests in
openstack-helm-infra/tools/gate/selenium

Change-Id: I568bea8d715ea28b8e750215d166ba1b04e4172d
This commit is contained in:
Steven Fitzpatrick 2019-10-16 15:42:06 -05:00
parent 9736f5f544
commit 5c6811503f
2 changed files with 44 additions and 48 deletions

View File

@ -1,4 +1,4 @@
#!/usr/bin/env python #!/usr/bin/env python3
{{/* {{/*
Copyright 2019 The Openstack-Helm Authors. Copyright 2019 The Openstack-Helm Authors.
@ -24,70 +24,66 @@ from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.options import Options
from selenium.common.exceptions import TimeoutException
from selenium.common.exceptions import NoSuchElementException
# Create logger, console handler and formatter # Create logger, console handler and formatter
logger = logging.getLogger('Horizon Selenium Tests') logger = logging.getLogger('Horizon Selenium Tests')
logger.setLevel(logging.DEBUG) logger.setLevel(logging.DEBUG)
ch = logging.StreamHandler() ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG) ch.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') formatter = logging.Formatter(
'%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
ch.setFormatter(formatter) ch.setFormatter(formatter)
logger.addHandler(ch) logger.addHandler(ch)
# Get keystone admin user name def get_variable(env_var):
if "OS_USERNAME" in os.environ: if env_var in os.environ:
keystone_user = os.environ['OS_USERNAME'] logger.info('Found "{}"'.format(env_var))
logger.info('Found Keystone username') return os.environ[env_var]
else: else:
logger.critical('Keystone username environment variable not set') logger.critical('Variable "{}" is not defined!'.format(env_var))
sys.exit(1) sys.exit(1)
if "OS_PASSWORD" in os.environ:
keystone_password = os.environ['OS_PASSWORD'] keystone_user = get_variable('OS_USERNAME')
logger.info('Found Keystone password') keystone_password = get_variable('OS_PASSWORD')
else: horizon_uri = get_variable('HORIZON_URI')
logger.critical('Keystone password environment variable not set') user_domain_name = get_variable('OS_USER_DOMAIN_NAME')
sys.exit(1)
if "HORIZON_URI" in os.environ:
horizon_uri = os.environ['HORIZON_URI']
logger.info('Found Horizon URI')
else:
logger.critical('Horizon URI environment variable not set')
sys.exit(1)
if "OS_USER_DOMAIN_NAME" in os.environ:
user_domain_name = os.environ['OS_USER_DOMAIN_NAME']
logger.info('Found Keystone user domain')
else:
logger.critical('Keystone user domain environment variable not set')
sys.exit(1)
# Add options to make chrome browser headless # Add options to make chrome browser headless
options = Options() options = Options()
options.add_argument('--headless') options.add_argument('--headless')
options.add_argument('--no-sandbox') options.add_argument('--no-sandbox')
chrome_driver = '/etc/selenium/chromedriver'
browser = webdriver.Chrome('/etc/selenium/chromedriver', chrome_options=options) browser = webdriver.Chrome(chrome_driver, chrome_options=options)
browser.get(horizon_uri)
try: try:
browser.find_element_by_name('domain').send_keys(user_domain_name) logger.info('Attempting to connect to Horizon')
browser.find_element_by_name('username').send_keys(keystone_user) browser.get(horizon_uri)
browser.find_element_by_name('password').send_keys(keystone_password) el = WebDriverWait(browser, 15).until(
logger.info("Successfully reached Horizon dashboard") EC.title_contains('OpenStack Dashboard')
except: )
logger.error('Unable to reach Horizon') logger.info('Connected to Horizon')
browser.close() except TimeoutException:
logger.critical('Timed out waiting for Horizon')
browser.quit()
sys.exit(1) sys.exit(1)
try: try:
browser.find_element_by_id('loginBtn').click() logger.info('Attempting to log into Horizon')
WebDriverWait(browser, 15).until( browser.find_element_by_name('domain').send_keys(user_domain_name)
EC.presence_of_element_located((By.ID, 'navbar-collapse')) browser.find_element_by_name('username').send_keys(keystone_user)
) browser.find_element_by_name('password').send_keys(keystone_password)
logger.info("Successfully logged into Horizon") browser.find_element_by_id('loginBtn').click()
except: WebDriverWait(browser, 15).until(
logger.error("Unable to login to Horizon") EC.presence_of_element_located((By.ID, 'navbar-collapse'))
browser.close() )
sys.exit(1) logger.info("Successfully logged into Horizon")
except (TimeoutException, NoSuchElementException):
logger.error('Failed to login to Horizon')
browser.quit()
sys.exit(1)
browser.close() browser.quit()

View File

@ -23,7 +23,7 @@ images:
horizon_db_sync: docker.io/openstackhelm/horizon:ocata-ubuntu_xenial horizon_db_sync: docker.io/openstackhelm/horizon:ocata-ubuntu_xenial
db_drop: docker.io/openstackhelm/heat:ocata-ubuntu_xenial db_drop: docker.io/openstackhelm/heat:ocata-ubuntu_xenial
horizon: docker.io/openstackhelm/horizon:ocata-ubuntu_xenial horizon: docker.io/openstackhelm/horizon:ocata-ubuntu_xenial
test: docker.io/openstackhelm/osh-selenium:latest-ubuntu_xenial test: docker.io/openstackhelm/osh-selenium:latest-ubuntu_bionic
dep_check: quay.io/airshipit/kubernetes-entrypoint:v1.0.0 dep_check: quay.io/airshipit/kubernetes-entrypoint:v1.0.0
image_repo_sync: docker.io/docker:17.07.0 image_repo_sync: docker.io/docker:17.07.0
pull_policy: "IfNotPresent" pull_policy: "IfNotPresent"