Pairwise test cases generator

Generate array of minimal size of pairwise tests cover all pairs of changing params

License

License

GroupId

GroupId

com.anyqn.lib
ArtifactId

ArtifactId

pairwiser
Last Version

Last Version

0.1.21
Release Date

Release Date

Type

Type

jar
Description

Description

Pairwise test cases generator
Generate array of minimal size of pairwise tests cover all pairs of changing params
Project URL

Project URL

https://github.com/3DRaven/pairwiser
Source Code Management

Source Code Management

https://github.com/3DRaven/pairwiser

Download pairwiser

How to add to project

<!-- https://jarcasting.com/artifacts/com.anyqn.lib/pairwiser/ -->
<dependency>
    <groupId>com.anyqn.lib</groupId>
    <artifactId>pairwiser</artifactId>
    <version>0.1.21</version>
</dependency>
// https://jarcasting.com/artifacts/com.anyqn.lib/pairwiser/
implementation 'com.anyqn.lib:pairwiser:0.1.21'
// https://jarcasting.com/artifacts/com.anyqn.lib/pairwiser/
implementation ("com.anyqn.lib:pairwiser:0.1.21")
'com.anyqn.lib:pairwiser:jar:0.1.21'
<dependency org="com.anyqn.lib" name="pairwiser" rev="0.1.21">
  <artifact name="pairwiser" type="jar" />
</dependency>
@Grapes(
@Grab(group='com.anyqn.lib', module='pairwiser', version='0.1.21')
)
libraryDependencies += "com.anyqn.lib" % "pairwiser" % "0.1.21"
[com.anyqn.lib/pairwiser "0.1.21"]

Dependencies

compile (4)

Group / Artifact Type Version
org.projectlombok : lombok jar 1.18.16
org.slf4j : slf4j-api jar 1.6.6
ch.qos.logback : logback-classic jar 1.0.7
ch.qos.logback : logback-core jar 1.0.7

test (3)

Group / Artifact Type Version
org.junit.jupiter : junit-jupiter jar 5.6.2
org.assertj : assertj-core jar 3.15.0
com.fasterxml.jackson.core : jackson-databind jar [2.9.10.4,)

Project Modules

There are no modules declared in this project.

Pairwiser

Library for generate test cases based by pairwise theory

Base theory: All-pairs_testing Base algorithm: barbie.uta.edu

With some modifications

Example

We have system with 10 parameters. As example REST API with input json.

Code example

Map<String, List<Object>> params = new HashMap<>();

for (int i = 0; i < 10; i++) {
	for (int j = 0; j < 10 * Math.random(); j++) {
		params.computeIfAbsent("P" + i, k -> new ArrayList<>()).add("p"+i+"v"+j);
	}
}

PairwiseGenerator<String, Object> gen = new PairwiseGenerator<>(params);
gen.stream().forEach(test -> {
	log.info("Test: {}", test);
});

Type Object used only as example, types of parameters can be any

Maven dependency

<dependency>
  <groupId>com.anyqn.lib</groupId>
  <artifactId>pairwiser</artifactId>
  <version>0.1.21</version>
</dependency>

List of parameters and possible values

  • P0=[p0v0, p0v1, p0v2],
  • P1=[p1v0, p1v1, p1v2, p1v3],
  • P2=[p2v0, p2v1, p2v2, p2v3, p2v4, p2v5],
  • P3=[p3v0, p3v1, p3v2],
  • P4=[p4v0],
  • P5=[p5v0, p5v1, p5v2, p5v3, p5v4, p5v5],
  • P6=[p6v0, p6v1, p6v2, p6v3, p6v4],
  • P7=[p7v0, p7v1],
  • P8=[p8v0, p8v1, p8v2, p8v3, p8v4],
  • P9=[p9v0, p9v1, p9v2]

Micro explain

Bruteforce test cases count is 3 * 4 * 6 * 3 * 1 * 6 * 5 * 2 * 5 * 3 = 194400 Pairwise test cases count = 41

This test cases covered test system by rule "All pairs of params need to add at least once to tests"

Final cases:

  • [p0v0, p1v0, p2v0, p3v0, p4v0, p5v0, p6v0, p7v0, p8v0, p9v0]
  • [p0v1, p1v1, p2v0, p3v1, p4v0, p5v1, p6v1, p7v1, p8v1, p9v1]
  • [p0v2, p1v2, p2v0, p3v2, p4v0, p5v2, p6v2, p7v0, p8v2, p9v2]
  • [p0v0, p1v3, p2v0, p3v1, p4v0, p5v3, p6v3, p7v1, p8v3, p9v2]
  • [p0v1, p1v0, p2v0, p3v2, p4v0, p5v4, p6v4, p7v1, p8v4, p9v1]
  • [p0v2, p1v2, p2v0, p3v0, p4v0, p5v5, p6v0, p7v0, p8v1, p9v0]
  • [p0v1, p1v3, p2v1, p3v0, p4v0, p5v0, p6v1, p7v0, p8v2, p9v1]
  • [p0v0, p1v1, p2v1, p3v2, p4v0, p5v1, p6v2, p7v1, p8v0, p9v0]
  • [p0v2, p1v0, p2v1, p3v1, p4v0, p5v2, p6v3, p7v0, p8v4, p9v2]
  • [p0v2, p1v2, p2v1, p3v0, p4v0, p5v3, p6v4, p7v1, p8v3, p9v1]
  • [p0v0, p1v3, p2v1, p3v2, p4v0, p5v4, p6v0, p7v0, p8v1, p9v2]
  • [p0v1, p1v1, p2v1, p3v1, p4v0, p5v5, p6v1, p7v1, p8v0, p9v0]
  • [p0v2, p1v1, p2v2, p3v1, p4v0, p5v0, p6v2, p7v0, p8v3, p9v2]
  • [p0v1, p1v0, p2v2, p3v0, p4v0, p5v1, p6v3, p7v1, p8v2, p9v0]
  • [p0v0, p1v3, p2v2, p3v2, p4v0, p5v2, p6v4, p7v1, p8v4, p9v1]
  • [p0v1, p1v2, p2v2, p3v1, p4v0, p5v3, p6v0, p7v0, p8v0, p9v1]
  • [p0v2, p1v2, p2v2, p3v2, p4v0, p5v4, p6v1, p7v0, p8v3, p9v0]
  • [p0v0, p1v0, p2v2, p3v0, p4v0, p5v5, p6v2, p7v1, p8v1, p9v2]
  • [p0v0, p1v1, p2v3, p3v2, p4v0, p5v0, p6v3, p7v1, p8v4, p9v1]
  • [p0v2, p1v3, p2v3, p3v1, p4v0, p5v1, p6v4, p7v0, p8v2, p9v2]
  • [p0v1, p1v0, p2v3, p3v0, p4v0, p5v2, p6v0, p7v1, p8v3, p9v0]
  • [p0v0, p1v2, p2v3, p3v2, p4v0, p5v3, p6v1, p7v0, p8v1, p9v2]
  • [p0v2, p1v3, p2v3, p3v0, p4v0, p5v4, p6v2, p7v0, p8v0, p9v1]
  • [p0v1, p1v1, p2v3, p3v1, p4v0, p5v5, p6v3, p7v1, p8v2, p9v0]
  • [p0v0, p1v2, p2v4, p3v0, p4v0, p5v0, p6v4, p7v0, p8v4, p9v0]
  • [p0v1, p1v1, p2v4, p3v1, p4v0, p5v1, p6v0, p7v1, p8v3, p9v2]
  • [p0v2, p1v0, p2v4, p3v2, p4v0, p5v2, p6v1, p7v0, p8v0, p9v1]
  • [p0v1, p1v3, p2v4, p3v0, p4v0, p5v3, p6v2, p7v1, p8v4, p9v0]
  • [p0v0, p1v1, p2v4, p3v1, p4v0, p5v4, p6v3, p7v0, p8v1, p9v1]
  • [p0v2, p1v3, p2v4, p3v2, p4v0, p5v5, p6v4, p7v1, p8v2, p9v2]
  • [p0v0, p1v0, p2v5, p3v0, p4v0, p5v0, p6v0, p7v0, p8v1, p9v0]
  • [p0v1, p1v2, p2v5, p3v1, p4v0, p5v1, p6v1, p7v1, p8v4, p9v1]
  • [p0v2, p1v1, p2v5, p3v2, p4v0, p5v2, p6v2, p7v0, p8v0, p9v2]
  • [p0v0, p1v0, p2v5, p3v0, p4v0, p5v3, p6v3, p7v1, p8v2, p9v0]
  • [p0v1, p1v3, p2v5, p3v1, p4v0, p5v4, p6v4, p7v0, p8v3, p9v1]
  • [p0v2, p1v2, p2v5, p3v2, p4v0, p5v5, p6v0, p7v1, p8v4, p9v2]
  • [p0v0, p1v1, p2v0, p3v0, p4v0, p5v3, p6v4, p7v0, p8v0, p9v0]
  • [p0v1, p1v0, p2v0, p3v1, p4v0, p5v2, p6v4, p7v1, p8v1, p9v1]
  • [p0v2, p1v2, p2v0, p3v2, p4v0, p5v0, p6v3, p7v0, p8v0, p9v2]
  • [p0v0, p1v3, p2v0, p3v0, p4v0, p5v4, p6v0, p7v1, p8v2, p9v0]
  • [p0v1, p1v0, p2v0, p3v1, p4v0, p5v5, p6v0, p7v0, p8v3, p9v1]

Release instruction

mvn release:clean release:prepare mvn release:perform

Important rule:

in pom.xml need to add gpg, javadoc and source maven plugins to release profile, because without this step release plugin do not execute this plugins.

License

Apache License Version 2.0, January 2004 http://www.apache.org/licenses/

Versions

Version
0.1.21
0.1.20
0.1.19