一 搜索免费大模型

比如硅基流动https://cloud.siliconflow.cn/me/models?types=chat

比如

https://www.modelscope.cn/models

或者其他AI 聚合平台或者 厂商自身部分免费/有限调用模型。

二 设置免费的大模型

openclaw onboard进入到设置模型提供者,选中Custom Provider。填写硅基流动

设置参数

或者魔搭

在openclaw.json及model.json会生成大模型信息。

三 开发SKILL

参考https://blog.csdn.net/haolove527/article/details/157650169

使用https://chat.deepseek.com/ 输入提示词辅助生成内容:

你是一个专业的openclaw开发者,请帮忙生成一套完整的skill所需要的SKILL.MD, agent.py文件。目标:根据用户输入的中文文本需求,使用标准的openai接口调用指定的LLM,生成markdown格式的文本测试用例。生成测试用例必须考虑正常、异常场景,考虑功能、性能、安全场景,用例字段包括标题、编号、前置条件、步骤描述、预期结果、优先级(P0-P4,0为最高)字段。SKILL.MD包括资深测试工程师思考维度 When to use和How to use、Implementation、Edge cases,agent.py文件必须适配openclaw异步调用需求以及各种异常情况捕捉,有必要日志。

Agent.py如:

import os
import json
import logging
from openai import AsyncOpenAI
from openai import APITimeoutError, APIError
import asyncio

# 配置日志
logger = logging.getLogger()
logger.setLevel(logging.INFO)


#、**性能**、**安全**
async def  generate_testcases(event, context):
    """
    OpenClaw
异步技能入口函数。
    :param event: 包含输入数据的字典,如 {"requirement": "用户需求描述"}
    :param context: 运行时上下文(未使用)
    :return: HTTP 风格响应字典,包含 statusCode 和 body。
    """
   
# 记录请求开始
    logger.info("Received event: %s", json.dumps(event, ensure_ascii=False))

    # 1. 验证输入
    if not isinstance(event, dict):
        logger.error("Invalid event format, expected dict")
        return {
            "statusCode": 400,
            "body": json.dumps({"error": "Invalid event format, expected a dictionary"})
        }

    requirement = event.get('requirement')
    if not requirement or not isinstance(requirement, str):
        logger.error("Missing or invalid 'requirement' field")
        return {
            "statusCode": 400,
            "body": json.dumps({"error": "Missing or invalid 'requirement' field (must be a string)"})
        }

    # 2. 读取环境变量
    api_key = os.environ.get('OPENAI_API_KEY',"sk-XXXXX ")
    if not api_key:
        logger.error("OPENAI_API_KEY environment variable not set")
        return {
            "statusCode": 500,
            "body": json.dumps({"error": "OPENAI_API_KEY environment variable not set"})
        }

    base_url = os.environ.get('OPENAI_BASE_URL', 'https://api.siliconflow.cn/v1')
    model = os.environ.get('OPENAI_MODEL', 'Qwen/Qwen2.5-7B-Instruct')

    logger.info("Using model: %s, base_url: %s", model, base_url)
    print("Using model: %s, base_url: %s", model, base_url)

    # 3. 初始化异步 OpenAI 客户端
    try:
        client = AsyncOpenAI(api_key=api_key, base_url=base_url, timeout=60.0)
    except Exception as e:
        logger.error("Failed to initialize OpenAI client: %s", str(e))
        return {
            "statusCode": 500,
            "body": json.dumps({"error": f"Failed to initialize OpenAI client: {str(e)}"})
        }

    print("AsyncOpenAI OK")
    # 4. 构造提示词(中文,强调多维度)
    prompt = f"""你是一名资深的 QA 工程师。请根据以下需求描述,生成结构化的测试用例,使用 Markdown 格式输出。

需求:{requirement}

要求:
- 必须覆盖**功能**和**性能**、**安全**测试用例。
- 每个维度需同时考虑**正常场景**和**异常场景**。
- 每个测试用例必须包含以下字段:**编号**、**标题**、**优先级**(P0-P4,P0为最高)、**前置条件**、**测试步骤**、**预期结果**。
- 编号格式为 TC001、TC002……,从 1 开始递增。
- 优先级使用 P0、P1、P2、P3、P4 表示,P0 最高。
- 输出格式严格按照下面的示例,每个测试用例之间用一个空行分隔:

### TC001 - [标题]
- **优先级**: P0
- **前置条件**: [描述]
- **测试步骤**:
  1. [步骤1]
  2. [步骤2]
  ...
- **预期结果**:
  - [结果1]
  - [结果2]
  ...

生成足够覆盖需求主要场景的测试用例,数量根据需求复杂度合理确定。只输出TOP 3个用例Markdown 内容,不要包含任何额外的解释或说明。"""

    # 5. 调用 LLM(异步)
    try:
        logger.info("Calling LLM with prompt length: %d", len(prompt))
        print("Calling LLM with prompt length: %d", len(prompt))

        response = await client.chat.completions.create(
            model=model,
            messages=[{"role": "user", "content": prompt}],
            temperature=0.7,
            max_tokens=4096,
            top_p=1.0,
            frequency_penalty=0,
            presence_penalty=0,
            timeout=60  # 秒
        )
        test_cases = response.choices[0].message.content
        logger.info("LLM response received, length: %d", len(test_cases))

    except APITimeoutError:
        logger.error("LLM API timeout")
        return {
            "statusCode": 500,
            "body": json.dumps({"error": "LLM API timeout"})
        }
    except APIError as e:
        logger.error("LLM API error: %s", str(e))
        return {
            "statusCode": 500,
            "body": json.dumps({"error": f"LLM API error: {str(e)}"})
        }
    except Exception as e:
        logger.error("Unexpected error during LLM call: %s", str(e))
        return {
            "statusCode": 500,
            "body": json.dumps({"error": f"Unexpected error: {str(e)}"})
        }
    print(test_cases)
    # 6. 返回成功响应
    return {
        "statusCode": 200,
        "body": test_cases
    }

#jsonText={"requirement": "用户注册:邮箱、密码、确认密码,若邮箱未注册且密码与确认密码一致,则注册成功并发送激活邮件。"}
#asyncio.run(generate_testcases(jsonText,None))

Skill.md:

---

name: 测试用例生成器

version: 2.0.0

description: 根据用户输入的中文需求描述,调用大语言模型(LLM)生成涵盖功能、性能、安全场景及正常/异常情况的测试用例,输出 Markdown 格式,包含编号、标题、优先级(P0-P4)、前置条件、测试步骤、预期结果。

author: liang_fy

tags: [testcase generator, markdown, 中文, 功能测试, 性能测试, 安全测试]

inputs:

  - name: requirement

    type: string

    description: 用户提供的中文需求描述文本。

    required: true

    example: "用户登录功能:用户输入正确的用户名和密码后,应该成功登录并跳转到首页。"

outputs:

  - name: test_cases

    type: string

    description: 生成的测试用例,以 Markdown 格式呈现,包含多个测试用例,每个用例包含编号、标题、优先级、前置条件、测试步骤、预期结果。

    example: |

      ### TC001 - 验证正确用户名密码登录

      - **优先级**: P0

      - **前置条件**: 用户已注册,拥有有效账号

      - **测试步骤**:

        1. 打开登录页面

        2. 输入正确的用户名和密码

        3. 点击登录按钮

      - **预期结果**:

        - 页面跳转到首页

        - 顶部显示用户欢迎信息

      ### TC002 - 验证密码错误

      - **优先级**: P1

      - **前置条件**: 用户已注册

      - **测试步骤**:

        1. 打开登录页面

        2. 输入正确的用户名和错误的密码

        3. 点击登录按钮

      - **预期结果**:

        - 页面提示“用户名或密码错误”

        - 停留在登录页

      ### TC003 - 验证登录接口并发性能

      - **优先级**: P2

      - **前置条件**: 准备 100 个有效账号,接口性能监控工具已就绪

      - **测试步骤**:

        1. 使用 JMeter 等工具模拟 100 个用户同时并发登录

        2. 记录响应时间和成功率

      - **预期结果**:

        - 平均响应时间 < 2 秒

        - 成功率 > 99%

      ### TC004 - 验证 SQL 注入攻击防护

      - **优先级**: P1

      - **前置条件**: 无

      - **测试步骤**:

        1. 在用户名输入框输入 `' OR '1'='1`,密码任意

        2. 点击登录按钮

      - **预期结果**:

        - 页面提示用户名或密码错误,不允许登录

        - 后端日志无异常 SQL 查询

env:

  - name: OPENAI_API_KEY

    description: OpenAI 或兼容服务的 API 密钥(必需)。

    required: true

  - name: OPENAI_BASE_URL

    description: OpenAI API 的基础 URL,默认为 https://api.openai.com/v1。可用于 Azure OpenAI 或本地代理。

    required: false

    default: "https://api.openai.com/v1"

  - name: OPENAI_MODEL

    description: 使用的模型名称,默认为 gpt-3.5-turbo。推荐使用支持中文且能力较强的模型(如 gpt-4、deepseek-chat 等)。

    required: false

    default: "gpt-3.5-turbo"

---

# 测试用例生成器

该技能通过大语言模型(LLM)将用户输入的中文需求描述自动转换为结构化的测试用例,涵盖**功能、性能、安全**维度,并同时考虑**正常场景**和**异常场景**。生成的测试用例以 Markdown 格式输出,包含编号(如 TC001)、标题、优先级(P0-P4)、前置条件、测试步骤、预期结果,帮助测试团队快速建立多维度的测试覆盖。

## 资深测试工程师思考维度

### When to use(何时使用)

- **需求评审后**:需要快速生成初步测试用例,覆盖主要维度,用于测试计划编写。

- **迭代开发中**:新增功能或变更时,需要补充测试用例。

- **探索性测试前**:作为基线,确保所有关键场景已被考虑。

- **测试设计培训**:向团队成员展示如何从多角度思考测试点。

### How to use(如何使用)

1. **准备**:在 OpenClaw 平台创建技能,上传本 `SKILL.MD` 和 `agent.py`,配置所需环境变量(API 密钥、模型等)。

2. **输入**:以 JSON 格式提供需求描述,例如:

   ```json

   { "requirement": "用户注册:邮箱、密码、确认密码,若邮箱未注册且密码与确认密码一致,则注册成功并发送激活邮件。" }

设置3个环境变量OPENAI_API_KEY、OPENAI_BASE_URL、OPENAI_MODEL。

或者修改Agent.py 3个默认值, 可以打开注释调试是否通过,如果有依赖未安装,则pip3 install 对应依赖,重启gateway:openclaw gateway  restart

暂不发布到clawhub仓库。

四 飞书/钉钉触发调用SKILL

同时,在用户目录 C:\Users\liang\.openclaw\workspace 下生成文件。

五 错误解析

1、 出现

09:22:49 [diagnostic] lane task error: lane=main durationMs=613 error="FailoverError: ⚠️ API rate limit reached. Please try again later."

如上说明被飞书限流了,界面出现 导致404或400错误。此时更换另一种渠道,比如钉钉。

2、Model context window too small (4096 tokens). Minimum is 16000错误

可能原因包括custom provider的API服务商默认限制、未正确传递参数,先建议设置openclaw.json上模型maxTokens=32768、contextWindows=32768。

六 参考

https://blog.csdn.net/haolove527/article/details/157650169

https://blog.csdn.net/weixin_45449540/article/details/157967971

https://developer.aliyun.com/article/1698335

https://blog.csdn.net/2403_86749814/article/details/158386993

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐