Test chat bots, voice assistants, and IVR menus with pytest using a small Conversation object and a callable bot adapter. Use when the user wants to write rule-based assertions over multi-turn dialogue without bringing in an LLM dependency, when they have a chatbot reachable as a Python callable or HTTP webhook, when they need to keep per-conversation state across turns and assert on slot filling, when they want pytest-native fixtures and a printable transcript on failure, or when they mention voice-assistant testing, IVR menu testing, conversational AI testing, LLM bot testing (used as the target under test, not as the matcher), expect matchers for bot replies, or multi-turn dialogue tests.
99
100%
Does it follow best practices?
Impact
97%
1.56xAverage score across 3 eval scenarios
Passed
No known issues
Multi-turn slot-filling bot with metadata and latency matchers
Bot adapter signature
100%
100%
conversation_factory usage
100%
100%
convo.say() for turns
100%
100%
Turn.metadata intent recording
100%
100%
Turn.metadata slot recording
100%
100%
Turn.metadata latency recording
100%
100%
convo.state for cross-turn slots
100%
100%
has_intent matcher
100%
100%
has_slot matcher
100%
100%
has_state matcher
100%
100%
responds_within matcher
100%
100%
convo.last.bot usage
50%
100%
Expect matchers suite for a customer support bot
BotAdapter signature
100%
100%
conversation_factory fixture
0%
100%
convo.last.bot usage
100%
100%
expect.contains used
100%
100%
contains case-insensitive default
100%
100%
expect.not_contains used
100%
100%
not_contains guards internal details
100%
100%
expect.regex used
100%
100%
regex match object used
0%
0%
expect.one_of used
100%
100%
results.txt present
100%
100%
Adapter error propagation and add_user history seeding
add_user seeding
0%
100%
Exception propagation
46%
100%
Partial turn in turns
0%
100%
Partial turn bot empty
0%
100%
convo.history used
0%
100%
history is tuples
0%
100%
convo.transcript() called
0%
100%
expect.contains used
0%
100%
conversation_factory fixture
0%
100%