edhouse-CookieGdpr-Policy-s
4313043
0
/cz/gdpr/
532650B6B

Zpět na Blog

NávodySQA

Prezentace výsledků testování v Streamlit - 1. díl - tabulky

Tech_blog

Prezentace výsledků testování v Streamlit - 1. díl - tabulky

Streamlit je framework, pomocí kterého můžete převést data na interaktivní webové aplikace. K dispozici je zdarma a jediné, co budete potřebovat, je znalost Pythonu. Nejvíce se využívá pro zpracování vědeckých dat, ale my si ukážeme, jak pomocí Streamlit prezentovat výsledky testování.

Instalace

Streamlit by měl být součástí každého balíčkovacího systému, já budu používat pip. Více informací ohledně instalace najdete na oficálních stránkách framewroku.

Kromě Streamlitu si nainstalujem také Pandas pro práci s daty:

pip install streamlit
pip install pandas

Hello world

Vytvoříme nový soubor hello-world.py a vložíme do něj následující kód:

import streamlit as stst.markdown("Hello world")

Spuštěním si ověříme, že vše funguje, jak má:

streamlit run .\hello-world.py

Testovací data

Pro účely tohoto seriálu jsem vytvořil jednoduchou tabulku s výsledky testů (test-results.csv):

Vykreslení tabulky

Vykreslení tabulky je jednoduché, pomocí Pandas načteme datový soubor a ten následně vykreslíme:

import pandas as pd
import streamlit as st

st.title("Test results")
df = pd.read_csv("test-results.csv")

st.dataframe(df)

Zvýraznění pomocí barev

Následně si vytvoříme funkci colorize, ve které definujeme, jak budou buňky označené, a potom ji aplikujeme pomocí applymap. Jako subset použijeme názvy sloupců (df.columns), tzn. hlavičku tabulky:

def colorize(val):
    if val == "Passed":
        return f'background-color: green; color:white'
    if val == "Failed":
        return f'background-color: red; color:white'
    else:
        return None

st.dataframe(df.style.applymap(colorize, subset=df.columns))

Filtrování dat

Nejdříve si vytvoříme seznam verzí, se kterým budeme dále pracovat. Pomocí df.columns zjistíme názvy sloupců, které obsahují právě číslo verze. Jen přeskočíme první sloupec, protože ten číslo verze neosahuje:

versions = []
i = 0
for version in df.columns:
    if i > 0:
        versions.append(version)
    i += 1

A můžeme začít tabulku filtrovat. Vytvoříme si select boxy s výsledky a verzemi:

filter_result = st.multiselect(
    label='Result',
    options=('Passed', 'Failed'),
    default=('Passed', 'Failed')
    )
filer_version = st.multiselect(
    label='Version',
    options=versions,
    default=versions)

Chtěl jsem, aby ve výchozím stavu byly vybrané všechny hodnoty, proto jsem “naplnil” oba parametry options a default stejnými hodnotami.

Následně už nám stačí jen data přefiltrovat na základě vybraných hodnot. Použijeme k tomu metody pandas.DataFrame.loc a pandas.DataFrame.iloc, které nám umožňují přistupovat na jednotlivé buňky pomocí zadaných parametrů a pandas.DataFrame.isin, která nám je pomůže odfiltrovat.

Aby se nám v tabulce stále zobrazoval i první sloupec s názvem testu, explicitně ho přidáme do filtrování verzí:

filer_version.append("Test")
df = df.loc[:, df.columns.isin(filer_version)]

Pro filtrování pomocí výsledků potřebujeme prohledávanou oblast omezit jen na sloupce s výsledky, proměnná num udává, kolik sloupců máme na filtr použit:

num = -1 * len(versions)
df = df[df.iloc[:,num:].isin(filter_result).any(axis=1)]

Celý skript si můžete stáhnout zde: 01-table.py

Sdílet článek

Autor

Jan Zatloukal

Jan ZatloukalTester a vývojář se zálibou v automatizaci a zlepšování procesu vývoje. Aktuálně pracuji na projektu automatizace elektronových mikroskopů v Pythonu.