Comparações

Locust vs JMeter: scripts Python ou planos do JMeter?

8 min de leitura

Locust e Apache JMeter são ferramentas de teste de carga gratuitas e open source, e a melhor escolha depende principalmente de como o seu time quer construir os testes. Escolha o Locust se o seu time escreve Python e quer a lógica do teste como código comum, executada por usuários leves e baseados em eventos. Escolha o JMeter se você precisa de protocolos além de HTTP, como JDBC, JMS ou LDAP, prefere montar os testes em uma interface gráfica ou já tem uma coleção de planos de teste .jmx.

Os dados desta comparação Locust vs JMeter vêm da documentação e do repositório de cada projeto, conferidos em 9 de outubro de 2026.

LocustApache JMeter
LicençaMIT (repositório)Apache 2.0 (repositório)
Ambiente de execuçãoPython 3.11 ou mais recenteJava 8 ou mais recente (versão 5.6.3)
Testes escritos comoCódigo Python em um locustfilePlanos de teste montados em uma interface gráfica e salvos como XML (.jmx)
Interface gráficaInterface web para iniciar, ajustar e acompanhar um teste em andamentoIDE desktop para gravar, montar e depurar planos de teste
Protocolos embutidosHTTP e HTTPS; os demais por meio de um cliente PythonHTTP(S), SOAP/REST, FTP, JDBC, LDAP, JMS, e-mail, TCP, comandos de shell, objetos Java
Usuários virtuaisUm greenlet por usuário sobre o gevent (baseado em eventos)Uma thread Java por usuário
Modo distribuídoUm master e quantos workers você quiserUm cliente que controla servidores JMeter remotos
CI e execução sem interface--headless, código de saída 1 quando requisições falhamModo CLI (jmeter -n)
RelatóriosGráficos ao vivo na interface web, arquivos CSV, relatório HTMLDashboard HTML, resultados ao vivo com um Backend Listener

Qual é a diferença entre Locust e JMeter?

No Locust, um teste é um programa Python. No JMeter, um teste é um plano que você monta em uma interface gráfica desktop e salva em um arquivo, e quase todas as outras diferenças vêm daí.

O README do Locust descreve testes escritos com laços, condições e bibliotecas comuns de Python. Ele é instalado com pip install locust e precisa do Python 3.11 ou mais recente, segundo os metadados do pacote.

Um teste do JMeter é uma árvore de elementos: um Thread Group para os usuários, samplers para as requisições e assertions e listeners para os resultados. O JMeter 5.6.3, versão atual na página de download, exige Java 8 ou mais recente. O README do branch de desenvolvimento do JMeter já exige Java 17 (conferido em 10 de outubro de 2026). Quando um passo precisa de lógica de verdade, um sampler JSR223 roda um script Groovy dentro do plano.

Como se escreve um teste em cada ferramenta?

No Locust, você escreve uma classe Python para cada tipo de usuário, com métodos marcados como tarefas. No JMeter, você adiciona um Thread Group e samplers na interface gráfica, salva o plano e roda esse arquivo pela linha de comando.

Um usuário do Locust que espera de um a três segundos entre as tarefas e consulta a lista de usuários três vezes mais do que abre um usuário específico:

from locust import HttpUser, task, between


class ApiUser(HttpUser):
    wait_time = between(1, 3)

    @task(3)
    def list_users(self):
        self.client.get("/api/users")

    @task
    def view_user(self):
        self.client.get("/api/users/42", name="/api/users/[id]")

Para rodar sem interface com 50 usuários, cinco novos por segundo, durante cinco minutos:

locust -f locustfile.py --headless -u 50 -r 5 \
  --run-time 5m --host https://staging.example.com

No JMeter, o mesmo teste é um Thread Group com 50 threads e um período de rampa de subida, contendo dois samplers HTTP Request. O guia de primeiros passos roda um plano salvo no modo CLI, e -e -o acrescenta o relatório HTML no final:

jmeter -n -t api-users.jmx -l results.jtl -e -o report/

O arquivo .jmx é XML, como mostram os exemplos que vêm com o JMeter, e é mais difícil de revisar em um pull request do que um arquivo Python. O JMeter também grava um plano a partir do navegador; o equivalente no Locust é o har2locust, um conversor de gravações HAR em locustfile que ainda está em beta (conferido em 9 de outubro de 2026).

Quais protocolos cada ferramenta consegue testar?

O JMeter cobre muito mais protocolos de fábrica. O Locust vem com HTTP e HTTPS e espera que você traga um cliente Python para todo o resto.

O README do JMeter lista HTTP e HTTPS, SOAP e REST, FTP, bancos de dados via JDBC, LDAP, mensageria JMS, e-mail por SMTP, POP3 e IMAP, TCP, comandos nativos e objetos Java. JDBC e JMS precisam dos JARs de driver fornecidos pelo seu fornecedor de banco de dados ou de JMS.

A página sobre outros protocolos da documentação do Locust mostra como encapsular uma biblioteca de protocolo, com exemplos para gRPC, XML-RPC e MQTT, e indica o locust-plugins para Kafka, Selenium e Playwright (conferido em 9 de outubro de 2026). A biblioteca precisa funcionar com o gevent, porque E/S feita em código C compilado bloqueia o processo inteiro; a documentação cita o driver de PostgreSQL psycopg2, que precisa de um pacote extra. Para testes de carga em bancos de dados, o sampler JDBC do JMeter é o caminho mais curto.

Como funcionam os usuários virtuais no Locust e no JMeter?

O JMeter executa cada usuário virtual como uma thread Java. O Locust executa cada usuário como um greenlet no loop de eventos do gevent, o que mantém baixo o custo de cada usuário.

Cada thread de um Thread Group do JMeter percorre o plano inteiro de forma independente. O JMeter inicia por padrão com um heap de 1 GB, que segundo o guia pode não bastar para planos maiores e muitas threads.

Segundo o README, um único processo do Locust consegue lidar com muitos milhares de usuários simultâneos. A documentação de carga distribuída acrescenta que um processo Python não aproveita totalmente mais de um núcleo de CPU, então você roda um worker por núcleo, algo que o --processes configura para você em uma única máquina.

Como distribuir um teste entre várias máquinas?

As duas têm um modo distribuído embutido. No Locust, um master comanda os workers que executam os usuários, e no JMeter o cliente inicia o plano de teste completo em cada servidor remoto.

No Locust, um processo iniciado com --master roda a interface web e avisa os processos --worker quando iniciar e parar usuários. A documentação do Locust também cobre um operador para Kubernetes e o Azure Load Testing, um serviço da Microsoft que executa testes do Locust na nuvem (conferido em 9 de outubro de 2026).

O modo de teste remoto do JMeter permite que um cliente controle quantos servidores você quiser via RMI. Cada servidor roda o plano inteiro, então 1.000 threads em seis servidores viram 6.000 threads. Todos os nós devem rodar a mesma versão do JMeter e do Java, o RMI precisa de um keystore a menos que o SSL esteja desativado, e arquivos de dados precisam ser copiados para cada servidor.

Existe um terceiro caminho para planos de teste do JMeter. A LoadFocus, que publica este site, roda planos de teste JMeter existentes sem alterações a partir de 25 regiões na nuvem, sem servidores remotos para configurar. A LoadFocus não roda testes do Locust, então para o Locust as opções acima continuam sendo as formas de escalar.

Como eles entram na CI e quais relatórios você recebe?

Os dois rodam sem interface pela linha de comando. O Locust ainda termina com código de saída 1 quando requisições falham, e o JMeter gera o relatório HTML mais completo.

A documentação do modo headless do Locust mostra um listener de eventos curto que define o código de saída pela taxa de falhas, pelo tempo de resposta médio ou pelo percentil 95, além de um exemplo para GitHub Actions. As opções --csv e --html salvam os resultados e um relatório ao final da execução.

A documentação do JMeter é categórica: testes de carga rodam no modo CLI, e a interface gráfica fica para montar e depurar. O README indica bibliotecas de terceiros para Maven, Gradle e Jenkins. O dashboard do JMeter traz uma tabela APDEX, uma tabela de estatísticas com três percentis configuráveis, resumos de erros e gráficos do tempo de resposta.

Qual você deve escolher?

Escolha o Locust se o seu time escreve Python e quer revisar os testes de carga como o resto do código. Escolha o JMeter em vez dele se você precisa de protocolos além de HTTP, se os seus testers preferem uma interface gráfica ou se você já tem planos .jmx.

O Locust combina com cenários que têm laços, ramificações e dados gerados, com testes que reaproveitam um cliente Python interno da sua API e com alta concorrência de usuários que passam a maior parte do tempo esperando.

O JMeter é a melhor escolha para testar JDBC, JMS, LDAP, FTP ou e-mail, onde o Locust exigiria um cliente mantido por você, e para testers que gravam um fluxo no navegador e o refinam visualmente. Uma empresa que já usa o JMeter também preserva seus planos e seu conhecimento.

FAQ

O Locust é mais rápido que o JMeter? Não medimos isso nós mesmos, então não vamos apontar um vencedor. A comparação justa é rodar o mesmo cenário com as duas ferramentas no seu próprio hardware.

O Locust consegue rodar arquivos .jmx do JMeter? Não, segundo a documentação, que descreve os testes apenas como locustfiles em Python. Levar um plano de teste do JMeter para o Locust significa reescrevê-lo em Python.

A LoadFocus consegue rodar testes do Locust? Não. A LoadFocus roda scripts JMeter e k6. Para escalar um teste do Locust além de uma máquina, use o modo master e workers do Locust, o operador para Kubernetes ou o Azure Load Testing.

Leituras relacionadas


As afirmações técnicas deste artigo não foram revisadas de forma independente.

LoadFocus team
Escrito pela equipe da LoadFocus, as pessoas por trás de um serviço de teste de carga na nuvem.