干了10年+测试,我有个习惯:遇到新工具、新框架,第一反应就是上 GitHub 看看。但说实话,这个过程挺折磨人的。
记得去年想找个好用的 API 测试框架,我在 GitHub 上搜了整整一个下午。输入"api testing",出来 2 万多个结果。点开前几个,要么是几年没更新的,要么文档写得跟天书一样。有的时候你明明知道某个工具很火,但就是找不到它的最佳实践项目。
我花了一个周末时间,基于 MCP + OpenAI SDK + Chainlit 搞了个小工具,它能让 AI 直接调用 GitHub API,帮我们做那些繁琐的搜索、分析工作。
现在,我可以用自然语言告诉它:"帮我找找最近半年最火的 Python 测试框架,要测试覆盖率高的,社区活跃的。" 然后它就能给我一份详细的报告,包括项目特点、代码质量、社区活跃度,甚至还能分析测试结构。
这篇文章,就是我想跟你分享的这个工具,以及我是怎么用它来提升学习效率的。
以前你想让 AI 分析一个 GitHub 项目,你得自己先搜出来,然后把链接、README 都复制粘贴给 AI。现在有了 MCP,你只需要说:"帮我分析一下 pytest 项目的测试结构",AI 就会自己:
我试过好几种方案,最后选了 Python + MCP + OpenAI + Chainlit,原因很简单:
Python 3.12+:测试工程师最熟悉的语言,不用学新东西
Chainlit:界面漂亮,还能看到 AI 的思考过程
LangChain:太复杂了,学起来头疼,而且很多功能我们用不上
Claude Desktop:功能受限,想定制点东西都不行
node --version # 应显示 v22.x.x 或更高
python --version # 应显示 Python 3.12.x 或更高
Node.js: https://nodejs.org/
Python: https://www.python.org/downloads/
虚拟环境是 Python 项目的最佳实践,它可以隔离项目依赖,避免版本冲突。
mkdir mcp-github-assistant
重要提示:每次打开新的终端窗口时,都需要重新激活虚拟环境。
pip install mcp openai chainlit python-dotenv
openai:OpenAI API 客户端(兼容多种 AI 模型)
GitHub MCP 服务器是一个 Node.js 包,通过 npx 运行:
npx -y @modelcontextprotocol/server-github --version
如果看到版本号,说明安装成功。首次运行时,npx 会自动下载并缓存该包。
2.5 获取 GitHub Personal Access Token
这是最关键的一步,没有 Token 就无法访问 GitHub API。
登录 GitHub,访问 https://github.com/settings/tokens
点击 Generate new token → Generate new token (classic)
填写 Token 描述:MCP GitHub Assistant for Testing
设置过期时间:建议选择 90 days(可根据需要调整)
- public_repo(访问公开仓库)- 必选
- repo(完整仓库访问)- 不推荐(权限过大)
- delete_repo(删除仓库)- 不推荐(危险操作)
立即复制生成的 Token(格式:ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
Token 等同于密码,切勿分享或提交到 Git 仓库
如果 Token 泄露,立即在 GitHub 上撤销并重新生成
本方案支持多种 AI 模型,你可以根据预算和需求选择,这里以心流为例:
访问 https://platform.iflow.cn/
BASE_URL=https://apis.iflow.cn/v1
API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
在项目根目录创建 .env 文件,打开 .env,填入以下内容:
BASE_URL=https://apis.iflow.cn/v1
GITHUB_TOKEN=你的GitHub_Personal_Access_Token
"""GitHub助手 - 使用OpenAI SDK + MCP直接调用"""
from dotenv import load_dotenv
from openai import AsyncOpenAI
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
api_key=os.getenv("API_KEY"),
base_url=os.getenv("BASE_URL")
GITHUB_PARAMS = StdioServerParameters(
args=["-y", "@modelcontextprotocol/server-github"],
"GITHUB_TOKEN": os.getenv("GITHUB_TOKEN"),
async def get_mcp_tools(session):
"""获取 MCP 工具并转换为 OpenAI 格式"""
mcp_tools = await session.list_tools()
"description": tool.description or "",
"parameters": tool.inputSchema,
for tool in mcp_tools.tools
cl.user_session.set("history", [])
content="🤖 GitHub 助手已上线!\n\n我可以帮您:\n"
"- 追踪 Issue 和 Pull Request\n\n"
async def main(message: cl.Message):
history = cl.user_session.get("history", [])
history.append({"role": "user", "content": message.content})
async with stdio_client(GITHUB_PARAMS) as (read, write):
async with ClientSession(read, write) as session:
await session.initialize()
openai_tools = await get_mcp_tools(session)
final_answer = cl.Message(content="")
while iteration < max_iterations and not task_completed:
response = await client.chat.completions.create(
model=os.getenv("AI_MODEL", ""),
msg_obj = response.choices[0].message
"content": msg_obj.content or "",
"tool_calls": msg_obj.tool_calls
if not msg_obj.tool_calls:
final_answer.content = msg_obj.content or ""
await final_answer.send()
for tool_call in msg_obj.tool_calls:
func_name = tool_call.function.name
func_args = json.loads(tool_call.function.arguments)
async with cl.Step(name=f"🔧 {func_name}") as step:
tool_result = await session.call_tool(func_name, func_args)
result_text = "\n".join([
c.text if hasattr(c, 'text') else str(c)
for c in tool_result.content
]) if hasattr(tool_result, 'content') else str(tool_result)
step.output = result_text
step.output = f"❌ 执行失败: {str(e)}"
"tool_call_id": tool_call.id,
# 如果达到最大迭代次数但任务未完成,生成最终回答
final_response = await client.chat.completions.create(
model=os.getenv("AI_MODEL", ""),
async for chunk in final_response:
if chunk.choices[0].delta.content:
await final_answer.stream_token(chunk.choices[0].delta.content)
await final_answer.send()
cl.user_session.set("history", history)
......
本文节选自第九十一期《51测试天地》
原创文章
《测试人员的GitHub开源项目探索指南:用AI助手加速学习之旅》
文章后续为大家详细讲解了:
使用场景、进阶技巧与学习方法论等
想继续阅读全文
或查看更多《51测试天地》的原创文章
请点击下方 阅读原文或扫描二维码 查看
声明:本文为51Testing软件测试网 blues_C 用户投稿内容,该用户投稿时已经承诺独立承担涉及知识产权的相关法律责任,并且已经向51Testing承诺此文并无抄袭内容。发布本文的用途仅仅为学习交流,不做任何商用,未经授权请勿转载,否则作者和51Testing有权追究责任。如果您发现本公众号中有涉嫌抄袭的内容,欢迎发送邮件至:editor@51testing.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。