关于 pict-test-designer
该技能根据需求或代码,使用 PICT 设计成对测试套件。它协助识别参数、取值、约束和预期结果,并整理模型与测试用例,供软件测试使用。
主要功能
- 01识别参数与约束
- 02创建 PICT 模型
- 03生成成对测试用例
- 04定义预期结果
- 05将测试套件整理为表格
- 06Python 辅助脚本工具
适用场景
- 01为多输入功能设计测试
- 02减少配置测试组合
- 03构建 API 或表单测试矩阵
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ omkamal/ pypict-claude-skill --skill pict-test-designer安装后在 Claude Code 中输入/pict-test-designer确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
.gitignoreCONTRIBUTING.mdCHANGELOG.mdLICENSESTRUCTURE.mdPUBLISHING.mdQUICKSTART.mdREADME.md.claude-plugin/plugin.jsonmarketplace.json.github/pull_request_template.mdmarkdown-link-check-config.json.github/ISSUE_TEMPLATE/feature_request.mdbug_report.md.github/workflows/ci.ymlexamples/README.mdatm-test-plan.mdgearbox-test-plan.mdatm-specification.mdgearbox-specification.mdreferences/pict_syntax.mdexamples.mdreleases/README.mdscripts/README.mdpict_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
要生成实际的测试用例,用户可以:
- 将 PICT 模型保存到文件中(例如
model.txt) - 使用在线 PICT 工具,例如:
- 或在本地安装 PICT(请参阅 references/pict_syntax.md)
4. 确定预期输出
对于每个生成的测试用例,根据以下内容确定预期结果:
- 业务需求
- 代码逻辑
- 有效/无效组合
创建与各测试用例对应的预期输出列表。
5. 整理完整的测试套件
向用户提供:
- PICT 模型 - 包含参数和约束的完整模型
- Markdown 表格 - 以表格形式列出测试用例及其编号
- 预期输出 - 每个测试用例的预期结果
输出格式
按以下结构呈现结果:
## 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";
测试用例:
| 测试编号 | 被除数 | 除数 | 预期输出 |
|---|---|---|---|
| 1 | 10 | 0 | 错误:除数为零 |
| 2 | -10 | 1 | -10.0 |
| 3 | 0 | -5 | 0.0 |
| 4 | 1000 | 5 | 200.0 |
| 5 | 10 | 100 | 0.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 个测试用例,涵盖所有有效的支付方式/配送方式/用户组合及其预期费用和结果。