mcpField
P
pict-test-designer

pict-test-designer

github.com/omkamal测试与质量102379 次安装31 周前更新
代码仓库

关于 pict-test-designer

该技能根据需求或代码,使用 PICT 设计成对测试套件。它协助识别参数、取值、约束和预期结果,并整理模型与测试用例,供软件测试使用。

主要功能

  1. 01识别参数与约束
  2. 02创建 PICT 模型
  3. 03生成成对测试用例
  4. 04定义预期结果
  5. 05将测试套件整理为表格
  6. 06Python 辅助脚本工具

适用场景

  1. 01为多输入功能设计测试
  2. 02减少配置测试组合
  3. 03构建 API 或表单测试矩阵

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/omkamal/pypict-claude-skill --skill pict-test-designer

安装后在 Claude Code 中输入/pict-test-designer确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

.gitignore
CONTRIBUTING.md
CHANGELOG.md
LICENSE
STRUCTURE.md
PUBLISHING.md
QUICKSTART.md
README.md
.claude-plugin/
plugin.json
marketplace.json
.github/
pull_request_template.md
markdown-link-check-config.json
.github/ISSUE_TEMPLATE/
feature_request.md
bug_report.md
.github/workflows/
ci.yml
examples/
README.md
atm-test-plan.md
gearbox-test-plan.md
atm-specification.md
gearbox-specification.md
references/
pict_syntax.md
examples.md
releases/
README.md
scripts/
README.md
pict_helper.py

详细介绍

PICT 测试设计器

此技能可使用 PICT(成对独立组合测试)系统地设计测试用例。给定需求或代码后,它会分析系统以识别测试参数,生成带有适当约束的 PICT 模型,执行模型以生成成对测试用例,并整理结果及预期输出。

何时使用此技能

在以下情况下使用此技能:

  • 为具有多个输入参数的功能、函数或系统设计测试用例
  • 为包含许多组合的配置创建测试套件
  • 需要以最少的测试用例实现全面覆盖
  • 分析需求以识别测试场景
  • 处理具有多个条件分支的代码
  • 为 API 端点、Web 表单或系统配置构建测试矩阵

工作流

按照以下流程设计测试:

1. 分析需求或代码

根据用户的需求或代码,识别:

  • 参数:输入变量、配置选项、环境因素
  • 取值:每个参数的可能取值(使用等价类划分)
  • 约束:业务规则、技术限制、参数间的依赖关系
  • 预期结果:不同组合下应发生的情况

分析示例:

对于一个具有以下需求的登录函数:

  • 用户可以使用用户名和密码登录
  • 支持双重身份验证(开启/关闭)
  • 在受信任的设备上记住登录状态
  • 登录失败 3 次后进行频率限制

识别出的参数:

  • 凭据:有效、无效
  • 双重身份验证:已启用、已禁用
  • 记住我:已勾选、未勾选
  • 之前的失败次数:0、1、2、3、4
2. 生成 PICT 模型

创建包含以下内容的 PICT 模型:

  • 清晰的参数名称
  • 定义明确的取值集合(使用等价类划分和边界值)
  • 用于排除无效组合的约束
  • 解释业务规则的注释

模型结构:

# Parameter definitions
ParameterName: Value1, Value2, Value3

# Constraints (if any)
IF [Parameter1] = "Value" THEN [Parameter2] <> "OtherValue";

请参阅 references/pict_syntax.md,了解:

  • 完整的语法参考
  • 约束语法和运算符
  • 高级功能(子模型、别名、负向测试)
  • 命令行选项
  • 详细的约束模式

请参阅 references/examples.md,了解:

  • 按领域划分的完整实际示例
  • 软件功能测试示例
  • Web 应用、API 和移动端测试示例
  • 数据库和配置测试模式
  • 身份验证、资源访问、错误处理的常见模式
3. 执行 PICT 模型

生成 PICT 模型文本并整理好供用户使用。你可以直接使用 Python 代码处理模型:

# Define parameters and constraints
parameters = {
    "OS": ["Windows", "Linux", "MacOS"],
    "Browser": ["Chrome", "Firefox", "Safari"],
    "Memory": ["4GB", "8GB", "16GB"]
}

constraints = [
    'IF [OS] = "MacOS" THEN [Browser] IN {Safari, Chrome}',
    'IF [Memory] = "4GB" THEN [OS] <> "MacOS"'
]

# Generate model text
model_lines = []
for param_name, values in parameters.items():
    values_str = ", ".join(values)
    model_lines.append(f"{param_name}: {values_str}")

if constraints:
    model_lines.append("")
    for constraint in constraints:
        if not constraint.endswith(';'):
            constraint += ';'
        model_lines.append(constraint)

model_text = "\n".join(model_lines)
print(model_text)

使用辅助脚本(可选): scripts/pict_helper.py 脚本提供了用于生成模型和整理输出的实用工具:

# Generate model from JSON config
python scripts/pict_helper.py generate config.json

# Format PICT tool output as markdown table
python scripts/pict_helper.py format output.txt

# Parse PICT output to JSON
python scripts/pict_helper.py parse output.txt

要生成实际的测试用例,用户可以:

  1. 将 PICT 模型保存到文件中(例如 model.txt)
  2. 使用在线 PICT 工具,例如:
  3. 或在本地安装 PICT(请参阅 references/pict_syntax.md)
4. 确定预期输出

对于每个生成的测试用例,根据以下内容确定预期结果:

  • 业务需求
  • 代码逻辑
  • 有效/无效组合

创建与各测试用例对应的预期输出列表。

5. 整理完整的测试套件

向用户提供:

  1. PICT 模型 - 包含参数和约束的完整模型
  2. Markdown 表格 - 以表格形式列出测试用例及其编号
  3. 预期输出 - 每个测试用例的预期结果

输出格式

按以下结构呈现结果:

## PICT Model

```
# Parameters
Parameter1: Value1, Value2, Value3
Parameter2: ValueA, ValueB

# Constraints
IF [Parameter1] = "Value1" THEN [Parameter2] = "ValueA";
```

## Generated Test Cases

| Test # | Parameter1 | Parameter2 | Expected Output |
| --- | --- | --- | --- |
| 1 | Value1 | ValueA | Success |
| 2 | Value2 | ValueB | Success |
| 3 | Value1 | ValueB | Error: Invalid combination |
...

## Test Case Summary

- Total test cases: N
- Coverage: Pairwise (all 2-way combinations)
- Constraints applied: N

最佳实践

参数标识

良好做法:

  • 使用描述性名称:AuthMethod、UserRole、PaymentType
  • 应用等价类划分:使用 FileSize: Small, Medium, Large,而不是 FileSize: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
  • 包含边界值:Age: 0, 17, 18, 65, 66
  • 添加负值用于错误测试:Amount: ~-1, 0, 100, ~999999

应避免:

  • 通用名称:Param1、Value1、V1
  • 未经划分就使用过多的值
  • 遗漏边界情况
编写约束

良好做法:

  • 记录理由:# Safari only available on MacOS
  • 从简单开始,逐步添加
  • 测试约束是否按预期生效

应避免:

  • 约束过多(排除过多有效组合)
  • 约束不足(生成无效测试用例)
  • 使用缺少清晰文档的复杂嵌套逻辑
定义预期输出

具体明确:

  • “登录成功,用户重定向至仪表板”
  • “HTTP 400:凭据无效错误”
  • “显示双重身份验证提示”

避免含糊:

  • “正常”
  • “错误”
  • “成功”
可扩展性

对于大型参数集:

  • 使用子模型对顺序不同的相关参数进行分组
  • 考虑为不相关的功能分别创建测试套件
  • 从 2 阶(成对测试)开始,对关键组合提高阶数
  • 典型的成对测试相比穷举测试可减少 80-90% 的测试用例

常见模式

Web 表单测试
parameters = {
    "Name": ["Valid", "Empty", "TooLong"],
    "Email": ["Valid", "Invalid", "Empty"],
    "Password": ["Strong", "Weak", "Empty"],
    "Terms": ["Accepted", "NotAccepted"]
}

constraints = [
    'IF [Terms] = "NotAccepted" THEN [Name] = "Valid"',  # Test validation even if terms not accepted
]
API 端点测试
parameters = {
    "HTTPMethod": ["GET", "POST", "PUT", "DELETE"],
    "Authentication": ["Valid", "Invalid", "Missing"],
    "ContentType": ["JSON", "XML", "FormData"],
    "PayloadSize": ["Empty", "Small", "Large"]
}

constraints = [
    'IF [HTTPMethod] = "GET" THEN [PayloadSize] = "Empty"',
    'IF [Authentication] = "Missing" THEN [HTTPMethod] IN {GET, POST}'
]
配置测试
parameters = {
    "Environment": ["Dev", "Staging", "Production"],
    "CacheEnabled": ["True", "False"],
    "LogLevel": ["Debug", "Info", "Error"],
    "Database": ["SQLite", "PostgreSQL", "MySQL"]
}

constraints = [
    'IF [Environment] = "Production" THEN [LogLevel] <> "Debug"',
    'IF [Database] = "SQLite" THEN [Environment] = "Dev"'
]

故障排除

未生成测试用例
  • 检查约束是否过于严格
  • 验证约束语法(必须以 ; 结尾)
  • 确保约束中的参数名称与定义相符(使用 [ParameterName])
测试用例过多
  • 确认使用的是 2 阶(成对测试),而不是更高阶
  • 考虑拆分为子模型
  • 检查参数是否可以拆分到彼此独立的测试套件中
输出中存在无效组合
  • 添加缺失的约束
  • 确认约束逻辑正确
  • 检查是否需要使用 NOT 或 <> 运算符
脚本错误
  • 确保已安装 pypict:pip install pypict --break-system-packages
  • 检查 Python 版本(3.7+)
  • 确认模型语法有效

参考资料

  • references/pict_syntax.md - 完整的 PICT 语法参考,包含语法规则和运算符
  • references/examples.md - 涵盖不同领域的丰富真实示例
  • scripts/pict_helper.py - 用于生成模型和格式化输出的 Python 工具
  • PICT GitHub Repository - PICT 官方文档
  • pypict Documentation - Python 绑定文档
  • Online PICT Tools - 基于 Web 的 PICT 生成器

示例

示例 1:简单函数测试

用户请求:“为一个接受两个数字并返回结果的除法函数设计测试。”

分析:

  • 参数:被除数(数字)、除数(数字)
  • 值:使用等价类划分和边界值
    • 数字:负数、零、正数、大数
  • 约束:除数为零时无效
  • 预期输出:结果或错误

PICT 模型:

Dividend: -10, 0, 10, 1000
Divisor: ~0, -5, 1, 5, 100

IF [Divisor] = "0" THEN [Dividend] = "10";

测试用例:

测试编号被除数除数预期输出
1100错误:除数为零
2-101-10.0
30-50.0
410005200.0
5101000.1
示例 2:电子商务结账

用户请求:“为包含支付方式、配送选项和用户类型的结账流程设计测试。”

分析:

  • 支付方式:信用卡、PayPal、银行转账(受用户类型限制)
  • 配送方式:标准、加急、隔夜
  • 用户:访客、注册用户、高级用户
  • 约束:访客不能使用银行转账;高级用户可免费使用加急配送

PICT 模型:

PaymentMethod: CreditCard, PayPal, BankTransfer
ShippingMethod: Standard, Express, Overnight
UserType: Guest, Registered, Premium

IF [UserType] = "Guest" THEN [PaymentMethod] <> "BankTransfer";
IF [UserType] = "Premium" AND [ShippingMethod] = "Express" THEN [PaymentMethod] IN {CreditCard, PayPal};

**输出:**12-15 个测试用例,涵盖所有有效的支付方式/配送方式/用户组合及其预期费用和结果。

评论

支持 Markdown