ProTest — Covering Array Generator¶
Generate minimal test matrices that cover all t-way parameter interactions. A covering array guarantees every pair (or triple, etc.) of parameter values appears in at least one test case, using far fewer cases than exhaustive testing. Research shows nearly all software failures are caused by interactions between 2-6 parameters.
When to Use¶
- Testing combinations of configuration options, feature flags, or input parameters
- 3+ parameters with multiple values each where exhaustive testing is impractical
- You want pairwise (2-way) or higher-order coverage guarantees
How to Run¶
protest generate -i model.cahtt -o results.csv
Workflow¶
- Identify parameters and their possible values from code or context
- Identify constraints — invalid combinations (e.g., Safari only on Mac)
- Create a
.cahttmodel file (see format below) - Run:
protest generate -i model.cahtt -o results.csv - Read
results.csv— each row is a test case
Model File Format (.cahtt)¶
{
"Version": 1,
"GlobalOrder": 2,
"Parameters": [
{
"Name": "OS",
"Values": [
{ "Name": "Windows", "Weight": 1, "IsNegative": false },
{ "Name": "Linux", "Weight": 1, "IsNegative": false }
]
},
{
"Name": "Browser",
"Values": [
{ "Name": "Chrome", "Weight": 2, "IsNegative": false },
{ "Name": "Firefox", "Weight": 1, "IsNegative": false }
]
}
],
"ConstraintText": "IF [OS] = \"Windows\" THEN [Browser] <> \"Safari\";",
"Seeds": [
{ "OS": "Windows", "Browser": "Chrome" }
],
"SubModels": []
}
Weight > 1 biases toward that value. IsNegative marks excluded values. Seeds are must-include rows. SubModels group parameters for higher-order coverage ("Order": 3).
CLI Quick Reference¶
| Flag | Default | Purpose |
|---|---|---|
-i, --input |
required | Model file (.cahtt or .pict) |
-o, --output |
required | Output file (.csv, .md, .cahtt, .pict); repeatable |
--engine |
from model | pict or sipo |
--strength |
from model (2) | T-way coverage strength |
--trials |
1000/10000 | Parallel trials (best result kept) |
--max-time |
no limit | Seconds before stopping |
--seed |
auto | Deterministic random seed |
--cores |
~75% | Parallel cores |
Run with generate --help for all options.
Example¶
protest generate -i model.cahtt -o results.csv --engine sipo --max-time 30
protest generate -i model.cahtt -o results.csv -o results.md