A apresentação discute testes de carga, performance e stress usando a ferramenta Gatling.io. Apresenta como a ferramenta pode ser usada para simular cargas em sistemas, analisar métricas de desempenho e escrever testes de forma expressiva em Scala. Demonstra alguns recursos como injeção de comportamentos de usuários e asserções globais.
2. pen4education
Sobre mim
• José Eduardo Costa
• Especialista de Sistemas na
Dafiti Group
• Áreas de interesse
• Programação reativa
• Programação funcional
• @jeduardocosta
3. pen4education
Agenda
• Testes de carga, performance e stress
• Ferramenta Gatling.io
• Entendendo um pouco da estrutura de código
• Demonstração
• Conclusões
8. 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;
9. 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;
10. 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;
24. 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)
}
25. 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)
)
29. 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;