2016-08-10 43 views

Odpowiedz

7

Krótka odpowiedź jest tak.

natknąłem się na ten układ katalogów w moich projektów (ale na pewno można go zmienić)

+- src/ 
    +- main/java - sources 
    +- test/ 
     +- java  - test sources 
     +- perf  - benchmarks 

Trzeba kilka wtyczek do osiągnięcia tego.

  1. build-helper-maven-plugin dołączyć zwyczaj źródła badań lokalizacji
<execution> 
    <id>add-test-source</id> 
    <phase>generate-test-sources</phase> 
    <goals> 
     <goal>add-test-source</goal> 
    </goals> 
    <configuration> 
     <sources> 
      <source>src/test/perf</source> 
     </sources> 
    </configuration> 
</execution> 
  1. maven-compiler-plugin uruchomić jmh-generator-annprocess adnotacji procesora na test-compile fazy
<execution> 
    <goals> 
     <goal>testCompile</goal> 
    </goals> 

    <configuration> 
     <annotationProcessorPaths> 
      <path> 
       <groupId>org.openjdk.jmh</groupId> 
       <artifactId>jmh-generator-annprocess</artifactId> 
       <version>${jmh.version}</version> 
      </path> 
     </annotationProcessorPaths> 
    </configuration> 
</execution> 
  1. maven-assembly-plugin stworzyć runnable słoik z benchmarków
<execution> 
    <id>make-assembly</id> 
    <phase>package</phase> 
    <goals> 
     <goal>single</goal> 
    </goals> 
    <configuration> 
     <attach>true</attach> 
     <archive> 
      <manifest> 
       <mainClass>org.openjdk.jmh.Main</mainClass> 
      </manifest> 
     </archive> 
    </configuration> 
</execution> 
<assembly> 
    <id>perf-tests</id> 
    <formats> 
     <format>jar</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <dependencySets> 
     <dependencySet> 
      <outputDirectory>/</outputDirectory> 
      <useProjectArtifact>true</useProjectArtifact> 
      <unpack>true</unpack> 
      <scope>test</scope> 
     </dependencySet> 
    </dependencySets> 
    <fileSets> 
     <fileSet> 
      <directory>${project.build.directory}/test-classes</directory> 
      <outputDirectory>/</outputDirectory> 
      <includes> 
       <include>**/*</include> 
      </includes> 
      <useDefaultExcludes>true</useDefaultExcludes> 
     </fileSet> 
    </fileSets> 
</assembly> 

Po tym dostaniesz wykonywalnego słoik z wzorców, które mogą być uruchamiane jako zwykły

java -jar target/your-project-version-perf-tests.jar 

Możesz zobaczyć działający przykład: here.

UWAGA

Jedyną wadą tego rozwiązania jest to, że wszystkie klasy badań i zależności badań będą również zawarte w słoiku z benchmarków, które zdecydowanie bloats go. Ale można tego uniknąć poprzez opracowywanie założeń w oddzielne (inne niż ${project.build.directory}/test-classes) katalogu.

+0

W przykładzie roboczym (tj doSomethingTest w ExampleBenchmark.java), to lepiej, aby uniknąć pętli for, ponieważ prowadzi do niezamierzonych rezultatów ze względu na optymalizację wydajności pętli w JVM. –