Feather Background Waves Background
Ir para o conteúdo principal
Feather Background Waves Background
Feather Background Waves Background
  1. JMeter em Português/

JMeter Docker (contenedores)

·7 minutos
avançado - This article is part of a series.

docker

Neste artigo, abordaremos a execução do JMeter dentro de um contêiner usando a plataforma Docker. Este post é necessário para entender a última etapa do JMeter distribuído usando contêineres, caso contrário, eu acabaria com um post bastante extenso e prefiro simplificar o conteúdo. Sem mais delongas, vamos começar.

O que é um contêiner?>

O que é um contêiner? #

É basicamente um produto pronto onde o software necessário para executar um ou mais processos é instalado. A grande vantagem dos contêineres é que eles são portáteis e você pode isolar ambientes de execução inteiros em um único arquivo. No nosso caso particular, vamos criar um contêiner com tudo o que é necessário para podermos executar os scripts do JMeter, então precisamos:

  • Sistema operacional: Linux Alpine (o rei do Linux compacto)
  • Java: JDK ou JRE 1.8+
  • JMeter: JMeter 5.2.1

O script JMeter JMX e/ou os arquivos de suporte ficarão fora do contêiner por enquanto, mas também podem estar dentro. Para mais informações sobre este assunto, recomendo que você visite este link O que é um contêiner?.

O que é Docker?>

O que é Docker? #

O Docker é uma plataforma de software que nos permite gerenciar, criar, excluir e executar nossa imagem de contêiner. O Docker, assim como o JMeter, é de código aberto]( https://www.docker.com/community/open-source), então não precisamos pagar uma licença para usá-lo. Mas é sempre bom fazer doações a fundações de software livre para continuar promovendo seu desenvolvimento. Aqui você pode encontrar uma boa explicação de O que é Docker?.

Como funciona?>

Como funciona? #

Vamos criar uma imagem de contêiner a partir de um arquivo Dockerfile. Este arquivo conterá as informações e a configuração necessárias para baixar o Alpine Linux, instalar o Java JRE 1.8+, baixar e/ou descompactar o JMeter. Em seguida, executaremos alguns scripts de shell para inicializar o contêiner e executar nosso teste. No final, mencionarei como podemos fazer o mesmo, mas incluindo plugins JMeter.

Resumo do Processo>

Resumo do Processo #

1.- Instalar o Docker>

1.- Instalar o Docker #

Primeiro precisamos instalar o Docker desktop no nosso computador, convido você a baixar e instalar a última versão disponível, depois esperar que os processos relevantes sejam iniciados para ter o CLI habilitado. Você pode validar se o Docker está instalado na linha de comando assim:

docker --version
Docker version 19.03.8, build afacb8b
2.- Clonar o repositório>

2.- Clonar o repositório #

Acho que esqueci de mencionar, mas também precisamos do GIT para clonar o seguinte projeto:

git clone https://github.com/daeep/JMeter_Docker.git
cd JMeter_Docker
3.- Compilar a imagem>

3.- Compilar a imagem #

Vamos compilar o arquivo Dockerfile, que está localizado em nossa pasta JMeter_Docker, simplesmente executando o script de shell ./build.sh.

docker-start

docker-end

4.- Validação>

4.- Validação #

Também nesta mesma pasta executaremos o exemplo para validar se tudo funciona corretamente, invocando o script de shell ./example.sh. Se ele solicitar a senha, é porque os comandos do Docker stop, remove e start estão sendo executados usando sudo e isso requer permissões de administrador. O script de shell gerará uma saída como esta:

docker-ejecucion

Se você tiver um resultado semelhante, parabéns!

5.- Execução>

5.- Execução #

Vamos copiar nosso arquivo JMX para a pasta JMeter_Docker/test, mas primeiro convido você a parametrizar seu script JMX seguindo as instruções descritas aqui, vamos supor que seu script seja carismaticamente chamado de antonio.jmx e que queiramos executá-lo com 50 threads, 50 segundos de rampa e com uma duração de 10 minutos ou 600 segundos. Nós o executamos usando o script de shell ./run.sh na pasta JMeter_Docker da seguinte maneira:

./run.sh -n -t test/antonio.jmx -l test/antonio-50.jtl -j test/antonio-50.log -Jthreads=50 -Jrampup=50 -Jduration=600

Se for o caso, você deverá ter uma saída semelhante à acima. Você conseguiu.

JMeter com Plugins, começando do passo 2>

JMeter com Plugins, começando do passo 2 #

6.- Clonar o repositório>

6.- Clonar o repositório #

Se o seu script exigir plugins JMeter, eles também poderão ser baixados da nuvem, mas não podemos cobrir esse número infinito de variantes para cada plugin. A melhor opção é usar nossa versão local do JMeter, já que ela já está funcionando para o script que criamos, certo? Vamos supor que isso seja verdade e que já tenhamos baixado os complementos localmente. Primeiro vamos clonar um projeto diferente:

git clone https://github.com/daeep/JMeter_Local_Docker.git
cd JMeter_Local_Docker
7.- Instalar complementos e compactar>

7.- Instalar complementos e compactar #

Em seguida, siga as instruções para instalar os plugins do JMeter e dentro da pasta JMeter_Local_Docker/test você encontrará o arquivo JMeter_Docker_Script_Plugins.jmx, abra-o e os plugins baixarão automaticamente o plugin para o Dummy Sampler, que é necessário para executar este JMX. Vamos compactar nossa pasta JMeter, isso pode ser feito usando tarball ou zip, aqui está um exemplo de ambos:

tar -czvf apache-jmeter-5.2.1.tgz apache-jmeter-5.2.1

zip -r apache-jmeter-5.2.1.zip apache-jmeter-5.2.1 //alternativamente
8.- Copie os binários para a imagem>

8.- Copie os binários para a imagem #

Agora prosseguimos copiando o arquivo compactado para a pasta JMeter_Local_Docker, se você executou o passo #C-2 com o nome que indiquei, não precisa fazer nada além de compilá-lo, vá para o passo #C-4.

Se você alterou o nome do arquivo e/ou pasta, precisará fazer o mesmo na seção 3 do Dockerfile. O valor do argumento ARG JMETER_FILE deve corresponder ao nome do arquivo apache-jmeter-5.2.1.tgz ou apache-jmeter-5.2.1.zip, conforme aplicável. Além disso, o valor do argumento ARG JMETER_FOLDER deve corresponder ao nome da pasta e, finalmente, se você usou o utilitário zip, também devemos modificar a linha de descompactação usada pelo comando tar -zvxf para unzip.

9.- Compilar a imagem>

9.- Compilar a imagem #

Agora vamos usar o script de shell ./build.sh novamente para construir nossa imagem e, se tudo correr corretamente, podemos executar o teste de exemplo com o comando ./example.sh.

docker-ejecucion-complemento

Agora você pode fazer o mesmo que o passo 5 com seu script de plugin. Parabéns!

Conclusão>

Conclusão #

Na verdade, há poucas diferenças entre os dois arquivos Dockerfile, sejam eles do projeto com ou sem plugins. Deixei as linhas com as diferenças abaixo. Para escrever este artigo, baseei-me no projeto GIT de Just van den Broecke que está disponível aqui. Fiz algumas modificações na versão original, mas ainda convido você para o projeto dele. Como observação adicional, o Docker concede 2 GB de memória aos contêineres por definição. Se você quiser executar testes para fins educacionais com mais threads, recomendo aumentar esse valor.

Imagem Docker JMeter em YAML: Sem plugins vs. Com plugins>

Imagem Docker JMeter em YAML: Sem plugins vs. Com plugins #

-----------------------------------------------------------------------------

 # 3 Copy local JMeter to the image and set environment variables
 ARG JMETER_FILE="apache-jmeter-5.2.1.tgz"   //Definimos el archivo comprimido
 ARG JMETER_FOLDER="apache-jmeter-5.2.1"     //Definimos la carpeta
 COPY ${JMETER_FILE} /tmp/

 # 4 Update & Upgrade, then decompress local JMeter and delete tar ball file
 RUN apk update \
  && apk upgrade \
  && apk add ca-certificates \
  && update-ca-certificates \
  && apk add --update openjdk8-jre tzdata curl unzip bash \
  && apk add --no-cache nss \
  && rm -rf /var/cache/apk/* \
  && mkdir -p ${JMETER_HOME} \
  && tar -zvxf /tmp/${JMETER_FILE} -C /home/jmeter/ \  //Copiamos los binarios a la imagen
  && rm -f /tmp/${JMETER_FILE}

 -----------------------------------------------------------------------------

 # 3 Set JMeter version 5.2.1 for downloading and some ENV variables
 ENV JMETER_VERSION 5.2.1
 ENV JMETER_FOLDER /home/jmeter/
 ENV JMETER_DOWNLOAD https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-${JMETER_VERSION}.tgz
  //Definimos la ruta donde estan los binarios comprimidos de JMeter en la nube
 # 4 Update, upgrade, download Java JRE and JMeter then decompress it
 RUN apk update \
  && apk upgrade \
  && apk add ca-certificates \
  && update-ca-certificates \
  && apk add --update openjdk8-jre tzdata curl unzip bash \
  && apk add --no-cache nss \
  && rm -rf /var/cache/apk/* \
  && mkdir -p /tmp/jmeter/ \
  && curl -L --silent ${JMETER_DOWNLOAD} > /tmp/jmeter/apache-jmeter-${JMETER_VERSION}.tgz \ //Descargamos JMeter
  && mkdir -p ${JMETER_FOLDER} \
  && tar -xzf /tmp/jmeter/apache-jmeter-${JMETER_VERSION}.tgz -C ${JMETER_FOLDER}  \ //Descomprimir JMeter
  && rm -rf /tmp/jmeter
  
 -----------------------------------------------------------------------------


avançado - This article is part of a series.