package benchmark;
import com.m3.curly.HTTP;
import com.m3.curly.Request;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
import org.apache.commons.httpclient.methods.GetMethod;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import server.HttpServer;
import server.handler.GetMethodHandler;
public class SimpleGetBenchmarkTest {
Logger logger = LoggerFactory.getLogger(SimpleGetBenchmarkTest.class);
Runnable getRunnable(HttpServer server) {
final HttpServer _server = server;
return new Runnable() {
@Override
public void run() {
try {
_server.start();
} catch (Exception e) {
logger.debug("Failed to invoke server because {}", e.getMessage(), e);
}
}
};
}
@Test
public void createInstanceEveryTime() throws Exception {
final HttpServer server = new HttpServer(new GetMethodHandler(), 8888);
try {
Runnable runnable = getRunnable(server);
new Thread(runnable).start();
Thread.sleep(300L);
String URL = "http://localhost:8888/";
int timesToCall = 300;
{
long startTime = System.currentTimeMillis();
for (int i = 0; i < timesToCall; i++) {
Request request = new Request(URL);
HTTP.get(request);
Thread.sleep(10L);
}
long endTime = System.currentTimeMillis();
long millis = endTime - startTime - 10 * timesToCall;
System.out.println("com.m3.curly 300 GET req : " + millis + " milliseconds");
Thread.sleep(300L);
}
{
long startTime = System.currentTimeMillis();
for (int i = 0; i < timesToCall; i++) {
HttpClient client = new HttpClient();
HttpMethod method = new GetMethod(URL);
client.executeMethod(method);
Thread.sleep(10L);
}
long endTime = System.currentTimeMillis();
long millis = endTime - startTime - 10 * timesToCall;
System.out.println("Commons HttpClient 300 GET req : " + millis + " milliseconds");
Thread.sleep(300L);
}
{
long startTime = System.currentTimeMillis();
for (int i = 0; i < timesToCall; i++) {
HttpClient client = new HttpClient(new MultiThreadedHttpConnectionManager());
HttpMethod method = new GetMethod(URL);
client.executeMethod(method);
Thread.sleep(10L);
}
long endTime = System.currentTimeMillis();
long millis = endTime - startTime - 10 * timesToCall;
System.out.println("Commons HttpClient(MultiThreaded) 300 GET req : " + millis + " milliseconds");
Thread.sleep(300L);
}
} finally {
server.stop();
Thread.sleep(300L);
}
}
@Test
public void reuseInstance() throws Exception {
final HttpServer server = new HttpServer(new GetMethodHandler(), 8888);
try {
Runnable runnable = getRunnable(server);
new Thread(runnable).start();
Thread.sleep(300L);
String URL = "http://localhost:8888/";
int timesToCall = 300;
{
Request request = new Request(URL);
long startTime = System.currentTimeMillis();
for (int i = 0; i < timesToCall; i++) {
HTTP.get(request);
Thread.sleep(10L);
}
long endTime = System.currentTimeMillis();
long millis = endTime - startTime - 10 * timesToCall;
System.out.println("com.m3.curly 300 GET req : " + millis + " milliseconds");
Thread.sleep(300L);
}
{
HttpClient client = new HttpClient();
long startTime = System.currentTimeMillis();
HttpMethod method = new GetMethod(URL);
for (int i = 0; i < timesToCall; i++) {
client.executeMethod(method);
Thread.sleep(10L);
}
long endTime = System.currentTimeMillis();
long millis = endTime - startTime - 10 * timesToCall;
System.out.println("Commons HttpClient 300 GET req : " + millis + " milliseconds");
Thread.sleep(300L);
}
} finally {
server.stop();
Thread.sleep(100L);
}
}
}