update_test_execution
Update a test case execution result in a QTM4J test cycle by specifying the cycle ID, execution ID, and result status (Pass, Fail, Blocked, etc.). Optionally add a comment, actual time, environment, or build ID. Returns HTTP 204 on success.
Instructions
Update a single test case execution result inside a test cycle. Use testCaseExecutionId from get_test_cycle_executions. executionResultId: 239443=Not Executed, 239444=Pass, 239441=Fail, 239442=Work In Progress, 239440=Blocked. Returns 204 on success.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| cycleId | Yes | Test cycle ID | |
| testCaseExecutionId | Yes | Test case execution ID | |
| executionResultId | No | Execution result/status ID | |
| environmentId | No | Environment ID | |
| buildId | No | Build ID | |
| comment | No | Execution comment | |
| actualTime | No | Actual time spent in milliseconds |
Implementation Reference
- src/index.ts:453-459 (handler)Handler function that sends a PUT request to update a test case execution, returning a success message.
async ({ cycleId, testCaseExecutionId, ...rest }) => { await qtmFetch( `/testcycles/${cycleId}/testcase-executions/${testCaseExecutionId}`, { method: "PUT", body: JSON.stringify(rest) } ); return ok({ message: `Execution ${testCaseExecutionId} updated` }); } - src/index.ts:444-452 (schema)Input schema for update_test_execution: cycleId, testCaseExecutionId, and optional fields for result, environment, build, comment, and actual time.
{ cycleId: ID.describe("Test cycle ID"), testCaseExecutionId: ID.describe("Test case execution ID"), executionResultId: z.number().int().optional().describe("Execution result/status ID"), environmentId: z.number().int().optional().describe("Environment ID"), buildId: z.number().int().optional().describe("Build ID"), comment: z.string().optional().describe("Execution comment"), actualTime: z.number().int().optional().describe("Actual time spent in milliseconds"), }, - src/index.ts:441-460 (registration)Registration of the 'update_test_execution' tool via the 'tool' wrapper which calls server.registerTool.
tool( "update_test_execution", "Update a single test case execution result inside a test cycle. Use testCaseExecutionId from get_test_cycle_executions. executionResultId: 239443=Not Executed, 239444=Pass, 239441=Fail, 239442=Work In Progress, 239440=Blocked. Returns 204 on success.", { cycleId: ID.describe("Test cycle ID"), testCaseExecutionId: ID.describe("Test case execution ID"), executionResultId: z.number().int().optional().describe("Execution result/status ID"), environmentId: z.number().int().optional().describe("Environment ID"), buildId: z.number().int().optional().describe("Build ID"), comment: z.string().optional().describe("Execution comment"), actualTime: z.number().int().optional().describe("Actual time spent in milliseconds"), }, async ({ cycleId, testCaseExecutionId, ...rest }) => { await qtmFetch( `/testcycles/${cycleId}/testcase-executions/${testCaseExecutionId}`, { method: "PUT", body: JSON.stringify(rest) } ); return ok({ message: `Execution ${testCaseExecutionId} updated` }); } ); - src/index.ts:172-184 (helper)Helper wrapper around server.registerTool used to register all tools concisely.
const tool = <Shape extends z.ZodRawShape>( name: string, description: string, inputSchema: Shape, // eslint-disable-next-line @typescript-eslint/no-explicit-any callback: (args: z.infer<z.ZodObject<Shape>>) => Promise<any> ) => server.registerTool( name, { description, inputSchema }, // eslint-disable-next-line @typescript-eslint/no-explicit-any callback as any );