From f110ffe8a958fbf0842e26a8153858c663ec8860 Mon Sep 17 00:00:00 2001 From: Dominik Adam Przybysz Date: Tue, 15 Dec 2015 05:42:22 +0100 Subject: [PATCH] Add benchmark in separate project Change-Id: Ib0d29c334cf46744e33fa609eedce52892740af7 --- performance-tests/pom.xml | 67 ++++++++++++++++ .../mockserver/client/MockserverTest.java | 80 +++++++++++++++++++ pom.xml | 1 + 3 files changed, 148 insertions(+) create mode 100644 performance-tests/pom.xml create mode 100644 performance-tests/src/test/java/pl/touk/mockserver/client/MockserverTest.java diff --git a/performance-tests/pom.xml b/performance-tests/pom.xml new file mode 100644 index 0000000..2987f78 --- /dev/null +++ b/performance-tests/pom.xml @@ -0,0 +1,67 @@ + + + + http-mock-server + pl.touk.mockserver + 2.1.2-SNAPSHOT + + 4.0.0 + + mockserver-performance-tests + + + + pl.touk.mockserver + mockserver + ${project.version} + + + pl.touk.mockserver + mockserver-client + ${project.version} + + + org.openjdk.jmh + jmh-core + 1.11.2 + test + + + org.openjdk.jmh + jmh-generator-annprocess + 1.11.2 + test + + + + + + + org.codehaus.mojo + exec-maven-plugin + + + run-benchmarks + integration-test + + exec + + + test + java + + -classpath + + org.openjdk.jmh.Main + .* + + + + + + + + + \ No newline at end of file diff --git a/performance-tests/src/test/java/pl/touk/mockserver/client/MockserverTest.java b/performance-tests/src/test/java/pl/touk/mockserver/client/MockserverTest.java new file mode 100644 index 0000000..44e6910 --- /dev/null +++ b/performance-tests/src/test/java/pl/touk/mockserver/client/MockserverTest.java @@ -0,0 +1,80 @@ +package pl.touk.mockserver.client; + +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.HttpClients; +import org.openjdk.jmh.annotations.*; +import org.openjdk.jmh.infra.BenchmarkParams; +import org.openjdk.jmh.infra.ThreadParams; +import pl.touk.mockserver.api.request.AddMock; +import pl.touk.mockserver.server.HttpMockServer; + +import java.io.IOException; +import java.util.concurrent.TimeUnit; + +@State(Scope.Benchmark) +@OutputTimeUnit(TimeUnit.SECONDS) +public class MockserverTest { + HttpMockServer httpMockServer; + + @Setup + public void prepareMockServer(BenchmarkParams params) { + try { + httpMockServer = new HttpMockServer(9999); + } catch (Exception e) { + //OK + } + } + + @TearDown + public void stopMockServer() { + try { + httpMockServer.stop(); + } catch (Exception e) { + } + } + + @State(Scope.Thread) + public static class TestState { + RemoteMockServer remoteMockServer; + HttpClient httpClient; + int current; + + @Setup + public void prepareMockServer(ThreadParams params) { + remoteMockServer = new RemoteMockServer("localhost", 9999); + httpClient = HttpClients.createDefault(); + current = params.getThreadIndex(); + } + } + + + @Benchmark + @Measurement(iterations = 60) + @Fork(warmups = 1, value = 1) + @BenchmarkMode({Mode.AverageTime, Mode.Throughput}) + @Warmup(iterations = 10) + @Threads(4) + public void shouldHandleManyRequestsSimultaneously(TestState testState) throws IOException { + int current = testState.current; + int endpointNumber = current % 10; + int port = 9000 + (current % 7); + AddMock addMock = new AddMock(); + addMock.setName("testRest" + current); + addMock.setPath("testEndpoint" + endpointNumber); + addMock.setPort(port); + addMock.setPredicate("{req -> req.xml.name() == 'request" + current + "' }"); + addMock.setResponse("{req -> ''}"); + testState.remoteMockServer.addMock(addMock); + HttpPost restPost = new HttpPost("http://localhost:" + port + "/testEndpoint" + endpointNumber); + restPost.setEntity(new StringEntity("", ContentType.create("text/xml", "UTF-8"))); + CloseableHttpResponse response = (CloseableHttpResponse) testState.httpClient.execute(restPost); + String stringResponse = Util.extractStringResponse(response); + testState.remoteMockServer.removeMock("testRest" + current, true); + assert stringResponse.equals(""); + } + +} diff --git a/pom.xml b/pom.xml index 8f06801..fdceb5f 100644 --- a/pom.xml +++ b/pom.xml @@ -17,6 +17,7 @@ mockserver mockserver-tests mockserver-api + performance-tests