构建Testlink MCP并集成到Copilot(一)
现在已经完成了从需求分析->自动生成用例->自动生成脚本的过程,全部通过预定义的prompts和instructions让Copilot来完成的, 几乎不需要人为干涉了。
在这个流程中,增加了testlink的mcp server。因为testlink是个比较老的产品了,没有官方的mcp,于是根据公司内部需求自己给做了一个。testlink mcp在这个自动生成的流程中的作用是:分析需求后生成的测试用例直接保存在testlink与成员共享,直接获取testlink的新老case来生成自动化脚本。至于自动运行、自动分析错误、自动上线那是之后的事情了。
这里会以testlink部分功能为例介绍如何构建一个简易的mcp server。
--------
正式开始。
选择使用python3.12,基于FastMCP来构建,部署到服务器上用的uvicorn和nginx。对于testlink,因为还在用1.9.20的版本,一个比较老的testlink-api-python-client还能用上。
安装uv:
curl -LsSf https://astral.sh/uv/install.sh | sh
添加项目依赖:
uv add fastmcp testlink-api-python-client
uv sync
此时,项目根目录会新建一个.venv的目录,包含了需要的python包,可以直接激活这个虚拟环境。
为了能与testlink交互,需要先获取testlink的api key,代表登陆人身份。
登陆testlink后,在主页左上角点击my settings的图标

进入设置页面,如果从来没有生成过api key的话,需要点击'generate a new key', 已有的话直接复制key的值。

接下来先加一个在copilot里用提示词查询testlink版本的简单方法。
新增一个testlink的帮助类,utils/testlink_util.py,只用于获取链接。
import testlink
class TestLinkUtils:
def __init__(self):
self.url = "http://testlink_server_url/lib/api/xmlrpc/v1/xmlrpc.php"
self.key = "testlink_api_key" # 后面这里会传递参数进来
self._client = None
def get_client(self):
if self._client is None:
self._client = testlink.TestlinkAPIClient(self.url, self.key)
return self._client
在根目录新建一个server.py
from fastmcp import FastMCP
from utils.testlink_utils import TestLinkUtils
app = FastMCP("TESTLINK MCP Server")
@app.tool()
def get_version() -> dict:
"""Retrieves version of testlink."""
try:
tl = TestLinkUtils().get_client()
version = tl.testLinkVersion()
return {"testlink_version": version}
except Exception as e:
return {"error": f"Failed to get TestLink version: {str(e)}"}
if __name__ == "__main__":
app.run(transport="http", port=8000)