Merge "[Kibana] Add improvements to Selenium tests for Kibana"

This commit is contained in:
Zuul 2019-06-27 07:07:14 +00:00 committed by Gerrit Code Review
commit d5655e95ea
3 changed files with 78 additions and 75 deletions

View File

@ -34,8 +34,10 @@
- describe-kubernetes-objects - describe-kubernetes-objects
- gather-pod-logs - gather-pod-logs
- gather-prom-metrics - gather-prom-metrics
- gather-selenium-data
tags: tags:
- helm-release-status - helm-release-status
- describe-kubernetes-objects - describe-kubernetes-objects
- gather-pod-logs - gather-pod-logs
- gather-prom-metrics - gather-prom-metrics
- gather-selenium-data

View File

@ -0,0 +1,31 @@
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
- name: "creating directory for helm release descriptions"
file:
path: "{{ logs_dir }}/selenium"
state: directory
- name: "Get selenium data"
shell: |-
set -x
cp /tmp/artifacts/* {{ logs_dir }}/selenium/.
args:
executable: /bin/bash
ignore_errors: True
- name: "Downloads logs to executor"
synchronize:
src: "{{ logs_dir }}/selenium"
dest: "{{ zuul.executor.log_root }}/{{ inventory_hostname }}"
mode: pull
ignore_errors: True

View File

@ -7,98 +7,68 @@ 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 TimeoutException
from threading import Thread
logger = logging.getLogger('Kibana Selenium Tests') logger = logging.getLogger('Kibana 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 Grafana admin user name artifacts = '/tmp/artifacts/'
if "KIBANA_USER" in os.environ: if not os.path.exists(artifacts):
kibana_user = os.environ['KIBANA_USER'] os.makedirs(artifacts)
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: def get_variable(env_var):
kibana_journal_uri = os.environ['KIBANA_JOURNAL_URI'] if env_var in os.environ:
logger.info('Found Kibana Journal URI') logger.info('Found "{}"'.format(env_var))
else: return os.environ[env_var]
logger.critical('Kibana Journal URI environment variable not set') else:
sys.exit(1) logger.critical('Variable "{}" is not defined!'.format(env_var))
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_user = get_variable('KIBANA_USER')
kibana_logstash_uri = os.environ['KIBANA_LOGSTASH_URI'] kibana_password = get_variable('KIBANA_PASSWORD')
logger.info('Found Kibana Logstash URI') kibana_journal_uri = get_variable('KIBANA_JOURNAL_URI')
else: kibana_kernel_uri = get_variable('KIBANA_KERNEL_URI')
logger.critical('Kibana Logstash URI environment variable not set') kibana_logstash_uri = get_variable('KIBANA_LOGSTASH_URI')
sys.exit(1)
options = Options() options = Options()
options.add_argument('--headless') options.add_argument('--headless')
options.add_argument('--no-sandbox') options.add_argument('--no-sandbox')
options.add_argument('--window-size=1920x1080') options.add_argument('--window-size=1920x1080')
errNO = 1 targets = [(kibana_kernel_uri, 'Kernel'),
(kibana_journal_uri, 'Journal'),
(kibana_logstash_uri, 'Logstash')]
browser = webdriver.Chrome('/etc/selenium/chromedriver', chrome_options=options) for target, name in targets:
url = "http://{0}:{1}@{2}".format(kibana_user, kibana_password, kibana_journal_uri) retry = 3
browser.get(url) while retry > 0:
prefix = ''
browser = webdriver.Chrome(
'/etc/selenium/chromedriver', chrome_options=options)
url = "http://{0}:{1}@{2}".format(kibana_user, kibana_password, target)
browser.get(url)
try: try:
WebDriverWait(browser, 60).until( 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]')) EC.presence_of_element_located(
) (By.XPATH, '//*[@id="kibana-body"]/div[1]/div/div/div[3]/'
browser.save_screenshot('/tmp/artifacts/Kibana_JournalIndex.png') 'discover-app/div/div[2]/div[2]/div/div[2]/div[2]/'
except TimeoutException, e: 'doc-table/div/table/tbody/tr[1]/td[2]'))
browser.save_screenshot('/tmp/artifacts/Error_{}.png'.format(errNO)) )
logger.error('Error occured loading Journal index') logger.info('{} index loaded successfully'.format(name))
errNO += 1 retry = 0
except TimeoutException, e:
browser = webdriver.Chrome('/etc/selenium/chromedriver', chrome_options=options) logger.error('Error occured loading {} index'.format(name))
url = "http://{0}:{1}@{2}".format(kibana_user, kibana_password, kibana_kernel_uri) prefix = 'Error_'
browser.get(url) browser.save_screenshot(
artifacts + '{}Kibana_{}.png'.format(prefix, name))
try: browser.quit()
WebDriverWait(browser, 60).until( retry -= 1
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