JSPM

llm-test-generator

1.0.0
    • ESM via JSPM
    • ES Module Entrypoint
    • Export Map
    • Keywords
    • License
    • Repository URL
    • TypeScript Types
    • README
    • Created
    • Published
    • Downloads 2
    • Score
      100M100P100Q18267F
    • License MIT

    基于大语言模型的自动化测试生成框架

    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

    安装步骤

    1. 克隆仓库并安装依赖:
    git clone https://github.com/yourusername/llm-test-generator.git
    cd llm-test-generator
    npm install  # 或使用 yarn install
    1. 配置 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 字段的值为 deepseekopenaigemini

    方法二:环境变量

    创建 .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 dev

    API 端点

    健康检查

    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:

    1. 在 Cursor 设置中找到自定义工具或 MCP 服务器配置
    2. 添加新服务器,并设置 URL 为 http://localhost:3000/mcp/test-generator
    3. 设置所需参数,包括语言、框架和报告格式
    4. 保存并开始使用

    客户端代码示例

    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

    配置优先级

    1. 构造函数中传入的配置参数
    2. 代码中通过ModelFactory.configure()设置的配置
    3. 配置文件中的配置
    4. 环境变量中的配置
    5. 默认配置

    许可证

    MIT