27 / 87 · 02 AI-Augmented Test Design · Combinatorial Test Suite Generation← prev⊞ allnext →☰ Read as one page
5.4AI vs Dedicated Combinatorial Tools
| Approach | Best For | Limitation |
|---|---|---|
| AI-generated pairwise | Quick exploration, small parameter spaces (5-7 params) | Not mathematically optimal for large spaces |
| PICT (Microsoft) | Large parameter spaces (10+ params), provable coverage | Requires installation and configuration |
| ACTS (NIST) | Research-grade n-way coverage with constraints | Java dependency, steeper learning curve |
| AI + PICT hybrid | AI identifies parameters and constraints, PICT generates combos | Extra setup, but most rigorous |
The AI + PICT Hybrid Workflow
This is the most rigorous approach and worth mentioning in interviews:
Step 1: Ask AI to identify all relevant parameters and their values
from the specification or requirements document.
Step 2: Ask AI to identify constraints (invalid combinations that
should be excluded, e.g., "SAML auth is only available for
Enterprise accounts").
Step 3: Generate PICT model file from AI output:
# registration.pict (generated by AI, verified by human)
Browser: Chrome, Firefox, Safari, Edge
OS: Windows, macOS, Linux
Language: English, Spanish, Japanese
Account: Free, Pro, Enterprise
Auth: EmailPassword, GoogleSSO, SAML
# Constraints (AI-identified)
IF [Auth] = "SAML" THEN [Account] = "Enterprise";
IF [OS] = "macOS" THEN [Browser] <> "Edge";
Step 4: Run PICT to generate the optimal test suite:
$ pict registration.pict > test_combinations.tsv
Step 5: Ask AI to convert the TSV into executable test code
matching your framework and style.
Converting Combinatorial Tables to Test Code
import pytest
import csv
def load_pairwise_tests(filepath: str) -> list[dict]:
"""Load pairwise test cases from a TSV file."""
with open(filepath) as f:
reader = csv.DictReader(f, delimiter='\t')
return list(reader)
PAIRWISE_TESTS = load_pairwise_tests("test_combinations.tsv")
class TestRegistrationCombinatorial:
"""Pairwise combinatorial tests for user registration."""
@pytest.mark.parametrize("combo", PAIRWISE_TESTS,
ids=[f"combo-{i}" for i in range(len(PAIRWISE_TESTS))])
def test_registration_combination(self, browser_driver, combo):
"""Each pairwise combination should either succeed or fail gracefully."""
driver = browser_driver(
browser=combo["Browser"],
os=combo["OS"],
language=combo["Language"]
)
# Navigate to registration
driver.navigate("/register")
# Fill form based on combination
driver.select_account_type(combo["Account"])
driver.select_auth_method(combo["Auth"])
# Assert: registration either succeeds or shows a clear error
# (no crashes, no blank pages, no 500 errors)
assert driver.current_url in ["/dashboard", "/register"]
if driver.current_url == "/register":
assert driver.find_element(".error-message").is_displayed()