Package Exports
- llm-test-generator
Readme
LLM Test Generator
LLM Test Generator 是一个基于大语言模型的自动化测试生成框架,支持将测试生成功能集成到各种开发环境中。
功能特点
- 😊 支持多种编程语言:JavaScript, TypeScript, Python, Java, C#, Go, Rust, Ruby, PHP, Swift 等
- 🧪 支持多种测试框架:Jest, Mocha, Pytest, JUnit, XUnit, TestNG 等
- 📊 多种报告格式:JSON, JUnit XML, HTML, Markdown
- 🔗 完全兼容 MCP 协议,方便集成到 Cursor 等 AI 编辑器
- 🧠 支持多种大模型(DeepSeek、OpenAI、Gemini 等)生成高质量测试用例
- 🔌 支持插件式架构,轻松扩展新的 LLM 服务提供商,无需修改核心代码
安装和配置
系统要求
- Node.js 18.x 或更高版本
- npm 或 yarn
安装步骤
- 克隆仓库并安装依赖:
git clone https://github.com/yourusername/llm-test-generator.git
cd llm-test-generator
npm install # 或使用 yarn install- 配置 MCP 服务:
有两种方式配置 API 密钥和模型参数:
方法一:配置文件(推荐)
编辑项目根目录下的 cursor-mcp-config.json 文件:
{
"mcp.services": [
{
"name": "llm-test-generator",
"description": "自动化测试生成服务",
"endpoint": "http://localhost:3000/mcp/test-generator",
"modelProvider": "deepseek",
"modelProviders": {
"deepseek": {
"apiKey": "your_deepseek_api_key_here",
"baseUrl": "https://api.deepseek.com",
"model": "deepseek-coder",
"temperature": 0.4,
"maxTokens": 4000
},
"openai": {
"apiKey": "your_openai_api_key_here",
"baseUrl": "https://api.openai.com/v1",
"model": "gpt-4-turbo",
"temperature": 0.3,
"maxTokens": 4000
},
"gemini": {
"apiKey": "your_gemini_api_key_here",
"baseUrl": "https://generativelanguage.googleapis.com",
"model": "gemini-pro",
"temperature": 0.2,
"maxTokens": 2048
}
},
"commands": [
{
"name": "generateTests",
"title": "生成测试用例",
"description": "根据当前文档内容生成测试用例"
},
{
"name": "analyzeDocument",
"title": "分析需求文档",
"description": "分析当前文档中的需求"
}
]
}
]
}要切换使用的模型,只需修改 modelProvider 字段的值为 deepseek、openai 或 gemini。
方法二:环境变量
创建 .env 文件并配置以下内容:
# 指定使用的模型提供商: deepseek, openai, gemini
LLM_PROVIDER=deepseek
# DeepSeek 配置
DEEPSEEK_API_KEY=your_deepseek_api_key_here
DEEPSEEK_BASE_URL=https://api.deepseek.com
DEEPSEEK_MODEL=deepseek-coder
# OpenAI 配置
OPENAI_API_KEY=your_openai_api_key_here
OPENAI_BASE_URL=https://api.openai.com/v1
OPENAI_MODEL=gpt-4-turbo
# Gemini 配置
GEMINI_API_KEY=your_gemini_api_key_here
GEMINI_BASE_URL=https://generativelanguage.googleapis.com
GEMINI_MODEL=gemini-pro
# 服务器配置
PORT=3000要切换使用的模型,只需修改 LLM_PROVIDER 环境变量的值。
注意:配置文件中的设置优先级高于环境变量。如果同时存在两种配置,将优先使用配置文件中的设置。
启动服务器
使用以下命令启动服务器:
npm start开发模式(自动重启):
npm run devAPI 端点
健康检查
GET /health获取支持的选项
GET /supported-options从文件生成测试
POST /generate-from-file
{
"filePath": "path/to/your/file.js",
"outputDir": "./generated-tests", // 可选,默认为 "./generated-tests"
"language": "javascript",
"framework": "jest",
"reportFormat": "json" // 可选,默认为 "json"
}从代码内容生成测试
POST /generate-from-content
{
"content": "// 您的代码内容",
"outputDir": "./generated-tests", // 可选,默认为 "./generated-tests"
"language": "javascript",
"framework": "jest",
"reportFormat": "json" // 可选,默认为 "json"
}MCP 协议端点
POST /mcp/test-generator
{
"action": "generate-tests",
"params": {
"filePath": "path/to/your/file.js", // 文件路径,与 content 二选一
"content": "// 您的代码内容", // 代码内容,与 filePath 二选一
"outputDir": "./generated-tests",
"language": "javascript",
"framework": "jest",
"reportFormat": "json"
}
}与 Cursor 集成
在 Cursor 编辑器中,您可以通过以下步骤集成 AutoTest MCP Server:
- 在 Cursor 设置中找到自定义工具或 MCP 服务器配置
- 添加新服务器,并设置 URL 为
http://localhost:3000/mcp/test-generator - 设置所需参数,包括语言、框架和报告格式
- 保存并开始使用
客户端代码示例
JavaScript/TypeScript
// ESM
import { AutomatedTestGenerator } from "llm-test-generator";
// CommonJS
const { AutomatedTestGenerator } = require("llm-test-generator");
// 方式1:使用特定模型初始化测试生成器
const generator1 = new AutomatedTestGenerator(
"YOUR_API_KEY", // API密钥
"https://api.yourllmprovider.com", // API基础URL
"your-preferred-model" // 使用的模型
);
// 方式2:让系统自动选择合适的LLM服务
const generator2 = new AutomatedTestGenerator(
"YOUR_API_KEY", // API密钥
"https://api.deepseek.com" // API基础URL,系统会自动检测提供商
);
// 方式3:使用详细配置
const generator3 = new AutomatedTestGenerator({
apiKey: "YOUR_API_KEY",
baseURL: "https://api.openai.com/v1",
model: "gpt-4-turbo",
maxRetries: 3,
retryDelay: 1000,
});
// 生成测试文件
async function generateTests() {
try {
// 从文件加载需求文档
const { content, format } = await generator1.loadDocumentFromFile("./requirements.md");
// 生成测试文件
const results = await generator1.generateTestArtifacts(content, format, {
outputDir: "./tests",
language: "typescript",
framework: "vitest",
reportFormat: "markdown",
});
console.log("测试生成完成!");
console.log(`生成了${results.testCases.length}个测试用例`);
} catch (error) {
console.error("生成测试时出错:", error);
}
}
generateTests();命令行使用
# 安装
npm install -g llm-test-generator
# 使用
llm-test generate -i requirements.md -o ./tests -l typescript -f vitest -r markdown -k YOUR_API_KEY -u https://api.yourllmprovider.com插件式架构:添加自定义 LLM 服务
LLM Test Generator 使用插件式架构,允许您轻松添加自定义 LLM 服务,而无需修改框架核心代码。
创建自定义 LLM 服务
import { LLMService, ModelConfig, ModelOptions, BaseLLMService } from "llm-test-generator/models/llm-service";
import { LLMServiceProvider } from "llm-test-generator/models/model-registry";
import { ModelFactory } from "llm-test-generator/models/model-factory";
// 1. 创建自定义LLM服务实现
class CustomLLMService extends BaseLLMService {
constructor(config: ModelConfig) {
super(config);
this.provider = "custom";
this.model = config.model || "custom-model";
}
async generateResponse(prompt: string, options?: ModelOptions): Promise<string> {
// 实现您的自定义API调用逻辑
console.log(`使用自定义LLM服务,模型: ${this.model}`);
// 这里是您自己的API调用逻辑
const response = await fetch(this.config.baseURL!, {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${this.config.apiKey}`,
},
body: JSON.stringify({
model: this.model,
prompt: prompt,
temperature: options?.temperature || 0.7,
max_tokens: options?.maxTokens || 2000,
}),
});
const data = await response.json();
return data.text || data.content || data.choices[0].text;
}
}
// 2. 创建服务提供者
class CustomServiceProvider implements LLMServiceProvider {
readonly name = "custom";
canHandle(config: ModelConfig): boolean {
// 判断是否能处理此配置
if (config.baseURL?.includes("mycustomapi.com")) {
return true;
}
if (config.model?.includes("custom-model")) {
return true;
}
return false;
}
createService(config: ModelConfig): LLMService {
return new CustomLLMService(config);
}
}
// 3. 注册服务提供者
ModelFactory.registerServiceProvider(new CustomServiceProvider());
// 4. 使用您的自定义服务
const generator = new AutomatedTestGenerator("YOUR_CUSTOM_API_KEY", "https://api.mycustomapi.com", "custom-model");优势
- 灵活扩展:您可以轻松添加对新 LLM API 的支持,无需等待官方更新
- 无侵入式:添加自定义模型不需要修改框架核心代码
- 统一接口:所有 LLM 服务遵循相同的接口,提供一致的用户体验
- 自动检测:系统会根据提供的 URL 和配置自动选择合适的服务实现
- 多模型支持:可以同时注册多个服务提供者,根据需要选择不同的模型
配置大模型
有三种方式配置 API 密钥和模型参数:
方法一:代码中直接配置(推荐)
最灵活的方式是在代码中直接配置大模型,特别适合作为 npm 包安装使用时:
import { ModelFactory, AutomatedTestGenerator } from "llm-test-generator";
// 配置单个提供商
ModelFactory.configure("deepseek", {
apiKey: "your_deepseek_api_key",
baseURL: "https://api.deepseek.com",
model: "deepseek-coder",
temperature: 0.4, // 可选
maxTokens: 4000, // 可选
});
// 设置为默认提供商
ModelFactory.setDefaultProvider("deepseek");
// 或者一次性配置多个提供商
ModelFactory.configureAll(
{
deepseek: {
apiKey: "your_deepseek_api_key",
baseURL: "https://api.deepseek.com",
model: "deepseek-coder",
},
openai: {
apiKey: "your_openai_api_key",
baseURL: "https://api.openai.com/v1",
model: "gpt-4-turbo",
},
},
"openai"
); // 设置openai为默认提供商
// 使用默认配置创建生成器
const generator = new AutomatedTestGenerator();
// 或指定使用某个提供商
const anotherGenerator = new AutomatedTestGenerator({ provider: "deepseek" });方法二:配置文件
编辑项目根目录下的 llm-config.json 文件:
{
"defaultProvider": "deepseek",
"providers": {
"deepseek": {
"apiKey": "your_deepseek_api_key_here",
"baseURL": "https://api.deepseek.com",
"model": "deepseek-coder",
"temperature": 0.4,
"maxTokens": 4000
},
"openai": {
"apiKey": "your_openai_api_key_here",
"baseURL": "https://api.openai.com/v1",
"model": "gpt-4-turbo"
},
"gemini": {
"apiKey": "your_gemini_api_key_here",
"baseURL": "https://generativelanguage.googleapis.com",
"model": "gemini-pro"
}
}
}系统会自动查找以下位置的配置文件:
- 当前工作目录:
./llm-config.json - 用户主目录:
~/.llm-test-generator/llm-config.json - 系统配置目录:
/etc/llm-test-generator/llm-config.json(Linux/Mac) 或%APPDATA%\llm-test-generator\llm-config.json(Windows)
也可以在代码中显式指定配置文件路径:
const generator = new AutomatedTestGenerator({
configPath: "./path/to/your/custom-config.json",
});方法三:环境变量
创建 .env 文件并配置以下内容:
# 指定使用的模型提供商: deepseek, openai, gemini
LLM_PROVIDER=deepseek
# DeepSeek 配置
DEEPSEEK_API_KEY=your_deepseek_api_key_here
DEEPSEEK_BASE_URL=https://api.deepseek.com
DEEPSEEK_MODEL=deepseek-coder
# OpenAI 配置
OPENAI_API_KEY=your_openai_api_key_here
OPENAI_BASE_URL=https://api.openai.com/v1
OPENAI_MODEL=gpt-4-turbo
# Gemini 配置
GEMINI_API_KEY=your_gemini_api_key_here
GEMINI_BASE_URL=https://generativelanguage.googleapis.com
GEMINI_MODEL=gemini-pro配置优先级
- 构造函数中传入的配置参数
- 代码中通过
ModelFactory.configure()设置的配置 - 配置文件中的配置
- 环境变量中的配置
- 默认配置
许可证
MIT