📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)

📝 职场经验干货:

软件测试工程师简历上如何编写个人信息(一周8个面试)

软件测试工程师简历上如何编写专业技能(一周8个面试)

软件测试工程师简历上如何编写项目经验(一周8个面试)

软件测试工程师简历上如何编写个人荣誉(一周8个面试)

软件测试行情分享(这些都不了解就别贸然冲了.)

软件测试面试重点,搞清楚这些轻松拿到年薪30W+

软件测试面试刷题小程序免费使用(永久使用)


想象一下:

🗣️ 对着 IDE 说:“生成支付模块的冒烟测试用例” → 自动生成符合规范的 Pytest 代码

📊 上传 Allure 报告 → AI 自动总结:“失败集中在优惠券叠加场景,建议补充边界值”

🔍 遇到偶发失败 → 问:“这个 Selenium 超时可能是什么原因?” → 结合历史日志给出根因

这就是 测试专属 AI Agent 的能力——将你的项目知识、测试经验、缺陷模式注入 AI,打造永不疲倦的质量副驾驶。

本文提供 端到端实现方案,从数据准备到 PyCharm 集成,助你落地专属 AI 助手。‍

🎯 一、为什么需要“测试专属”AI Agent?

表格

通用 AI(如 Copilot)  测试专属 AI Agent

❌ 不了解你的项目结构 ✅ 熟悉 tests/api/ vs tests/ui/ 目录规范

❌ 无法访问私有缺陷库 ✅ 学习过 Jira 中 1000+ 历史缺陷

❌ 生成泛化测试用例  ✅ 知道“支付必须校验幂等性”等业务规则

❌ 无法分析 Allure 报告  ✅ 能解析你的测试报告并提供建议

💡 核心价值:将团队隐性知识显性化,让新人秒变专家‍

🧱 二、系统架构设计

核心组件:

知识库:项目代码 + 缺陷数据 + 测试文档

向量化引擎:将文本转为语义向量

大模型:Qwen(高精度)或本地 CodeLlama(私有)

Agent 路由:根据问题类型选择知识源

PyCharm 集成:无缝嵌入开发环境‍

🛠️ 三、实战:四步构建你的测试 AI Agent

步骤 1:准备知识库(注入团队智慧)

1.1 项目代码索引

# index_code.py
from langchain_community.document_loaders import DirectoryLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_chroma import Chroma
from langchain_ollama import OllamaEmbeddings
def index_project_code(project_path: str, persist_dir: str):
    # 加载所有 Python 文件
    loader = DirectoryLoader(project_path, glob="**/*.py")
    docs = loader.load()
    # 按函数/类分块(保留上下文)
    text_splitter = RecursiveCharacterTextSplitter(
        chunk_size=600,
        chunk_overlap=100,
        separators=["\n\ndef ", "\n\nclass "]
    )
    splits = text_splitter.split_documents(docs)
    # 向量化并存储
    vectorstore = Chroma.from_documents(
        documents=splits,
        embedding=OllamaEmbeddings(model="nomic-embed-text"),
        persist_directory=persist_dir
    )
    vectorstore.persist()
    print(f"Indexed {len(splits)} code chunks to {persist_dir}")
# 执行索引
index_project_code("./my_project", "./vectorstores/code")

1.2 缺陷知识库构建​​​​​​​

# index_defects.py
import pandas as pd
from langchain_chroma import Chroma
from langchain_ollama import OllamaEmbeddings
def index_defects(jira_csv: str, persist_dir: str):
    df = pd.read_csv(jira_csv)
    # 构造缺陷描述文本
    defect_texts = []
    for _, row in df.iterrows():
        text = f"""
        缺陷ID: {row['issue_key']}
        标题: {row['summary']}
        描述: {row['description']}
        根因: {row['root_cause']}
        解决方案: {row['resolution']}
        模块: {row['component']}
        """
        defect_texts.append(text)
    # 向量化
    vectorstore = Chroma.from_texts(
        texts=defect_texts,
        embedding=OllamaEmbeddings(model="nomic-embed-text"),
        persist_directory=persist_dir
    )
    vectorstore.persist()
# 从 Jira 导出 CSV 后执行
index_defects("jira_defects.csv", "./vectorstores/defects")

📌 数据源建议:

代码:Git 仓库

缺陷:Jira / Azure DevOps 导出

文档:Confluence / Markdown 测试规范

步骤 2:搭建 AI Agent 核心引擎

2.1 定义工具(Tools)​​​​​​​

# tools.py
from langchain_core.tools import tool
from langchain_chroma import Chroma
from langchain_ollama import OllamaEmbeddings
@tool
def search_code(query: str) -> str:
    """搜索项目代码库,返回相关代码片段"""
    vectorstore = Chroma(
        persist_directory="./vectorstores/code",
        embedding_function=OllamaEmbeddings(model="nomic-embed-text")
    )
    results = vectorstore.similarity_search(query, k=3)
    return "\n\n".join([doc.page_content for doc in results])
@tool
def search_defects(query: str) -> str:
    """搜索历史缺陷库,返回相似缺陷案例"""
    vectorstore = Chroma(
        persist_directory="./vectorstores/defects",
        embedding_function=OllamaEmbeddings(model="nomic-embed-text")
    )
    results = vectorstore.similarity_search(query, k=2)
    return "\n\n".join([doc.page_content for doc in results])

2.2 创建 Agent 执行器​​​​​​​

# agent.py
from langchain import hub
from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain_ollama import OllamaLLM
from tools import search_code, search_defects
def create_test_agent():
    # 初始化大模型(可替换为阿里云百炼 API)
    llm = OllamaLLM(model="qwen:7b", temperature=0.2)
    # 获取预设 Prompt(支持中文)
    prompt = hub.pull("hwchase17/openai-functions-agent")
    # 绑定工具
    tools = [search_code, search_defects]
    agent = create_tool_calling_agent(llm, tools, prompt)
    return AgentExecutor(agent=agent, tools=tools, verbose=True)
# 全局 Agent 实例
test_agent = create_test_agent()

步骤 3:扩展高级能力(测试专项)

3.1 Allure 报告分析

# allure_analyzer.py
import xml.etree.ElementTree as ET
def parse_allure_report(report_path: str) -> str:
    """解析 Allure 测试报告,提取失败用例模式"""
    tree = ET.parse(f"{report_path}/widgets/summary.json")
    summary = tree.getroot()
    failed_tests = []
    for suite in summary.findall(".//testSuite"):
        if suite.find("statistic/failed").text != "0":
            suite_name = suite.get("name")
            failed_count = suite.find("statistic/failed").text
            failed_tests.append(f"{suite_name}: 失败 {failed_count} 个用例")
    return "近期失败热点:\n" + "\n".join(failed_tests[:5])
# 在 Agent 中注册为工具
@tool
def analyze_allure() -> str:
    return parse_allure_report("./allure-report")

3.2 测试用例生成器

# test_generator.py

TEST_PROMPT_TEMPLATE = """

你是一名资深测试工程师,请为以下函数生成 pytest 用例:

要求:

1. 覆盖正常流、异常流、边界值

2. 使用 @pytest.mark.parametrize

3. 包含中文注释

4. 遵循团队规范:用例名以 test_ 开头

函数代码:​​​​​​​

@tool
def generate_test_cases(code_snippet: str) -> str:
    """根据代码片段生成测试用例"""
    from langchain_ollama import OllamaLLM
    llm = OllamaLLM(model="qwen:7b")
    prompt = TEST_PROMPT_TEMPLATE.format(code=code_snippet)
    return llm.invoke(prompt)

步骤 4:部署与集成(让 Agent 随时可用)

4.1 启动 HTTP 服务​​​​​​​

# server.py
from flask import Flask, request, jsonify
from agent import test_agent
app = Flask(__name__)
@app.route('/ask', methods=['POST'])
def ask_agent():
    query = request.json['query']
    # 路由逻辑:根据问题类型选择工具
    if "生成测试" in query or "写用例" in query:
        # 调用专用生成器
        code = request.json.get('code', '')
        result = generate_test_cases(code)
    elif "allure" in query or "报告" in query:
        result = analyze_allure()
    else:
        # 通用问答
        response = test_agent.invoke({"input": query})
        result = response["output"]
    return jsonify({"answer": result})
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080)

4.2 集成到 PyCharm

安装 REST Client 插件

创建 test_agent.http 文件:​​​​​​​

### 生成测试用例
POST http://localhost:8080/ask
Content-Type: application/json
{
  "query": "生成用户登录测试用例",
  "code": "def login(username, password): ..."
}
### 分析缺陷
POST http://localhost:8080/ask
Content-Type: application/json
{
  "query": "支付超时有哪些历史案例?"
}

在编辑器中按 Alt+Enter → Send Request,结果直接显示

💡 进阶:用 PyCharm Plugin SDK 开发侧边栏插件,实现语音输入!‍

📊 四、效果验证:真实场景演示

场景 1:生成符合规范的测试用例

用户输入:

“为 calculate_discount 函数生成测试用例,需覆盖 VIP/普通用户”

Agent 输出:​​​​​​​

import pytest
@pytest.mark.parametrize("user_level, expected_discount", [
    ("VIP", 0.8),      # VIP 享受 8 折
    ("regular", 1.0),  # 普通用户无折扣
    ("", 1.0),         # 空用户级别视为普通
])
def test_calculate_discount(user_level, expected_discount):
    """测试不同用户级别的折扣计算"""
    price = 100.0
    result = calculate_discount(price, user_level)
    assert result == price * expected_discount

场景 2:分析缺陷根因

用户输入:

“最近支付模块有哪些偶发失败?”

Agent 输出:

根据历史缺陷库,近 3 个月支付模块偶发失败主要集中在:

DEF-1234:第三方支付网关超时(发生于网络波动时)

解决方案:增加 3 秒超时重试机制

DEF-1567:并发下单导致库存超卖

解决方案:数据库行锁 + 库存预占

建议:在自动化中增加网络延迟混沌实验‍

⚠️ 五、避坑指南与优化建议

常见问题:

问题

解决方案

响应慢

1. 用 GPU 加速 Ollama
2. 对知识库分片检索

答案不准确

1. 优化分块策略(按函数而非固定长度)
2. 添加后处理校验

内存溢出

1. 限制向量库大小
2. 使用 FAISS 替代 Chroma(更大规模)

提升效果的关键:

高质量知识注入:清洗缺陷数据,补充根因字段

精准 Prompt 设计:明确角色(“你是一名金融测试专家”)

反馈闭环:记录用户对答案的评分,持续优化‍

💎 结语:你的团队知识,值得被 AI 记住

测试专属 AI Agent 不是炫技,而是将团队多年积累的隐性知识转化为可复用的资产。

通过本文方案,你将获得:

✅ 24 小时在线的质量顾问

✅ 新人快速上手的智能导师

✅ 缺陷预防的预测能力

现在就开始行动:

今天:用 Ollama 跑通 Qwen 7B

本周:索引你的项目代码库

本月:在团队内试用 AI Agent,收集反馈

未来的质量保障,属于那些善用 AI 放大专业价值的人。‍

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

​​

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐