Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
29b99d2
feat: 添加 .env 示例文件,更新依赖说明,弃用本地模型依赖,改用 API 调用嵌入模型
Nov 11, 2025
445fd11
feat: 优化测试用例列表分页逻辑,修复当前页全选状态计算
Nov 11, 2025
cb7b901
feat: 更新测试用例表单,支持只发送变更字段,优化数据追踪逻辑
Nov 11, 2025
d1abb56
feat: 在聊天界面和LLM配置中添加对图像输入的支持
Nov 11, 2025
7037ccb
feat: 添加模型名称自动完成输入框,支持从 API 获取可用模型列表
Nov 11, 2025
882bb9f
Remove Turkish sentence starters from NLTK tokenizer data
Nov 13, 2025
33b7763
feat(langgraph): 增加大脑模式功能和增强聊天消息处理
Nov 18, 2025
1039f5b
feat: 添加项目凭据功能,支持管理项目的系统访问信息
Nov 18, 2025
697d09d
feat: 添加项目凭据信息格式化功能,并在系统提示词中支持注入凭据信息,优化用例生成
Nov 18, 2025
39d1794
feat: 添加编辑功能测试用例的接口,支持更新用例信息和步骤
Nov 18, 2025
6262b06
feat: 增加工具名称和思考过程标记,优化消息处理逻辑
Nov 18, 2025
9db9f45
feat: 添加聊天消息引用和页面激活后自动滚动到最新消息功能
Nov 18, 2025
07cd1fa
feat: 更新嵌入服务配置,支持自定义API并优化连接测试逻辑
Nov 18, 2025
22e35a9
feat: 添加模型测试功能,验证API连接和模型响应
Nov 18, 2025
5b5ecf5
feat: 更新默认API Key配置,优化开箱即用体验,添加自动创建功能和安全提示
Nov 19, 2025
f93bdc9
feat: 优化docker-compose.yml文件,调整健康检查命令格式,改善可读性
Nov 19, 2025
c3968eb
feat: 添加Project Management视图并更新Docker Compose配置。
Nov 19, 2025
7e2efc2
feat: 优化提交处理逻辑,确保无论编辑还是新建模式都能成功返回列表页
Nov 20, 2025
15ae0e3
feat: 添加知识库信号处理器,确保数据库与ChromaDB数据一致性,并实现向量存储缓存的清理机制
Nov 20, 2025
3c4338b
feat: 优化Word文档内容提取,增加提取过程中的日志记录和错误处理,支持嵌套表格提取3层
Nov 20, 2025
6f11e4d
feat: 添加审查配置模式和专门的报告视图
Nov 21, 2025
34f47f3
fix: 修复类型声明以提高代码可读性
Nov 21, 2025
58c4baf
feat: 更新Dockerfile以使用DaoCloud镜像,优化构建过程
Nov 25, 2025
868404b
feat():新增文档内容
zhaow-123-666 Nov 27, 2025
1e7d54e
Merge branch 'zhaow-v1.2.0' into 'v1.2.0'
MG-Duan Nov 28, 2025
869efdf
Merge remote-tracking branch 'github/master' into v1.2.0
Nov 28, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 7 additions & 3 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,10 @@ DJANGO_ADMIN_PASSWORD=admin123456
WHARTTEST_BACKEND_URL=http://backend:8000

# WHartTest API Key
# 请在 WHartTest 平台的"API密钥管理"页面生成 API Key,然后填写到这里
# 登录后访问:设置 -> API密钥管理 -> 创建新密钥
WHARTTEST_API_KEY=your_api_key_here
# 默认使用系统自动生成的固定密钥,开箱即用,无需手动配置
#
# ⚠️ 安全提示:
# - 开发环境:可直接使用下面的默认密钥
# - 生产环境:请登录后台删除默认密钥,并创建新的安全密钥
# 创建新密钥:登录后台 -> 系统管理 -> API密钥 -> 创建新密钥
WHARTTEST_API_KEY=wharttest-default-mcp-key-2025
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ out/

# Dependencies (handled by subdirectories, but backup)
node_modules/
nltk_data/

# Python cache (handled by Django .gitignore, but backup)
__pycache__/
Expand All @@ -62,4 +63,6 @@ __pycache__/
docs/_build/
docs/.vitepress/cache/
# Playwright截图目录
playwright-screenshots/
playwright-screenshots/
WHartTest_Django/chat_history.sqlite-shm
WHartTest_Django/chat_history.sqlite-wal
19 changes: 13 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,31 +2,38 @@

## 项目简介

WHartTest 是一个基于 Django REST Framework 构建的AI驱动测试自动化平台,核心功能是通过AI智能生成测试用例。平台集成了 LangChain、MCP(Model Context Protocol)工具调用、项目管理、需求评审、测试用例管理以及先进的知识库管理和文档理解功能。利用大语言模型和HuggingFace嵌入模型的能力,自动化生成高质量的测试用例,并结合知识库提供更精准的测试辅助,为测试团队提供一个完整的智能测试管理解决方案。
WHartTest 是一个基于 Django REST Framework 构建的AI驱动测试自动化平台,核心功能是通过AI智能生成测试用例。平台集成了 LangChain、MCP(Model Context Protocol)工具调用、项目管理、需求评审、测试用例管理以及先进的知识库管理和文档理解功能。利用大语言模型和多种嵌入服务(OpenAI、Azure OpenAI、Ollama等)的能力,自动化生成高质量的测试用例,并结合知识库提供更精准的测试辅助,为测试团队提供一个完整的智能测试管理解决方案。


## 文档
详细文档请访问:https://mgdaaslab.github.io/WHartTest/

## 快速开始

### Docker 部署(推荐)
### Docker 部署(推荐 - 开箱即用

#### 使用预构建镜像(无需本地构建)
```bash
# 1. 克隆仓库
git clone https://github.com/MGdaasLab/WHartTest.git
cd WHartTest

# 2. 配置环境变量
# 2. 准备配置(使用默认配置,包含自动生成的API Key)
cp .env.example .env
# 编辑 .env 文件,设置必要的环境变量

# 3. 启动服务(自动拉取预构建镜像)
# 3. 一键启动(自动拉取预构建镜像)
docker-compose up -d

# 4. 访问系统
# 前端:http://localhost:8913
# 后台:http://localhost:8912/admin (admin/admin123456)
```

**就这么简单!** 系统会自动创建默认API Key,MCP服务开箱即用。

> ⚠️ **生产环境提示**:请登录后台删除默认API Key并创建新的安全密钥。详见 [快速启动指南](./docs/QUICK_START.md)

详细的部署说明请参考:
- [快速启动指南](./docs/QUICK_START.md) - **推荐新用户阅读**
- [GitHub 自动构建部署指南](./docs/github-docker-deployment.md)
- [完整部署文档](https://mgdaaslab.github.io/WHartTest/)

Expand Down
63 changes: 54 additions & 9 deletions WHartTest_Django/.dockerignore
Original file line number Diff line number Diff line change
@@ -1,53 +1,98 @@
# Python
# Python缓存和编译文件
__pycache__/
*.py[cod]
*$py.class
*.so
*.egg
*.egg-info/
.Python
pip-log.txt
pip-delete-this-directory.txt

# 虚拟环境(所有可能的虚拟环境目录)
env/
venv/
.venv/
ENV/
env.bak/
venv.bak/
.venv/
.pyenv/
.virtualenv/
virtualenv/

# Django
# Django运行时数据和临时文件
*.log
db.sqlite3
db.sqlite3-journal
chat_history.sqlite
media/
staticfiles/
local_settings.py
*.pid
celerybeat-schedule

# IDE
# IDE和编辑器
.vscode/
.idea/
*.swp
*.swo
*~
.DS_Store
*.sublime-project
*.sublime-workspace

# Git
.git/
.gitignore
.gitattributes
.github/

# Documentation
# 文档
README.md
docs/
*.md
LICENSE

# Tests
# 测试
.pytest_cache/
.coverage
.coverage.*
htmlcov/
.tox/
.nox/
.hypothesis/
pytest_cache/
test_*.py
*_test.py
tests/
**/tests/

# Environment
# 环境变量
.env
.env.*
.env.local
.env.*.local

# Docker
# Docker相关
Dockerfile
Dockerfile.*
.dockerignore
docker-compose*.yml
docker-compose*.yml

# 部署脚本和临时文件
deploy-scripts/
*.tmp
*.bak
*.swp
*~.nib

# 本地数据和缓存
nltk_data/
*.sqlite
*.sqlite3
*.sqlite3-wal
*.sqlite3-shm
*.db
*.sql
db.sqlite3
chat_history.sqlite
47 changes: 47 additions & 0 deletions WHartTest_Django/.env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# 本地开发环境配置示例
# 复制此文件为 .env 并根据实际情况修改配置

# ================================
# Redis 连接配置
# ================================
# 本地开发:连接 Docker 容器中的 Redis(端口 8911)
# Docker 部署:使用 docker-compose.yml 中的配置
CELERY_BROKER_URL=redis://127.0.0.1:8911/0
CELERY_RESULT_BACKEND=redis://127.0.0.1:8911/0

# ================================
# Django 基础配置
# ================================
# 调试模式(生产环境请设为 False)
DJANGO_DEBUG=True

# Django 密钥(生产环境必须修改为随机字符串)
DJANGO_SECRET_KEY=dev-secret-key-change-in-production

# 允许访问的主机(生产环境请设置具体域名)
DJANGO_ALLOWED_HOSTS=*

# CORS 跨域允许的源(根据前端地址配置)
DJANGO_CORS_ALLOWED_ORIGINS=http://localhost:3000,http://localhost:5173,http://localhost:5174,http://localhost:80

# ================================
# 数据库和文件存储
# ================================
# SQLite 数据库路径(本地开发使用相对路径)
DATABASE_PATH=./db.sqlite3

# 媒体文件存储路径
MEDIA_ROOT=./media

# ================================
# Django 管理员账户(首次启动时创建)
# ================================
# DJANGO_ADMIN_USERNAME=admin
# DJANGO_ADMIN_EMAIL=admin@example.com
# DJANGO_ADMIN_PASSWORD=admin123456

# ================================
# API 基础 URL(可选)
# ================================
# 用于内部 API 调用
# DJANGO_BASE_URL=http://localhost:8000
4 changes: 4 additions & 0 deletions WHartTest_Django/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ chat_history.sqlite # LangGraph聊天历史数据库
chroma.sqlite3 # ChromaDB数据库文件
/static/
/media/ # 包含用户上传的文档和知识库数据
# NLTK数据(通过nltk.download()下载,不应提交到版本控制)
nltk_data/
/logs/ # 应用日志文件
browser_data/ # 浏览器用户数据
knowledge_bases/ # 知识库数据(如果MEDIA_ROOT未正确设置时的位置)
Expand All @@ -29,6 +31,8 @@ env/
# HuggingFace模型缓存
.cache/
media


# IDE / Editor
.idea/
.vscode/
Expand Down
83 changes: 65 additions & 18 deletions WHartTest_Django/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,39 +1,86 @@
# 使用 Python 3.11 官方镜像作为基础镜像
FROM python:3.11-slim
# ============================================
# 多阶段构建 - 优化后的Dockerfile
# 镜像大小:~1.1GB(从1.74GB减少36.8%)
# ============================================

# 设置工作目录
WORKDIR /app
# ============================================
# 第一阶段:构建阶段(包含编译工具)
# ============================================
FROM docker.m.daocloud.io/library/python:3.11-slim AS builder

WORKDIR /build

# 设置环境变量
ENV PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
PIP_NO_CACHE_DIR=1 \
PIP_DISABLE_PIP_VERSION_CHECK=1

# 安装系统依赖
# 安装构建依赖(仅在构建阶段需要)
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
curl \
git \
&& rm -rf /var/lib/apt/lists/*

# 安装 uv
RUN pip install uv
# 安装uv(更快的pip替代品)
RUN pip install --no-cache-dir uv

# 复制 requirements 文件
# 复制requirements并安装依赖到虚拟环境
COPY requirements.txt .

# 使用 uv 安装 Python 依赖
# 同时安装 supervisor
RUN uv pip install --system -r requirements.txt supervisor
# 使用uv直接安装到虚拟环境(uv更快)
RUN uv venv /opt/venv && \
uv pip install --python /opt/venv/bin/python --no-cache -r requirements.txt

# 复制项目文件
COPY . .
# ============================================
# 第二阶段:运行阶段(仅包含运行时依赖)
# ============================================
FROM docker.m.daocloud.io/library/python:3.11-slim

# 复制 supervisord 配置文件和启动脚本(放在 COPY . . 之后以避免被覆盖)
COPY supervisord.conf /app/supervisord.conf
WORKDIR /app

# 设置环境变量
ENV PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
PATH="/opt/venv/bin:$PATH" \
PYTHONPATH="/app:$PYTHONPATH"

# 仅安装运行时必需的系统依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
supervisor \
curl \
&& rm -rf /var/lib/apt/lists/* \
&& apt-get clean

# 从构建阶段复制虚拟环境(不包含构建工具)
COPY --from=builder /opt/venv /opt/venv

# 复制启动脚本和配置文件
COPY entrypoint.sh /app/entrypoint.sh
RUN chmod +x /app/entrypoint.sh
COPY supervisord.conf /app/supervisord.conf

# 转换换行符并添加执行权限
RUN sed -i 's/\r$//' /app/entrypoint.sh && chmod +x /app/entrypoint.sh

# 复制Django项目代码(仅复制必要的Python代码)
COPY manage.py /app/
COPY accounts/ /app/accounts/
COPY api_keys/ /app/api_keys/
COPY knowledge/ /app/knowledge/
COPY langgraph_integration/ /app/langgraph_integration/
COPY mcp_tools/ /app/mcp_tools/
COPY orchestrator_integration/ /app/orchestrator_integration/
COPY projects/ /app/projects/
COPY prompts/ /app/prompts/
COPY requirements/ /app/requirements/
COPY testcases/ /app/testcases/
COPY wharttest_django/ /app/wharttest_django/

# 清理不必要的文件
RUN find /app -type f \( -name "*.sqlite*" -o -name "*.db" -o -name "*.sql" \) -delete && \
find /app -type d \( -name ".venv" -o -name "venv" -o -name "__pycache__" -o -name ".git" -o -name "*.egg-info" \) -exec rm -rf {} + 2>/dev/null || true && \
find /opt/venv -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true && \
find /opt/venv -type f -name "*.pyc" -delete 2>/dev/null || true && \
find /opt/venv -type f -name "*.pyo" -delete 2>/dev/null || true

# 创建必要的目录
RUN mkdir -p media static nltk_data /var/log
Expand Down
15 changes: 8 additions & 7 deletions WHartTest_Django/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

## 项目简介

WhartTest 是一个基于 Django REST Framework 构建的AI驱动测试自动化平台,核心功能是通过AI智能生成测试用例。平台集成了 LangChain、MCP(Model Context Protocol)工具调用、项目管理、测试用例管理以及先进的知识库管理和文档理解功能。利用大语言模型和HuggingFace嵌入模型的能力,自动化生成高质量的测试用例,并结合知识库提供更精准的测试辅助,为测试团队提供一个完整的智能测试管理解决方案。
WhartTest 是一个基于 Django REST Framework 构建的AI驱动测试自动化平台,核心功能是通过AI智能生成测试用例。平台集成了 LangChain、MCP(Model Context Protocol)工具调用、项目管理、测试用例管理以及先进的知识库管理和文档理解功能。利用大语言模型和多种嵌入服务(OpenAI、Azure OpenAI、Ollama等)的能力,自动化生成高质量的测试用例,并结合知识库提供更精准的测试辅助,为测试团队提供一个完整的智能测试管理解决方案。

## 核心特性

Expand Down Expand Up @@ -98,11 +98,12 @@ langchain-mcp-adapters
# 知识库相关
langchain-text-splitters
langchain-chroma # ChromaDB向量数据库集成
langchain-huggingface # HuggingFace嵌入模型支持
sentence-transformers # HuggingFace句子转换模型
torch # PyTorch (sentence-transformers依赖)
transformers # HuggingFace Transformers库
huggingface-hub # HuggingFace模型下载
# 注意:现使用CustomAPIEmbeddings通过API调用嵌入模型,无需以下本地模型依赖
# langchain-huggingface # HuggingFace嵌入模型支持 (已弃用)
# sentence-transformers # HuggingFace句子转换模型 (已弃用,约1GB+)
# torch # PyTorch (已弃用,约800MB+)
# transformers # HuggingFace Transformers库 (已弃用)
# huggingface-hub # HuggingFace模型下载 (已弃用)

# 文档处理
pypdf
Expand Down Expand Up @@ -633,7 +634,7 @@ sudo ufw enable
- Django (BSD-3-Clause)
- Django REST Framework (MIT)
- LangChain系列 (MIT)
- HuggingFace Transformers (Apache-2.0)
- OpenAI SDK (MIT)
- 其他依赖库详见 [requirements.txt](requirements.txt)

所有依赖库均为宽松开源协议,与MIT协议完全兼容。
Expand Down
Loading