App testing

Streamlit 应用测试框架使开发人员能够构建和运行无头测试,这些测试直接执行他们的应用代码,模拟用户输入,并检查渲染输出的正确性。

提供的类AppTest模拟了一个运行中的应用程序,并提供了通过API而不是浏览器UI来设置、操作和检查应用程序内容的方法。它可以用于编写应用程序在各种场景下的自动化测试。然后可以使用像pytest这样的工具来运行这些测试。一个典型的模式是为应用程序构建一套测试套件,以确保应用程序在演进过程中功能的一致性,并在本地和/或在像Github Actions这样的CI环境中运行这些测试。

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

容器元素的表示,包括:

  • 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.buttonst.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()
forum

还有问题吗?

我们的 论坛 充满了有用的信息和Streamlit专家。