Apptest в streamlit python
Кто может подсказать, почему не работает этот код, или поделиться ссылкой на статью с похожими примерами? Заранее спасибо!
users.py
import datetime
import os
import time
from dotenv import load_dotenv
import pandas as pd
import streamlit as st
from utils import check_access
load_dotenv()
DATABASE_URL = os.getenv("DATABASE_URL")
from sqlalchemy import create_engine
engine = create_engine(DATABASE_URL)
st.markdown(
"""
<style>
#MainMenu {visibility: hidden;}
footer {visibility: hidden;}
</style>
""",
unsafe_allow_html=True,
)
st.markdown(
r"""
<style>
.stDeployButton {
visibility: hidden;
}
</style>
""",
unsafe_allow_html=True,
)
if check_access():
date_begin = st.date_input(
"Дата с:", value=datetime.date(2024, 1, 1), format="DD.MM.YYYY"
)
date_end = st.date_input(
"Дата по:", value=datetime.date(2024, 12, 31), format="DD.MM.YYYY"
)
user_filter = st.text_input("Фильтр по пользователю (email)")
additional_filter = ""
if user_filter:
additional_filter = f"AND email = '{user_filter}'"
query = f"""
SELECT last_name, first_name, middle_name, birthday, created_at, phone, email, user_email FROM public.user
WHERE created_at BETWEEN '{date_begin} 00:00:00' AND '{date_end} 23:59:59' {additional_filter}
"""
data = pd.read_sql_query(query, con=engine)
# Функция для форматирования номера телефона
def format_phone(phone):
if pd.notna(phone) and phone.strip():
clean_phone = "".join(filter(str.isdigit, phone))
if len(clean_phone) >= 11:
return f"+7({clean_phone[1:4]}){clean_phone[4:7]}-{clean_phone[7:9]}-{clean_phone[9:11]}"
return phone
# Функция для преобразования строки даты в формат 'DD.MM.YYYY'
from datetime import datetime
def convert_date(date_str):
try:
# Преобразование строки в объект datetime
date_obj = datetime.strptime(date_str, "%Y-%m-%d")
# Возвращаем дату в формате 'DD.MM.YYYY'
return date_obj.strftime("%d.%m.%Y")
except ValueError:
# В случае ошибки преобразования возвращаем None или оригинальную строку
return None
# Применение функции к каждому элементу столбца 'birthday'
data["birthday"] = [convert_date(date) for date in data["birthday"]]
def rename_columns(df):
return df.rename(
columns={
"created_at": "Дата создания",
"phone": "Телефон",
"email": "Электронная почта",
"user_email": "Email пользователя",
"last_name": "Фамилия",
"first_name": "Имя",
"middle_name": "Отчество",
"birthday": "Дата рождения",
}
)
# Применяем функцию форматирования и переименовываем столбцы
data["phone"] = data["phone"].apply(format_phone)
data = rename_columns(data)
st.dataframe(data, use_container_width=True)
test_users.py
import pytest
from streamlit.testing.v1 import AppTest
@pytest.fixture(scope="module")
def app_test():
return AppTest.from_file(
"../pages/users.py",
)
def test_date_inputs(app_test):
result = app_test.run()
# Вывод всех доступных элементов для отладки
date_inputs = result.get("date_input")
print("Date inputs found:", date_inputs)
assert any(
"Дата с:" in date_input.label for date_input in date_inputs
), "Field 'Дата с:' not found"
assert any(
"Дата по:" in date_input.label for date_input in date_inputs
), "Field 'Дата по:' not found"
def test_text_input(app_test):
result = app_test.run()
# Вывод всех доступных элементов для отладки
text_inputs = result.get("text_input")
print("Text inputs found:", text_inputs)
assert any(
"Фильтр по пользователю (email)" in text_input.label
for text_input in text_inputs
), "Text input 'Фильтр по пользователю (email)' not found"
def test_data_display(app_test):
result = app_test.run()
# Вывод всех доступных элементов для отладки
dataframes = result.get("dataframe")
print("Dataframes found:", dataframes)
assert len(dataframes) > 0, "No dataframes found"
dataframe = dataframes[0]
expected_columns = [
"Фамилия",
"Имя",
"Отчество",
"Дата рождения",
"Дата создания",
"Телефон",
"Электронная почта",
"Email пользователя",
]
for column in expected_columns:
assert column in dataframe.columns, f"Column '{column}' not found in dataframe"
Ошибка:
2024-05-24 10:05:50.264 Uncaught app exception
Traceback (most recent call last):
File "c:\Users\Nestor\git_quest\sb_report\.venv\Lib\site-packages\streamlit\runtime\scriptrunner\script_runner.py", line 584, in _run_script
exec(code, module.__dict__)
File "C:\Users\Nestor\git_quest\sb_report\src\pages\users.py", line 8, in <module>
from utils import check_access
ImportError: cannot import name 'check_access' from 'utils' (C:\Users\Nestor\git_quest\sb_report\src\testcases\utils.py)
======================================================== short test summary info =========================================================
FAILED test_users.py::test_date_inputs - AssertionError: Field 'Дата с:' not found
FAILED test_users.py::test_text_input - AssertionError: Text input 'Фильтр по пользователю (email)' not found
FAILED test_users.py::test_data_display - AssertionError: No dataframes found