New in 2.20.0
wxo-test-case-generation skill guides Bob through creating, validating, and saving test cases for a watsonx Orchestrate agent. It starts from your agent and tool definitions, proposes scenarios, and produces a validated test case JSON file.
Source location: skills/wxo-test-case-generation/SKILL.md in the ADK repository.
Overview
A request to “generate a test” is often sparse, and an agent can expose many unrelated tools. The skill moves from broad to specific and asks questions only when it can’t infer the answer:- Agent capabilities
- Scenario families
- Proposed test cases
- Clarification of details that define the test, if needed
- A generated test case
Key capabilities
- Scenario discovery: Groups the agent’s tools into scenario families and proposes concrete test cases for the ones you choose.
- Minimal clarification: Asks only about inputs that define the test.
- Unified test case output: Generates a single JSON file that contains
tool_callsteps, a dependency graph, andassert_llmassertions. - Validation against a live agent: Runs a format check, then validates the test by directing the agent through the declared tool chain with the
chat_with_agenttool of the watsonx Orchestrate ADK MCP server. - Post-validation review: Runs a story review and an assertion review on the observed conversation, and revises the
storyandassert_llmentries. - Upload: Uploads approved test cases with the
upload_test_casetool. - Summary: Writes a
summary.mdfile that lists the scenarios you chose, the test cases created, and where each file is saved.
Prerequisites
- Python environment for your project that has the evaluation framework (
agentops) installed. The skill runs a preflight check and stops if the import fails. - The watsonx Orchestrate ADK MCP server configured in Bob, connected to the environment where your agent is imported. The skill uses the MCP server for validation and upload.
- The agent definition file and the tool definitions in your current directory. If Bob can’t find them, it asks you for the paths. Without them, test case generation might be less accurate.
Test case format
Each generated test case is one JSON file with these parts:Tool steps
- Each
tool_callstep keeps its expected arguments inargs. - Every argument has an
arg_matchingvalue ofignore. The expected values guide the instructions that Bob sends to the agent, but validation doesn’t compare them against the values that the agent produces. - Name repeated calls to the same tool
tool_name_1,tool_name_2, and so on, and keep the realtool_namein each step.
Assertions
Eachassert_llm entry has only the following fields:
string
required
Always
assert_llm.string
required
observed checks the outcome of the conversation. policy checks a constraint, such as data that the agent must not request.string
conversation (default) or response. Use response only for a requirement on the final assistant message.string
required
One sentence that an LLM judge can answer as pass or fail. Describe the outcome and behavior. Don’t name tools or tool arguments.
name and don’t appear in goals.
Activation
In Bob, ask for test cases for your agent:What happens after a test case is generated
- Bob validates the test case against the live agent and reports the run status and the number of matched tool steps.
- Bob reviews the conversation and revises the story and assertions.
- You review the test case and request changes if needed.
- When you approve the test case, Bob asks where to save it. The default path is
{output_folder}/{scenario_id}/test-{proposal_id}.json. - If you ask for an upload, Bob uploads the saved file with the
upload_test_caseMCP tool. Bob reports success only after the MCP server confirms it.
Validation confirms that the agent calls the expected tools. It doesn’t evaluate the
assert_llm assertions.
