pen4education
Trilha - Testes
Testes de carga e performance com Gatling.io
José Eduardo Costa
Engenheiro de software
pen4education
Sobre mim
• José Eduardo Costa
• Especialista de Sistemas na
Dafiti Group
• Áreas de interesse
• Programação reativa
• Programação funcional
• @jeduardocosta
pen4education
Agenda
• Testes de carga, performance e stress
• Ferramenta Gatling.io
• Entendendo um pouco da estrutura de código
• Demonstração
• Conclusões
pen4education
Como garantimos
qualidade e eficiência
nos nossos sistemas?
pen4education
pen4education
Testes de carga,
performance e stress
pen4education
pen4education
Testes de carga
• Verifica como o sistema de comporta contra uma carga de requisições
ou usuários;
• Métricas:
• Tempo de resposta médio;
• Picos de tempo de resposta;
• Taxa de erro;
pen4education
Testes de performance
• Testa como o sistema se comporta sobre condições de uso previstas;
• Métricas:
• Estabilidade;
• Escalabilidade;
• Confiabilidade;
• Velocidade;
• Uso de recursos;
pen4education
Testes de stress
• Testa o sistema em condições extremas de uso;
• Métricas:
• Páginas por segundo, throughput;
• Tempo de carregamento;
• Conexões com falha;
pen4education
pen4education
Gatling.io
• Ferramenta para realizar testes de desempenho em sistemas;
• Escrito em e em constante crescimento;
pen4education
pen4education
expressividade
pen4education
Gatling.io possui uma poderosa DSL
val userScenario = scenario("post_user")
.exec(
http("Creating an user")
.post("/users")
.headers(Map("Content-Type" -> "application/json") ++ authHeader)
.body(StringBody(s"""{"name":"teste"}"""))
.check(status.is(201))
)
setUp(userScenario.inject(constantUsersPerSec(100) during (5 minutes)))
.assertions(
global.allRequests.count.greaterThan(1000),
global.failedRequests.percent.lessThan(2),
global.responseTime.stdDev.between(50, 100)
)
pen4education
É possível versionar cenários de testes
pen4education
Desempenho com modelo
non-blocking
pen4education
Relatórios em HTML
pen4education
Relatórios em HTML
pen4education
Relatórios em HTML
pen4education
Extensões
• Oficiais
• SBT, Maven;
• Jenkins;
• Feitas pela comunidade
• Gradle;
• Kafka, Cassandra, Thrift;
pen4education
pen4education
Entendendo
um pouco da
estrutura de código
pen4education
Classe Simulation
class UserSimulation extends Simulation {
def generateUserName = Random
.alphanumeric
.take(10)
.mkString("")
val httpProtocol = http
.baseURL("https://api.host.com")
.acceptHeader("application/json")
val baseHeader = Map(
"Content-Type" -> "application/json")
val authHeader = Map(
"Authorization" -> "Bearer xxx")
val jsonContent = StringBody(
s"""{"name": "$generateUserName"""")
val userScenario = scenario("post_user")
.exec(
http("Creating an user")
.post("/users")
.headers(baseHeader ++ customHeader)
.body(jsonContent)
.check(status.is(201))
)
setUp(userScenario.inject(atOnceUsers(1)))
.protocols(httpProtocol)
}
pen4education
Injetando comportamentos
setUp(
userScenario.inject(
nothingFor(4 seconds),
atOnceUsers(10),
rampUsers(10) over (5 seconds),
constantUsersPerSec(20) during (15 seconds),
constantUsersPerSec(20) during (15 seconds) randomized,
rampUsersPerSec(10) to 20 during (10 minutes),
rampUsersPerSec(10) to 20 during (10 minutes) randomized,
splitUsers(1000) into (rampUsers(10) over (10 seconds)) separatedBy (10 seconds),
splitUsers(1000) into (rampUsers(10) over (10 seconds)) separatedBy
atOnceUsers(30),
heavisideUsers(1000) over (20 seconds)
).protocols(httpProtocol)
)
pen4education
Asserções globais
setUp(userScenario.inject(constantUsersPerSec(100) during (5 minutes)))
.assertions(
global.allRequests.count.greaterThan(1000),
global.successfulRequests.percent.greaterThan(98),
global.failedRequests.percent.lessThan(2),
global.requestsPerSec.mean.greaterThan(100),
global.responseTime.stdDev.between(50, 100)
)
pen4education
Demonstração
pen4education
Conclusões
pen4education
Conclusões
• Oportunidade de lidar com falta de testes de desempenho
automatizados;
• Gatling.io pode ser usado em vários tipos de projetos;
• Simulações são fáceis até mesmo para programadores sem
experiência em Scala;
TDC2018SP | Trilha Testes - Testes de carga e performance com Gatling.io

TDC2018SP | Trilha Testes - Testes de carga e performance com Gatling.io