Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

96 views

Published on

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

Published in: Education
  • Be the first to comment

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

  1. 1. pen4education Trilha - Testes Testes de carga e performance com Gatling.io José Eduardo Costa Engenheiro de software
  2. 2. pen4education Sobre mim • José Eduardo Costa • Especialista de Sistemas na Dafiti Group • Áreas de interesse • Programação reativa • Programação funcional • @jeduardocosta
  3. 3. pen4education Agenda • Testes de carga, performance e stress • Ferramenta Gatling.io • Entendendo um pouco da estrutura de código • Demonstração • Conclusões
  4. 4. pen4education Como garantimos qualidade e eficiência nos nossos sistemas?
  5. 5. pen4education
  6. 6. pen4education Testes de carga, performance e stress
  7. 7. pen4education
  8. 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. 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. 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;
  11. 11. pen4education
  12. 12. pen4education Gatling.io • Ferramenta para realizar testes de desempenho em sistemas; • Escrito em e em constante crescimento;
  13. 13. pen4education
  14. 14. pen4education expressividade
  15. 15. 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) )
  16. 16. pen4education É possível versionar cenários de testes
  17. 17. pen4education Desempenho com modelo non-blocking
  18. 18. pen4education Relatórios em HTML
  19. 19. pen4education Relatórios em HTML
  20. 20. pen4education Relatórios em HTML
  21. 21. pen4education Extensões • Oficiais • SBT, Maven; • Jenkins; • Feitas pela comunidade • Gradle; • Kafka, Cassandra, Thrift;
  22. 22. pen4education
  23. 23. pen4education Entendendo um pouco da estrutura de código
  24. 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. 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) )
  26. 26. 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) )
  27. 27. pen4education Demonstração
  28. 28. pen4education Conclusões
  29. 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;

×