Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Testes de desempenho com Gatling.io

Eduardo Costa
July 19, 2018
140

Testes de desempenho com Gatling.io

TDC 2018 - Trilha testes

Eduardo Costa

July 19, 2018
Tweet

Transcript

  1. pen4education Trilha - Testes Testes de carga e performance com

    Gatling.io José Eduardo Costa Engenheiro de software
  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
  4. 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;
  5. 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;
  6. 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;
  7. pen4education Gatling.io • Ferramenta para realizar testes de desempenho em

    sistemas; • Escrito em e em constante crescimento;
  8. 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) )
  9. pen4education Extensões • Oficiais • SBT, Maven; • Jenkins; •

    Feitas pela comunidade • Gradle; • Kafka, Cassandra, Thrift;
  10. 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) }
  11. 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) )
  12. 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;