App testing
Streamlit 应用测试框架使开发人员能够构建和运行无头测试,这些测试直接执行他们的应用代码,模拟用户输入,并检查渲染输出的正确性。
提供的类AppTest模拟了一个运行中的应用程序,并提供了通过API而不是浏览器UI来设置、操作和检查应用程序内容的方法。它可以用于编写应用程序在各种场景下的自动化测试。然后可以使用像pytest这样的工具来运行这些测试。一个典型的模式是为应用程序构建一套测试套件,以确保应用程序在演进过程中功能的一致性,并在本地和/或在像Github Actions这样的CI环境中运行这些测试。
The AppTest class
st.testing.v1.AppTest
st.testing.v1.AppTest
模拟一个运行的 Streamlit 应用程序以进行测试。
from streamlit.testing.v1 import AppTest
at = AppTest.from_file("streamlit_app.py")
at.secrets["WORD"] = "Foobar"
at.run()
assert not at.exception
at.text_input("word").input("Bazbat").run()
assert at.warning[0].value == "Try again."
AppTest.from_file
st.testing.v1.AppTest.from_file
从文件初始化一个模拟应用程序。
from streamlit.testing.v1 import AppTest
at = AppTest.from_file("streamlit_app.py")
at.secrets["WORD"] = "Foobar"
at.run()
assert not at.exception
AppTest.from_string
st.testing.v1.AppTest.from_string
从字符串初始化一个模拟应用程序。
from streamlit.testing.v1 import AppTest
app_script = """
import streamlit as st
word_of_the_day = st.text_input("What's the word of the day?", key="word")
if word_of_the_day == st.secrets["WORD"]:
st.success("That's right!")
elif word_of_the_day and word_of_the_day != st.secrets["WORD"]:
st.warn("Try again.")
"""
at = AppTest.from_string(app_script)
at.secrets["WORD"] = "Foobar"
at.run()
assert not at.exception
AppTest.from_function
st.testing.v1.AppTest.from_function
从函数初始化一个模拟应用。
from streamlit.testing.v1 import AppTest
def app_script ():
import streamlit as st
word_of_the_day = st.text_input("What's the word of the day?", key="word")
if word_of_the_day == st.secrets["WORD"]:
st.success("That's right!")
elif word_of_the_day and word_of_the_day != st.secrets["WORD"]:
st.warn("Try again.")
at = AppTest.from_function(app_script)
at.secrets["WORD"] = "Foobar"
at.run()
assert not at.exception
Testing-element classes
块
容器元素的表示,包括:
st.chat_message
st.columns
st.sidebar
st.tabs
- 应用程序的主体。
# at.sidebar returns a Block
at.sidebar.button[0].click().run()
assert not at.exception
元素
所有元素的表示基类,包括:
st.title
st.header
st.markdown
st.dataframe
# at.title returns a sequence of Title
# Title inherits from Element
assert at.title[0].value == "My awesome app"
按钮
st.button
和 st.form_submit_button
的表示。
at.button[0].click().run()
聊天输入
st.chat_input
的表示。
at.chat_input[0].set_value("What is Streamlit?").run()
复选框
st.checkbox
的表示。
at.checkbox[0].check().run()
颜色选择器
st.color_picker
的表示。
at.color_picker[0].pick("#FF4B4B").run()
日期输入
st.date_input
的表示。
release_date = datetime.date(2023, 10, 26)
at.date_input[0].set_value(release_date).run()
多选
st.multiselect
的表示。
at.multiselect[0].select("New York").run()
数字输入
st.number_input
的表示。
at.number_input[0].increment().run()
单选按钮
st.radio
的表示。
at.radio[0].set_value("New York").run()
选择滑块
st.select_slider
的表示。
at.select_slider[0].set_range("A","C").run()
选择框
st.selectbox
的表示。
at.selectbox[0].select("New York").run()
滑块
st.slider
的表示。
at.slider[0].set_range(2,5).run()
文本区域
st.text_area
的表示。
at.text_area[0].input("Streamlit is awesome!").run()
文本输入
st.text_input
的表示。
at.text_input[0].input("Streamlit").run()
时间输入
st.time_input
的表示。
at.time_input[0].increment().run()
切换
st.toggle
的表示。
at.toggle[0].set_value("True").run()
还有问题吗?
我们的 论坛 充满了有用的信息和Streamlit专家。