构建Testlink MCP并集成到Copilot(二)
前一篇里已经在vscode或者pycharm里能通过mcp server获取内网testlink信息了,现在开始做实际需要的功能。
为了串通前一篇提及到的自动生成的流程,至少需要能获取单个或多个test case以及能创建单个或多个test case。
对于获取信息来说,我们需要提供信息用于搜索查询,这一般有两个方式,一个是通过Context来要求用户输入,一个是把提示词里的信息摘取出来作为关键词。选用后者。
对于通过Context要求输入,可以定义一个数据model,等待并校验用户输入并传入后续的操作中,简单例子是:
from fastmcp import FastMCP, Context
from dataclasses import dataclass
@dataclass
class CaseInfo:
case_id: str
@app.tool()
async def create_test_case(ctx: Context) -> dict:
"""Retrieve Test Case in testlink."""
result = await ctx.elicit(
message="Provide info to get a test case in TestLink: case_id.",
response_type=CaseInfo
)
if result.action == "accept":
case_info = result.data
else:
return {"error": "Cancelled by user."}
# 这里写获取case信息的步骤,因为没有采用这个方式,所以代码省略
为了能全自动化整个过程,我选择了后者,这样不会打断行为,不用时不时地人为监守。
获取到的test case实际信息非常多,包含了version、执行、维护者等各种信息,对于自动生成脚本的prompts来说并不必要,所以这里最好是筛选一下信息,将有用的返回给Copilot,不做多余干扰。这里选择将name、summary、precondition、steps以固定格式返回。
@app.tool()
async def get_test_case(case_id: str = "undefined") -> dict:
"""Retrieves details of a test case by ID from testlink"""
try:
tl = handle_headers().get_client()
origin_tc = tl.getTestCase(testcaseexternalid=case_id)
if isinstance(origin_tc, list) and origin_tc:
origin_tc = origin_tc[0]
tc = {"Title": origin_tc.get("name", ""),
"Summary": origin_tc.get("summary", ""),
"Preconditions": origin_tc.get("preconditions", ""),
"Steps": [{
step["step_number"]: {"actions": step["actions"],
"expected_results": step["expected_results"]
}}
for step in origin_tc.get("steps", [])]
}
return tc
except Exception as e:
return {"error": f"Failed to get test case: {str(e)}"}
对于取多个test case可以是不同目录下的case,也可以是单个test suite下的所有case,方法和上面的类似,调用不同的api。
比如test suite下的所有的case用下面这个,当然要记得取出关键信息,不要存在干扰copilot生成脚本的因素。
cases = tl.getTestCasesForTestSuite(suite_id, True, "full") # 包含suite下的suite和case
效果类似下图中的:

另外有个需要注意的是,大模型是知道testlink的,但需要让它知道是从哪个testlink找,否则它不一定每次都能调用到mcp,可能会优先去搜索公网上的公开testlink,然后告诉你拿不到。
所以可以在自己的copilot-instructions.md中加上类似下面的信息,明确告知跟testlink有关的任务都指向内网mcp。
## Interact with testlink
- When any task related to testlink such as get test case, create test case, etc., call mcp tool.
- If not provide author login name, ask user to provide it.