Skip to content
Independent guides for QA & test automationRSSEditorial policy
QA Vibes

Free tool

Pairwise test case generator

Testing every combination of browsers, devices, and settings is rarely possible. Cover every pair of values instead, with a fraction of the test cases.

One per line: Name: value, value. Start a value with ~ to mark it invalid. Give a value other names with |, like Chrome | Google Chrome, so older test cases still match.

IF OS = iOS THEN Browser IN Safari, Chrome or NEVER A = x AND B != y. Rules stay when you edit values; a rule naming a missing value is reported here.

Cases you already run, e.g. Browser = Edge, OS = Windows. They come first; missing values are filled in.

Coverage

Paste cases you already have as CSV, or copy them from a spreadsheet. The first line names the parameters and each row is one case. A CSV exported here works as it is, even after you add a parameter or remove a value.

Runs in your browser. Nothing you type is sent anywhere.

16 test cases cover all 68 value pairs

All combinations would be 144 test cases, so this set is 88.8% smaller. 5 value pairs can't occur because of your rules or invalid values, so they aren't needed. The first case is your required case.

#BrowserOSPaymentCountry
1 (required)EdgeWindowsCardUS
2ChromeWindowsPayPalUnknowninvalid
3ChromemacOSExpired cardinvalidUK
4SafariiOSCardUnknowninvalid
5FirefoxmacOSPayPalUS
6ChromeiOSExpired cardinvalidUS
7SafariWindowsExpired cardinvalidUK
8EdgemacOSCardUnknowninvalid
9ChromeAndroidPayPalUS
10SafariiOSPayPalUS
11EdgeAndroidExpired cardinvalidUK
12FirefoxWindowsExpired cardinvalidUK
13FirefoxAndroidCardUnknowninvalid
14ChromeiOSCardUK
15SafarimacOSPayPalUS
16EdgeWindowsPayPalUS

Why pairwise testing works

Many defects are triggered by one setting or by the interaction of two. Covering every pair of values catches those without running every combination. Four parameters with three values each have 81 combinations; this generator covers every pair in 9 test cases, which is the smallest possible number for that model.

Choose 3-way coverage for risky areas where three settings might interact. It needs more test cases, but still far fewer than all combinations.

Pairwise testing chooses which combinations to run. You still decide the values, so pick them with equivalence partitions and boundary values: see how to write effective test cases.

To see what a generated set catches on a real app, and what it misses, read pairwise testing on Sauce Demo, measured against every combination.

What makes this generator different

  • Rules that survive edits. Rules are text, so changing a value never deletes them. A rule that names a value you removed is reported with its line number.
  • Other names for a value. Write Chrome | Google Chrome and cases, rules, or old tables that say either name still match. Exports always use the first name. When an old case differs only in spacing or punctuation, like IE11, the check suggests the alias to add.
  • Invalid values. Values starting with ~ appear at most once per test case, so a failing negative test points at one bad input.
  • Required cases. Start from test cases you already run; the generator only adds what they don't cover.
  • Check the cases you already have. Paste them as CSV or from a spreadsheet to see which pairs they cover, which are missing, and which rows break a rule or repeat another. Then keep them and add only the missing cases. After a release adds a parameter or removes a value, last release's cases still load: each affected case is listed for review, and filling chooses only the values it lacks. Cases keep their IDs, changed cases are marked for review, and you can export the updated set with IDs or copy a change summary. Coverage is counted against your model, so it can't tell you about options the model leaves out.
  • Checked coverage. The summary counts every pair or triple a valid test case can contain, and every one of them is covered. Pairs your rules make impossible are listed separately.
  • Ready to use. Copy CSV, Markdown, JSON, or a Gherkin Examples table for a Cucumber Scenario Outline, or share a link that keeps the whole model in the URL.
  • Saved for next release. “Save matrix” writes the model and its cases to a JSON file on your computer; “Open matrix” reads one back, with the saved cases loaded straight into the check above. Nothing is uploaded and there is no account: the file is yours, and it stays readable by later versions of this tool.

The generator is deterministic: the same model always gives the same cases. For 2-way coverage of models without rules, invalid values, or required cases, it also tries two known constructions and keeps whichever set is smallest: the binary construction of Kleitman, Spencer, and Katona when every parameter has two values (100 such parameters need 10 cases, the proven minimum), and Bush's orthogonal arrays when the values fit a finite field (6 parameters with 5 values need 25). When the summary says no set can be smaller, that has been checked against the known lower bound. Otherwise the result comes from a greedy search, which may be larger than necessary: for 13 parameters with 3 values it finds 19 cases. It runs in your browser, so very large 3-way models can take a few seconds.