Issue
I am performing some model-based testing on an application system, and I want to execute my tests for a specified duration of time (let's say for 15 minutes).
How can I achieve this, please?
So far, my tester looks like this:
final Tester tester = new GreedyTester(new AgentSystemModelTests());
tester.setRandom(new Random());
tester.buildGraph();
tester.addListener(new StopOnFailureListener());
tester.addListener("verbose");
tester.addCoverageMetric(new TransitionPairCoverage());
tester.addCoverageMetric(new StateCoverage());
tester.addCoverageMetric(new ActionCoverage());
tester.generate(500);
tester.printCoverage();
Solution
tester.generate(int n)
is defined in the Tester
class as being a loop run for n
times calling generate()
.
To run the tests for a set amount of time, consider using a while
loop set to stop as soon as the time has passed, something like the following.
final Duration TEST_DURATION = Duration.ofMinutes(15);
final Instant startTime = Instant.now();
final Instant finishTime = startTime.plus(TEST_DURATION);
final Tester tester = new GreedyTester(new AgentSystemModelTests());
tester.setRandom(new Random());
tester.buildGraph();
tester.addListener(new StopOnFailureListener());
tester.addListener("verbose");
tester.addCoverageMetric(new TransitionPairCoverage());
tester.addCoverageMetric(new StateCoverage());
tester.addCoverageMetric(new ActionCoverage());
// This is the magic predicate for the loop
while (Instant.now().isBefore(finishTime)) {
tester.generate();
}
tester.printCoverage();
Sources:
GreedyTester.java which inherits RandomTester.java which inherits Tester.java
Answered By - Mark Said Camilleri