Co-Pilot / 辅助式
更新于 a month ago

pypict-claude-skill

Oomkamal
0.0k
omkamal/pypict-claude-skill
74
Agent 评分

💡 摘要

一个使用PICT(成对独立组合测试)从需求或代码中生成成对测试模型,以设计系统化测试用例的技能。

🎯 适合人群

软件测试工程师QA自动化工程师软件开发人员DevOps工程师产品经理

🤖 AI 吐槽:它是一个优秀的测试设计师,但你需要另一个技能来实际运行它精心策划的测试。

安全分析中风险

风险:该技能可能生成或引用执行shell命令或处理不受信任模型文件的脚本(pict_helper.py),如果输入未经过清理,则存在代码注入风险。缓解措施:对任何生成的Python代码执行实施输入验证和沙箱隔离,并将模型文件视为不受信任的数据。


name: pict-test-designer description: Design comprehensive test cases using PICT (Pairwise Independent Combinatorial Testing) for any piece of requirements or code. Analyzes inputs, generates PICT models with parameters, values, and constraints for valid scenarios using pairwise testing. Outputs the PICT model, markdown table of test cases, and expected results.

PICT Test Designer

This skill enables systematic test case design using PICT (Pairwise Independent Combinatorial Testing). Given requirements or code, it analyzes the system to identify test parameters, generates a PICT model with appropriate constraints, executes the model to generate pairwise test cases, and formats the results with expected outputs.

When to Use This Skill

Use this skill when:

  • Designing test cases for a feature, function, or system with multiple input parameters
  • Creating test suites for configurations with many combinations
  • Needing comprehensive coverage with minimal test cases
  • Analyzing requirements to identify test scenarios
  • Working with code that has multiple conditional paths
  • Building test matrices for API endpoints, web forms, or system configurations

Workflow

Follow this process for test design:

1. Analyze Requirements or Code

From the user's requirements or code, identify:

  • Parameters: Input variables, configuration options, environmental factors
  • Values: Possible values for each parameter (using equivalence partitioning)
  • Constraints: Business rules, technical limitations, dependencies between parameters
  • Expected Outcomes: What should happen for different combinations

Example Analysis:

For a login function with requirements:

  • Users can login with username/password
  • Supports 2FA (on/off)
  • Remembers login on trusted devices
  • Rate limits after 3 failed attempts

Identified parameters:

  • Credentials: Valid, Invalid
  • TwoFactorAuth: Enabled, Disabled
  • RememberMe: Checked, Unchecked
  • PreviousFailures: 0, 1, 2, 3, 4

2. Generate PICT Model

Create a PICT model with:

  • Clear parameter names
  • Well-defined value sets (using equivalence partitioning and boundary values)
  • Constraints for invalid combinations
  • Comments explaining business rules

Model Structure:

# Parameter definitions
ParameterName: Value1, Value2, Value3

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

Refer to references/pict_syntax.md for:

  • Complete syntax reference
  • Constraint grammar and operators
  • Advanced features (sub-models, aliasing, negative testing)
  • Command-line options
  • Detailed constraint patterns

Refer to references/examples.md for:

  • Complete real-world examples by domain
  • Software function testing examples
  • Web application, API, and mobile testing examples
  • Database and configuration testing patterns
  • Common patterns for authentication, resource access, error handling

3. Execute PICT Model

Generate the PICT model text and format it for the user. You can use Python code directly to work with the model:

# 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)

Using the helper script (optional): The scripts/pict_helper.py script provides utilities for model generation and output formatting:

# 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

To generate actual test cases, the user can:

  1. Save the PICT model to a file (e.g., model.txt)
  2. Use online PICT tools like:
    • https://pairwise.yuuniworks.com/
    • https://pairwise.teremokgames.com/
  3. Or install PICT locally (see references/pict_syntax.md)

4. Determine Expected Outputs

For each generated test case, determine the expected outcome based on:

  • Business requirements
  • Code logic
  • Valid/invalid combinations

Create a list of expected outputs corresponding to each test case.

5. Format Complete Test Suite

Provide the user with:

  1. PICT Model - The complete model with parameters and constraints
  2. Markdown Table - Test cases in table format with test numbers
  3. Expected Outputs - Expected result for each test case

Output Format

Present results in this structure:

## 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

Best Practices

Parameter Identification

Good:

  • Use descriptive names: AuthMethod, UserRole, PaymentType
  • Apply equivalence partitioning: FileSize: Small, Medium, Large instead of FileSize: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
  • Include boundary values: Age: 0, 17, 18, 65, 66
  • Add negative values for error testing: Amount: ~-1, 0, 100, ~999999

Avoid:

  • Generic names: Param1, Value1, V1
  • Too many values without partitioning
  • Missing edge cases

Constraint Writing

Good:

  • Document rationale: # Safari only available on MacOS
  • Start simple, add incrementally
  • Test constraints work as expected

Avoid:

  • Over-constraining (eliminates too many valid combinations)
  • Under-constraining (generates invalid test cases)
  • Complex nested logic without clear documentation

Expected Output Definition

Be specific:

  • "Login succeeds, user redirected to dashboard"
  • "HTTP 400: Invalid credentials error"
  • "2FA prompt displayed"

Not vague:

  • "Works"
  • "Error"
  • "Success"

Scalability

For large parameter sets:

  • Use sub-models to group related parameters with different orders
  • Consider separate test suites for unrelated features
  • Start with order 2 (pairwise), increase for critical combinations
  • Typical pairwise testing reduces test cases by 80-90% vs exhaustive

Common Patterns

Web Form Testing

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 Endpoint Testing

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}' ]

Configuration Testing

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"' ]

Troubleshooting

No Test Cases Generated

  • Check constraints aren't over-restrictive
  • Verify constraint syntax (must end with ;)
  • Ensure parameter names in constraints match definitions (use [ParameterName])

Too Many Test Cases

  • Verify using order 2 (pairwise) not higher order
  • Consider breaking into sub-models
  • Check if parameters can be separated into independent test suites

Invalid Combinations in Output

  • Add missing constraints
  • Verify constraint logic is correct
  • Check if you need to use NOT or <> operators

Script Errors

  • Ensure pypict is installed: pip install pypict --break-system-packages
  • Check Python version (3.7+)
  • Verify model syntax is valid

References

  • references/pict_syntax.md - Complete PICT syntax reference with grammar and operators
  • references/examples.md - Comprehensive real-world examples across different domains
  • scripts/pict_helper.py - Python utilities for model generation and output formatting
  • PICT GitHub Repository - Official PICT documentation
  • pypict Documentation - Python binding documentation
  • Online PICT Tools - Web-based PICT generator

Examples

Example 1: Simple Function Testing

User Request: "Design tests for a divide function that takes two numbers and returns the result."

Analysis:

  • Parameters: dividend (number), divisor (number)
  • Values: Using equivalence partitioning and boundaries
    • Numbers: negative, zero, positive, large values
  • Constraints: Division by zero is invalid
  • Expected outputs: Result or error

PICT Model:

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

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

Test Cases:

| Test # | Dividend | Divisor | Expected Output | | --- | --- | --- | --- | | 1 | 10 | 0 | Error: Division

五维分析
清晰度8/10
创新性7/10
实用性9/10
完整性7/10
可维护性6/10
优缺点分析

优点

  • 自动化复杂的组合测试设计,减少人工工作。
  • 为测试参数识别提供结构化方法。
  • 生成简洁的成对测试套件以实现广泛覆盖。
  • 包含常见场景的实用示例和辅助脚本。

缺点

  • 需要用户理解PICT语法和组合测试概念。
  • 依赖外部PICT工具执行(在线或本地安装)。
  • README篇幅较长,对于快速参考可以更精简。
  • 约束条件配置不当可能导致生成无效测试用例。

相关技能

pytorch

S
toolCode Lib / 代码库
92/ 100

“它是深度学习的瑞士军刀,但祝你好运能从47种安装方法里找到那个不会搞崩你系统的那一个。”

agno

S
toolCode Lib / 代码库
90/ 100

“它承诺成为智能体领域的Kubernetes,但得看开发者有没有耐心学习又一个编排层。”

nuxt-skills

S
toolCo-Pilot / 辅助式
90/ 100

“这本质上是一份组织良好的小抄,能把你的 AI 助手变成一只 Nuxt 框架的复读机。”

免责声明:本内容来源于 GitHub 开源项目,仅供展示和评分分析使用。

版权归原作者所有 omkamal.