This release is a pre-release and may not be stable for production use.
Microsoft Agents Testing
Testing utilities for the Microsoft 365 Agents SDK for Python. This package provides an in-memory channel adapter, fluent conversation assertions, and a mock user-token client so agent behavior can be tested without a live channel or token service.
Release Notes
| Version | Date | Release Notes |
|---|---|---|
| 1.5.0 | 2026-08-26 | 1.5.0 Release Notes |
Features
TestAdapterruns activities through the normal middleware and agent pipeline while capturing outgoing activities in memory.TestFlowprovides fluent helpers for sending activities and asserting replies in order.MockUserTokenClientsupports stored tokens, magic codes, sign-out, token status, and token-exchange scenarios.- Async-first APIs work with the SDK's standard
TurnContextandChannelAdapterabstractions.
Installation
pip install microsoft-agents-testing
Quick Start
import pytest
from microsoft_agents.hosting.core import TurnContext
from microsoft_agents.testing import TestAdapter, TestFlow
@pytest.mark.asyncio
async def test_echo_agent():
adapter = TestAdapter()
async def on_turn(context: TurnContext):
await context.send_activity(f"Echo: {context.activity.text}")
await (
TestFlow(adapter, on_turn)
.send("hello")
.assert_reply("Echo: hello")
.assert_no_more_replies()
.start_test()
)
Reply Assertions
Replies can be matched by exact text, partial text, activity properties, or a custom synchronous or asynchronous validator:
from microsoft_agents.activity import Activity, ActivityTypes
def validate_reply(reply: Activity):
assert reply.type == ActivityTypes.message
assert reply.text is not None
assert reply.text.startswith("Hello")
await (
TestFlow(adapter, on_turn)
.send("hi")
.assert_reply_contains("Hello")
.send("details")
.assert_reply(validate_reply)
.start_test()
)
TestFlow also supports conversation updates, typing indicators, delays,
mixed activity transcripts, and configurable reply timeouts.
Testing OAuth Flows
TestAdapter uses MockUserTokenClient by default. Add a token to test an
already-authenticated user:
adapter = TestAdapter(channel_id="msteams")
adapter.add_user_token(
connection_name="my-connection",
channel_id="msteams",
user_id="user1",
token="test-token",
)
Token exchange can be configured in the same way:
adapter.add_exchangeable_token(
connection_name="my-connection",
channel_id="msteams",
user_id="user1",
exchangeable_item="exchange-token",
token="exchanged-token",
)
These tokens are stored only in memory and are intended exclusively for tests.
Scope
The adapter models the turn-processing boundary needed by unit tests. It does not contact Connector Service, create real proactive conversations, or emulate channel-specific delivery behavior.
Related Packages
microsoft-agents-hosting-coreprovides the agent runtime and abstractions used by this package.
Release files for microsoft-agents-testing 1.6.1.dev6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| microsoft_agents_testing-1.6.1.dev6.tar.gz | 16.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| microsoft_agents_testing-1.6.1.dev6-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 34.0 kB
Release files / microsoft_agents_testing-1.6.1.dev6.tar.gz
| Download URL | microsoft_agents_testing-1.6.1.dev6.tar.gz |
|---|---|
| Size | 16.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5dc56fd7890018daf24d898cc26935a90c4528403cfff46a00ef6144d619d3a5
|
|
BLAKE2b-256 checksum How to use checksums |
f95f2723a5011fdbf2ef2a82f4757064b753a8f4277eaa9ae2a041ff3de6f149
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
RestSharp/106.13.0.0
|
Release files / microsoft_agents_testing-1.6.1.dev6-py3-none-any.whl
| Download URL | microsoft_agents_testing-1.6.1.dev6-py3-none-any.whl |
|---|---|
| Size | 17.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
019a7997cd4c8a8643729e91a8793adbf364e0188018fe48fa39d4e716524353
|
|
BLAKE2b-256 checksum How to use checksums |
986f7637279e5be622d2387b7388e6b2dd4b6b57589dde6bd0180ed56d53f4b3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
RestSharp/106.13.0.0
|