1 of 39

Aprendizados com testes de performance usando Locust.io

Python Nordeste - 10 de agosto de 2024

2 of 39

3 of 39

?

4 of 39

Vinicius Mendes

  • Staff Engineer @ Loadsmart
  • Natalense
  • Pai de 2 lindas garotas
  • Participando de eventos Python desde 2009
  • Primeira vez palestrando na Python Nordeste

5 of 39

Agenda

  1. O que é teste de performance?
  2. Locust.io
  3. Observabilidade
  4. Principais aprendizados

6 of 39

O que é teste de performance?

Testes que medem como o usuário percebe a responsividade e estabilidade de um sistema sob certa carga.

7 of 39

?

8 of 39

Tipos de testes de performance

  • Teste de carga
  • Teste de capacidade
  • Teste de stress

9 of 39

Locust.io

Locust é uma ferramenta open source para testes de carga/performance para HTTP e outros protocolos. Sua abordagem amigável aos desenvolvedores lhe permite definir seus testes em código Python comum.

10 of 39

Locust.io

11 of 39

Locust.io

12 of 39

13 of 39

14 of 39

15 of 39

Observabilidade

Um software em produção é observável à medida que você consegue entender novos estados internos do sistema sem precisar fazer adivinhações arbitrárias, predizer os modos de falha, ou implantar código novo para entender este estado.

Source: Observability Engineering - Majors, Charity

16 of 39

Pilares da observabilidade

17 of 39

Métricas

Quanto tempo é gasto com:

  1. Consultas ao banco de dados
  2. Serviços externos
  3. Processamento interno
  4. Regras de negócio específicas

18 of 39

Métricas

Verificar os sinais vitais da infraestrutura:

  • CPU
  • Memória
  • Disco
  • Rede
  • Conexões

19 of 39

Métricas

Contar eventos:

  • Requisições
  • Respostas com sucesso e com erro
  • Chamadas ao banco
  • Mensagens na fila
  • ?

20 of 39

Traces

21 of 39

Traces

22 of 39

Traces

23 of 39

Observabilidade

Encontre os gargalos

24 of 39

Aprendizados

25 of 39

  1. Estabilize o cenário de testes
  • Os dados de entrada são confiáveis?
  • O cenário captura a ação esperada pelo usuário?
  • Você obtém resultado consistentes a cada execução?

26 of 39

  • Estabilize o cenário de testes

27 of 39

2. Garanta que está medindo o que precisa ser medido

  • Medir o throughput do endpoint é suficiente?
  • Como medir fluxos assíncronos?
  • Como sua infraestrutura está se comportando?

28 of 39

29 of 39

3. Garanta que consegue medir todas as métricas

  • Quanto tempo a mensagem passou na fila?
  • Quanto tempo cada processamento levou?
  • Isso bate com as métricas do locust?

30 of 39

3. Garanta que consegue medir todas as métricas

31 of 39

3. Garanta que consegue medir todas as métricas

32 of 39

4. Isole fatores fora do seu controle

  • Evite que a estabilidade de serviços externos impacte o seu teste

33 of 39

4. Método científico: uma mudança de cada vez

  • Se você mudar muitas coisas ao mesmo tempo, como saber qual delas impactou o resultado do teste?

34 of 39

5. Repetir baterias

  • Execute a mesma bateria mais de uma vez pra ter certeza que o resultado obtido é reprodutível
  • Ele pode ter sido impactado por algum fator inesperado
  • Aguarda o sistema esfriar entre as baterias

35 of 39

5. Registre cenários, mudanças e resultados

  • A cada bateria, guarde os resultados do Locust e da sua ferramenta de observabilidade
  • Se fez alguma alteração, seja o mais específico possível
  • Alterações na infraestrutura também são relevantes

36 of 39

37 of 39

38 of 39

O que não se pode medir não se pode gerenciar.

39 of 39

Obrigado!

Perguntas?