openstack-helm-infra/tools/gate/selenium/kibanaSelenium.py
Meg Heisler 1bf24051c5 Add exception handling to Kibana Selenium test
This adds exception handling to the Kibana Selenium tests
to address the test failures due to TimeoutExceptions when
the dashboard loads slowly. Only TimeoutExceptions are handled
so if there is an issue with the page itself an error will still
cause the gate to fail as intended. When a TimeoutException
occurs an error message is logged and a screenshot is taken
of the current page.

Change-Id: I16cd3a61ffce2e5fdc39bd7731cc068b8a6ec41f
2019-01-21 13:26:43 -06:00

105 lines
3.8 KiB
Python

import logging
import os
import sys
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options
from selenium.common.exceptions import TimeoutException
from threading import Thread
logger = logging.getLogger('Kibana Selenium Tests')
logger.setLevel(logging.DEBUG)
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
ch.setFormatter(formatter)
logger.addHandler(ch)
# Get Grafana admin user name
if "KIBANA_USER" in os.environ:
kibana_user = os.environ['KIBANA_USER']
logger.info('Found Kibana username')
else:
logger.critical('Kibana username environment variable not set')
sys.exit(1)
if "KIBANA_PASSWORD" in os.environ:
kibana_password = os.environ['KIBANA_PASSWORD']
logger.info('Found Kibana password')
else:
logger.critical('Kibana password environment variable not set')
sys.exit(1)
if "KIBANA_JOURNAL_URI" in os.environ:
kibana_journal_uri = os.environ['KIBANA_JOURNAL_URI']
logger.info('Found Kibana Journal URI')
else:
logger.critical('Kibana Journal URI environment variable not set')
sys.exit(1)
if "KIBANA_KERNEL_URI" in os.environ:
kibana_kernel_uri = os.environ['KIBANA_KERNEL_URI']
logger.info('Found Kibana Kernel URI')
else:
logger.critical('Kibana Kernel URI environment variable not set')
sys.exit(1)
if "KIBANA_LOGSTASH_URI" in os.environ:
kibana_logstash_uri = os.environ['KIBANA_LOGSTASH_URI']
logger.info('Found Kibana Logstash URI')
else:
logger.critical('Kibana Logstash URI environment variable not set')
sys.exit(1)
options = Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--window-size=1920x1080')
errNO = 1
browser = webdriver.Chrome('/etc/selenium/chromedriver', chrome_options=options)
url = "http://{0}:{1}@{2}".format(kibana_user, kibana_password, kibana_journal_uri)
browser.get(url)
try:
WebDriverWait(browser, 60).until(
EC.presence_of_element_located((By.XPATH, '//*[@id="kibana-body"]/div[1]/div/div/div[3]/discover-app/div/div[2]/div[2]/div/div[2]/div[2]/doc-table/div/table/tbody/tr[1]/td[2]'))
)
browser.save_screenshot('/tmp/artifacts/Kibana_JournalIndex.png')
except TimeoutException, e:
browser.save_screenshot('/tmp/artifacts/Error_{}.png'.format(errNO))
logger.error('Error occured loading Journal index')
errNO += 1
browser = webdriver.Chrome('/etc/selenium/chromedriver', chrome_options=options)
url = "http://{0}:{1}@{2}".format(kibana_user, kibana_password, kibana_kernel_uri)
browser.get(url)
try:
WebDriverWait(browser, 60).until(
EC.presence_of_element_located((By.XPATH, '//*[@id="kibana-body"]/div[1]/div/div/div[3]/discover-app/div/div[2]/div[2]/div/div[2]/div[2]/doc-table/div/table/tbody/tr[1]/td[2]'))
)
browser.save_screenshot('/tmp/artifacts/Kibana_KernelIndex.png')
except TimeoutException, e:
browser.save_screenshot('/tmp/artifacts/Error_{}.png'.format(errNO))
logger.error('Error occured loading Kernel index')
errNO += 1
browser = webdriver.Chrome('/etc/selenium/chromedriver', chrome_options=options)
url = "http://{0}:{1}@{2}".format(kibana_user, kibana_password, kibana_logstash_uri)
browser.get(url)
try:
WebDriverWait(browser, 60).until(
EC.presence_of_element_located((By.XPATH, '//*[@id="kibana-body"]/div[1]/div/div/div[3]/discover-app/div/div[2]/div[2]/div/div[2]/div[2]/doc-table/div/table/tbody/tr[1]/td[2]'))
)
browser.save_screenshot('/tmp/artifacts/Kibana_LogstashIndex.png')
except TimeoutException, e:
browser.save_screenshot('/tmp/artifacts/Error_{}.png'.format(errNO))
logger.error('Error occured loading Logstash index')
errNO += 1