Version 1

Log-Viewer (Bottle-Version)

Ausgangsbasis

ist das Beispiel der Übung …

Neue Funktionalität(en)

  • Testen die Oberfläche mit Selenium
  • Mögliche Funktionalitäten:
    • Auswahl für alle vorhandenen Log-Dateien
    • Einlesen der Daten nach der Dateiauswahl
    • Suche mit Filterfunktion (Kategorien)

Testen die Oberfläche mit Selenium

Voraussetzung: Selenium ist installiert und die Webdriver verfügbar.

Erste Test der Startseite

# Import the 'modules' that are required for execution
import pytest
import pytest_html

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from selenium.webdriver.firefox.options import Options as FirefoxOptions
from selenium.webdriver.chrome.options import Options as ChromeOptions

#Fixture for Firefox
@pytest.fixture(scope="class")
def driver_init(request):
    ff_options = FirefoxOptions()
    ff_options.add_argument("--headless")
    ff_driver = webdriver.Firefox(options=ff_options)
    request.cls.driver = ff_driver
    yield
    ff_driver.close()

#Fixture for Chrome
@pytest.fixture(scope="class")
def chrome_driver_init(request):
    chrome_options = ChromeOptions()
    chrome_options.add_argument("--disable-extensions")
    chrome_options.add_argument("--disable-gpu")
    chrome_options.add_argument("--headless")
    chrome_driver = webdriver.Chrome(options=chrome_options)
    request.cls.driver = chrome_driver
    yield
    chrome_driver.close()

@pytest.mark.usefixtures("driver_init")
class BasicTest:
    pass
class Test_URL(BasicTest):
    def test_open_url(self):
        self.driver.get("http://localhost:5000/")
        assert 'Log-Viewer' in self.driver.title

    def test_title(self):
        self.driver.get("http://localhost:5000/")
        assert 'LOG-Bottle' in self.driver.page_source

# @pytest.mark.usefixtures("chrome_driver_init")
# class Basic_Chrome_Test:
#     pass
# class Test_URL_Chrome(Basic_Chrome_Test):
#         def test_open_url(self):
#             self.driver.get("http://localhost:5000/")
#             assert 'Log-Viewer' in self.driver.title

Aufruf…

pytest --capture=no -v --html=pytest_selenium_report.html tests/test_start_page.py

Liste der Log-Dateien

Test zum noch nicht existierenden Code

import sys, os
myPath = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, myPath + '/../')
print(sys.path)

import logloader

class TestLogfileHandling():

    def test_logfile_list(self):
    assert logloader.getlogfilelist('./logs') == ['access.nginx.1.log', 'nginx_logfile.log']

Anpassungen im Hauptprogramm

Nachdem die neue Funktionalität getestet und implementiert ist, geht es an die Nutzung: In App.py muss id index-Funktion erweiter werden, neu ist die Funktion getlogfiles().

@ROOT.route('/')
def index():
    content = "irgend ein Inhalt"
    files = getlogfiles()
    return template('templates/index.html',
                content=content,
                menues=MENUES,
                files=getlogfiles())

def getlogfiles():
    files  = logloader.getlogfilelist()
    return files

Anpassungen im Menü

siehe: templates/gui.html

<div id="switcher" class="switcher pa2">
     <button>
       <a href="/">Start</a>
     </button>
     <select>
      {% for file in files %}
     <option>
     {{ file }}
     <option>
     {% endfor %}
     </select>

 </div>