-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #85 from PracticaDS/82-tests-de-performance
pdes #82 - Performance con Gatling
- Loading branch information
Showing
11 changed files
with
298 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
# eclipse conf file | ||
.settings | ||
.classpath | ||
.project | ||
.manager | ||
.scala_dependencies | ||
.cache | ||
|
||
# idea conf files | ||
.idea | ||
*.iml | ||
*.ipr | ||
*.iws | ||
|
||
# building | ||
target | ||
build | ||
null | ||
tmp | ||
temp | ||
dist | ||
test-output | ||
build.log | ||
|
||
# misc | ||
.DS_Store | ||
|
||
# project files to ignore | ||
!/results/.gitkeep |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
Revolución Industrial - Performance con Gatling | ||
========================= | ||
|
||
Después de haber instalado Java y Maven, correr el siguiente comando para generar un reporte: | ||
|
||
$mvn gatling:test |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||
|
||
<modelVersion>4.0.0</modelVersion> | ||
|
||
<groupId>io.gatling</groupId> | ||
<artifactId>gatling-maven-plugin-demo</artifactId> | ||
<version>3.1.2</version> | ||
|
||
<properties> | ||
<maven.compiler.source>1.8</maven.compiler.source> | ||
<maven.compiler.target>1.8</maven.compiler.target> | ||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | ||
<gatling.version>${project.version}</gatling.version> | ||
<gatling-plugin.version>3.0.1</gatling-plugin.version> | ||
</properties> | ||
|
||
<dependencies> | ||
<dependency> | ||
<groupId>io.gatling.highcharts</groupId> | ||
<artifactId>gatling-charts-highcharts</artifactId> | ||
<version>${gatling.version}</version> | ||
<scope>test</scope> | ||
</dependency> | ||
</dependencies> | ||
|
||
<build> | ||
<plugins> | ||
<plugin> | ||
<groupId>io.gatling</groupId> | ||
<artifactId>gatling-maven-plugin</artifactId> | ||
<version>${gatling-plugin.version}</version> | ||
</plugin> | ||
</plugins> | ||
</build> | ||
</project> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
akka { | ||
#loggers = ["akka.event.slf4j.Slf4jLogger"] | ||
#logging-filter = "akka.event.slf4j.Slf4jLoggingFilter" | ||
#log-dead-letters = off | ||
actor { | ||
default-dispatcher { | ||
#throughput = 20 | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,127 @@ | ||
######################### | ||
# Gatling Configuration # | ||
######################### | ||
|
||
# This file contains all the settings configurable for Gatling with their default values | ||
|
||
gatling { | ||
core { | ||
#outputDirectoryBaseName = "" # The prefix for each simulation result folder (then suffixed by the report generation timestamp) | ||
#runDescription = "" # The description for this simulation run, displayed in each report | ||
#encoding = "utf-8" # Encoding to use throughout Gatling for file and string manipulation | ||
#simulationClass = "" # The FQCN of the simulation to run (when used in conjunction with noReports, the simulation for which assertions will be validated) | ||
#elFileBodiesCacheMaxCapacity = 200 # Cache size for request body EL templates, set to 0 to disable | ||
#rawFileBodiesCacheMaxCapacity = 200 # Cache size for request body Raw templates, set to 0 to disable | ||
#rawFileBodiesInMemoryMaxSize = 1000 # Below this limit, raw file bodies will be cached in memory | ||
#pebbleFileBodiesCacheMaxCapacity = 200 # Cache size for request body Peeble templates, set to 0 to disable | ||
#shutdownTimeout = 5000 # Milliseconds to wait for the actor system to shutdown | ||
extract { | ||
regex { | ||
#cacheMaxCapacity = 200 # Cache size for the compiled regexes, set to 0 to disable caching | ||
} | ||
xpath { | ||
#cacheMaxCapacity = 200 # Cache size for the compiled XPath queries, set to 0 to disable caching | ||
} | ||
jsonPath { | ||
#cacheMaxCapacity = 200 # Cache size for the compiled jsonPath queries, set to 0 to disable caching | ||
#preferJackson = false # When set to true, prefer Jackson over Boon for JSON-related operations | ||
} | ||
css { | ||
#cacheMaxCapacity = 200 # Cache size for the compiled CSS selectors queries, set to 0 to disable caching | ||
} | ||
} | ||
directory { | ||
#simulations = user-files/simulations # Directory where simulation classes are located (for bundle packaging only) | ||
#resources = user-files/resources # Directory where resources, such as feeder files and request bodies are located (for bundle packaging only) | ||
#reportsOnly = "" # If set, name of report folder to look for in order to generate its report | ||
#binaries = "" # If set, name of the folder where compiles classes are located: Defaults to GATLING_HOME/target. | ||
#results = results # Name of the folder where all reports folder are located | ||
} | ||
} | ||
charting { | ||
#noReports = false # When set to true, don't generate HTML reports | ||
#maxPlotPerSeries = 1000 # Number of points per graph in Gatling reports | ||
#useGroupDurationMetric = false # Switch group timings from cumulated response time to group duration. | ||
indicators { | ||
#lowerBound = 800 # Lower bound for the requests' response time to track in the reports and the console summary | ||
#higherBound = 1200 # Higher bound for the requests' response time to track in the reports and the console summary | ||
#percentile1 = 50 # Value for the 1st percentile to track in the reports, the console summary and Graphite | ||
#percentile2 = 75 # Value for the 2nd percentile to track in the reports, the console summary and Graphite | ||
#percentile3 = 95 # Value for the 3rd percentile to track in the reports, the console summary and Graphite | ||
#percentile4 = 99 # Value for the 4th percentile to track in the reports, the console summary and Graphite | ||
} | ||
} | ||
http { | ||
#fetchedCssCacheMaxCapacity = 200 # Cache size for CSS parsed content, set to 0 to disable | ||
#fetchedHtmlCacheMaxCapacity = 200 # Cache size for HTML parsed content, set to 0 to disable | ||
#perUserCacheMaxCapacity = 200 # Per virtual user cache size, set to 0 to disable | ||
#warmUpUrl = "https://gatling.io" # The URL to use to warm-up the HTTP stack (blank means disabled) | ||
#enableGA = true # Very light Google Analytics, please support | ||
ssl { | ||
keyStore { | ||
#type = "" # Type of SSLContext's KeyManagers store | ||
#file = "" # Location of SSLContext's KeyManagers store | ||
#password = "" # Password for SSLContext's KeyManagers store | ||
#algorithm = "" # Algorithm used SSLContext's KeyManagers store | ||
} | ||
trustStore { | ||
#type = "" # Type of SSLContext's TrustManagers store | ||
#file = "" # Location of SSLContext's TrustManagers store | ||
#password = "" # Password for SSLContext's TrustManagers store | ||
#algorithm = "" # Algorithm used by SSLContext's TrustManagers store | ||
} | ||
} | ||
ahc { | ||
#connectTimeout = 10000 # Timeout in millis for establishing a TCP socket | ||
#handshakeTimeout = 10000 # Timeout in millis for performing TLS handshake | ||
#pooledConnectionIdleTimeout = 60000 # Timeout in millis for a connection to stay idle in the pool | ||
#maxRetry = 2 # Number of times that a request should be tried again | ||
#requestTimeout = 60000 # Timeout in millis for performing an HTTP request | ||
#enableSni = true # When set to true, enable Server Name indication (SNI) | ||
#enableHostnameVerification = false # When set to true, enable hostname verification: SSLEngine.setHttpsEndpointIdentificationAlgorithm("HTTPS") | ||
#useInsecureTrustManager = true # Use an insecure TrustManager that trusts all server certificates | ||
#filterInsecureCipherSuites = true # Turn to false to not filter out insecure and weak cipher suites | ||
#sslEnabledProtocols = [TLSv1.2, TLSv1.1, TLSv1] # Array of enabled protocols for HTTPS, if empty use the JDK defaults | ||
#sslEnabledCipherSuites = [] # Array of enabled cipher suites for HTTPS, if empty use the AHC defaults | ||
#sslSessionCacheSize = 0 # SSLSession cache size, set to 0 to use JDK's default | ||
#sslSessionTimeout = 0 # SSLSession timeout in seconds, set to 0 to use JDK's default (24h) | ||
#disableSslSessionResumption = false # if true, SSLSessions won't be resumed | ||
#useOpenSsl = true # if OpenSSL should be used instead of JSSE | ||
#useNativeTransport = false # if native transport should be used instead of Java NIO (requires netty-transport-native-epoll, currently Linux only) | ||
#enableZeroCopy = true # if zero-copy upload should be used if possible | ||
#tcpNoDelay = true | ||
#soReuseAddress = false | ||
#allocator = "pooled" # switch to unpooled for unpooled ByteBufAllocator | ||
#maxThreadLocalCharBufferSize = 200000 # Netty's default is 16k | ||
} | ||
dns { | ||
#queryTimeout = 5000 # Timeout in millis of each DNS query in millis | ||
#maxQueriesPerResolve = 6 # Maximum allowed number of DNS queries for a given name resolution | ||
} | ||
} | ||
jms { | ||
#replyTimeoutScanPeriod = 1000 # scan period for timedout reply messages | ||
} | ||
data { | ||
#writers = [console, file] # The list of DataWriters to which Gatling write simulation data (currently supported : console, file, graphite, jdbc) | ||
console { | ||
#light = false # When set to true, displays a light version without detailed request stats | ||
#writePeriod = 5 # Write interval, in seconds | ||
} | ||
file { | ||
#bufferSize = 8192 # FileDataWriter's internal data buffer size, in bytes | ||
} | ||
leak { | ||
#noActivityTimeout = 30 # Period, in seconds, for which Gatling may have no activity before considering a leak may be happening | ||
} | ||
graphite { | ||
#light = false # only send the all* stats | ||
#host = "localhost" # The host where the Carbon server is located | ||
#port = 2003 # The port to which the Carbon server listens to (2003 is default for plaintext, 2004 is default for pickle) | ||
#protocol = "tcp" # The protocol used to send data to Carbon (currently supported : "tcp", "udp") | ||
#rootPathPrefix = "gatling" # The common prefix of all metrics sent to Graphite | ||
#bufferSize = 8192 # Internal data buffer size, in bytes | ||
#writePeriod = 1 # Write period, in seconds | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<configuration> | ||
|
||
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> | ||
<encoder> | ||
<pattern>%d{HH:mm:ss.SSS} [%-5level] %logger{15} - %msg%n%rEx</pattern> | ||
</encoder> | ||
<immediateFlush>false</immediateFlush> | ||
</appender> | ||
|
||
<!-- uncomment and set to DEBUG to log all failing HTTP requests --> | ||
<!-- uncomment and set to TRACE to log all HTTP requests --> | ||
<!--<logger name="io.gatling.http.engine.response" level="TRACE" />--> | ||
|
||
<root level="WARN"> | ||
<appender-ref ref="CONSOLE" /> | ||
</root> | ||
|
||
</configuration> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
import io.gatling.app.Gatling | ||
import io.gatling.core.config.GatlingPropertiesBuilder | ||
|
||
object Engine extends App { | ||
|
||
val props = new GatlingPropertiesBuilder() | ||
.resourcesDirectory(IDEPathHelper.resourcesDirectory.toString) | ||
.resultsDirectory(IDEPathHelper.resultsDirectory.toString) | ||
.binariesDirectory(IDEPathHelper.mavenBinariesDirectory.toString) | ||
|
||
Gatling.fromMap(props.build) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
import java.nio.file.Path | ||
|
||
import io.gatling.commons.util.PathHelper._ | ||
|
||
object IDEPathHelper { | ||
|
||
val gatlingConfUrl: Path = getClass.getClassLoader.getResource("gatling.conf") | ||
val projectRootDir = gatlingConfUrl.ancestor(3) | ||
|
||
val mavenSourcesDirectory = projectRootDir / "src" / "test" / "scala" | ||
val mavenResourcesDirectory = projectRootDir / "src" / "test" / "resources" | ||
val mavenTargetDirectory = projectRootDir / "target" | ||
val mavenBinariesDirectory = mavenTargetDirectory / "test-classes" | ||
|
||
val resourcesDirectory = mavenResourcesDirectory | ||
val recorderSimulationsDirectory = mavenSourcesDirectory | ||
val resultsDirectory = mavenTargetDirectory / "gatling" | ||
val recorderConfigFile = mavenResourcesDirectory / "recorder.conf" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
import io.gatling.recorder.GatlingRecorder | ||
import io.gatling.recorder.config.RecorderPropertiesBuilder | ||
|
||
object Recorder extends App { | ||
|
||
val props = new RecorderPropertiesBuilder() | ||
.simulationsFolder(IDEPathHelper.recorderSimulationsDirectory.toString) | ||
.simulationPackage("computerdatabase") | ||
.resourcesFolder(IDEPathHelper.resourcesDirectory.toString) | ||
|
||
GatlingRecorder.fromMap(props.build, Some(IDEPathHelper.recorderConfigFile)) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
package login | ||
|
||
import io.gatling.core.Predef._ | ||
import io.gatling.http.Predef._ | ||
import scala.concurrent.duration._ | ||
|
||
class BasicSimulation extends Simulation { | ||
|
||
val httpProtocol = http | ||
.acceptHeader("application/json") | ||
.acceptEncodingHeader("gzip, deflate") | ||
.acceptLanguageHeader("en-US,en;q=0.5") | ||
.userAgentHeader("Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:16.0) Gecko/20100101 Firefox/16.0") | ||
|
||
val scn = scenario("Scenario") | ||
.exec(http("Move to Login").get("http://localhost:3000/")) | ||
.pause(1) | ||
.exec(http("Execute Login").post("http://localhost:3001/api/login").body(StringBody("""{ "usuario": { "nombre": "Pepe" } }""")).asJson) | ||
.pause(1) | ||
.exec(http("Move to Fabrica").get("http://localhost:3000/")) | ||
|
||
setUp(scn.inject(atOnceUsers(50)).protocols(httpProtocol)) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
{ | ||
"usuario": { | ||
"nombre": "Pepe" | ||
} | ||
} |