package com.softwaremill.common.testserver;
import org.testng.annotations.Test;
import static java.lang.String.format;
public class TestServerPerformanceTest {
@Test(enabled = false, description = "Run manually when you need it.")
public void measureHowFastTestServerIs() throws Exception {
long count = 0;
double avrCreation = 0;
double avrStart = 0;
double avrStop = 0;
while(true) {
long beforeCreation = System.currentTimeMillis();
TestServer server = new TestServer();
long beforeStart = System.currentTimeMillis();
server.start();
long beforeStop = System.currentTimeMillis();
server.stop();
long afterStop = System.currentTimeMillis();
long creation = beforeStart - beforeCreation;
long start = beforeStop - beforeStart;
long stop = afterStop - beforeStop;
count++;
double prevAvrCreation = avrCreation;
double prevAvrStart = avrStart;
double prevAvrStop = avrStop;
avrCreation = improveAverage(avrCreation, count, creation);
avrStart = improveAverage(avrStart, count, start);
avrStop = improveAverage(avrStop, count, stop);
System.out.println(format("After %s iterations", count));
System.out.println(format("Average creation: %f", avrCreation));
System.out.println(format("Average start: %f", avrStart));
System.out.println(format("Average stop: %f", avrStop));
if (
differsBy1PercentOrLess(prevAvrCreation, avrCreation)
&& differsBy1PercentOrLess(prevAvrStart, avrStart)
&& differsBy1PercentOrLess(prevAvrStop, avrStop)
&& count > 10) {
break;
}
}
}
private boolean differsBy1PercentOrLess(double prevAvrCreation, double avrCreation) {
double onePercent = prevAvrCreation / 100;
return Math.abs(avrCreation - prevAvrCreation) < onePercent;
}
private double improveAverage(double average, long countWithNew, double newValue) {
return (average * (countWithNew - 1) + newValue) / countWithNew;
}
}