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

JMeter WebSockets

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

Websockets

O que são Websockets?>

O que são Websockets? #

WebSockets são um protocolo de comunicação bidirecional e persistente entre cliente e servidor, embora baseado na protocola TCP, a troca de informações é realizada assíncronamente, que é mais semelhante a uma modelagem não orientada como UDP. WebSockets foram introduzidos como parte das atualizações do HTML 5 e podem usar portas 80 e 443 para comunicação segura ou não segura:

  1. porta 80 para ws://
  2. porta 443 para wss://

A comunicação é iniciada através de uma negociação e troca de informações que pode ser em forma de HTTP ou HTTPS para WS ou WSS, a principal diferença entre HTTP e WS é que após o transporte de informações entre cliente e servidor HTTP fecha a conexão e WS mantém aberta para enviar atualizações.

Este é um exemplo de uma solicitação do cliente e resposta da máquina:>

Este é um exemplo de uma solicitação do cliente e resposta da máquina: #

GET /chat HTTP/1.1
Host: chatserver.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: c2FtcGxlZGF0YQ==
Sec-WebSocket-Origin: http://chatserver.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Exemplo do resumo HTTP da server para mudar o protocolo para WS>

Exemplo do resumo HTTP da server para mudar o protocolo para WS #

HTTP/1.1 101 Switching Protocols
Upgrade: WebSocket
Connection: Upgrade
Sec-WebSocket-Accept: ek8sYU8WRgY4WUU=
Sec-WebSocket-Protocol: chat
O que são Websockets?>

O que são Websockets? #

Websockets são principalmente usados para mensagens asincrónicas e não há melhor exemplo disso do que aplicativos de chat, embora eles tenham múltiplas utilizações em SPAs (Aplicativos Single-page). A comunicação via chat é assíncrona porque nós não sabemos quando o cliente ou servidor responderá a nossa mensagem. Isso também se aplica aos chatbots, especialmente se sua intenção for realizar testes de fim a fim. Esses tipos de testes não devem ser confundidos com os testes ML (Machine Learning), que são realizados usando modelos de chatbots. Websockets estabelecem uma única canal ou porta para transmissão de mensagens ou atualizações, que podem ser enviadas indistintamente entre ambos os atores a qualquer momento no momento, criando um sentido de comunicação em tempo real. A comunicação não é aberta indefinidamente; há um tempo máximo de espera após o qual se não houver atualizações disponíveis, a conexão é interrompida.

Como testar WebSockets?>

Como testar WebSockets? #

Podemos testar usando JMeter com adições e temos duas opções:

Vamos começar com a adição de Maciej, que eu acredito ser uma excelente adição para realizar testes de carga e estresse. Embora possa estar um pouco amarelado, há coisas que precisamos considerar antes do teste. Quando se envia mensagens através deste meio, é muito provável que o retorno chegue em menos de alguns segundos ou até um pouco mais tarde, mesmo recebendo duas respostas em um curto período de tempo. Isso ocorre porque JMeter e seu motor são construídos de forma sincronizada, tornando difícil medir as latências exatas. No entanto, existem outros recursos que podem realizar esse trabalho melhor, que serão abordados nas conclusões.

Websockets - Terminology>

Websockets - Terminology #

Nome do Servidor ou Endereço IP: O nome do servidor ou endereço IP do servidor.
Número de Porta: O número de porta usado, pode ser 80 ou 443 dependendo se é seguro ou não.
Tempo de Espera para Conexão: Valor máximo em milissegundos para estabelecer uma conexão.
Tempo de Espera para Resposta/Leitura: Valor máximo em milissegundos para ler ou receber uma resposta.
Protocolo: O protocolo de comunicação, pode ser WS ou WSS.

WebSocket de Maciej’s>

WebSocket de Maciej’s #

Implementação: Somente disponível na RFC6455 (v13) como o padrão mais recente para a protocolo.
Conexão Streaming: Indica se a conexão é reutilizada ou terminada após usar o canal.
Dados de Solicitação: Mensagens textuais ou binárias que serão enviadas ao servidor.
Patrón Resposta: O padrão com o qual podemos concluir a mensagem.
Patrón Conexão Fechada: O padrão com o qual podemos concluir a conexão.
Backlog de Mensagens: Define o número máximo de mensagens que podem ser armazenadas antes da leitura do leitor fechar.

1.- Instale o adicional e reinicie>

1.- Instale o adicional e reinicie #

Primeiro, precisamos instalar o adicional desenvolvido por Maciej Zaleski, criado pelo próprio, do Gerenciador de Adicionais JMeter. Embora também seja disponível no site da sua Github como um arquivo JAR, é preferível usar o gerenciador para instalar as dependências adequadas. Após a instalação do adicional, reinicie JMeter e valide que o sampler WebSocket esteja disponível na área de Sistemas.

jmeter-plugin

2.- Configure o leitor>

2.- Configure o leitor #

Quando o leitor é adicionado, procederemos à configuração das informações necessárias para estabelecer a comunicação. Para isso, usaremos o site de teste websocket.org, que deve ter as seguintes informações:

Nome do Servidor ou IP: echo.websocket.org
Número da Porta: 80
Tempo de Espera para Conexão: 500 ms
Tempo de Espera para Resposta: 2000 ms
Protocolo: ws
Parâmetros: encoding=text
Dados de Solicitação Hello

jmeter-websocket-sampler

3.- Valide a Resposta>

3.- Valide a Resposta #

Depois de configurar o WebSocket Mule, precisamos testar que ele funciona. Precisamos adicionar um escuta resultante para ver a resposta do servidor, que é uma simples echo local que responderá com qualquer coisa que você lhe envie. Se seu script não funcionou como esperado, aqui está um link para um exemplo.

jmeter-websocket-response

Websockets Peter’s>

Websockets Peter’s #

Conexão WebSocket Aberta: Estabeleça uma conexão usando os protocolos WS ou WSS. Mensagens Ping/Pong: Envia mensagens para manter a comunicação viva. Sampler de Solicitação-Resposta: Envia ou recebe dados textuais ou binários. Sampler Single Write: Envia informações em formato texto ou binário. Sampler Single Read: Receba informações em formato texto ou binário. Fechar Conexão: Feche a comunicação do canal.

1.- Instale o adicional e reinicie>

1.- Instale o adicional e reinicie #

Instale o adicional desenvolvido por Peter Doornbosch do JMeter’s Add-ons manager, embora também seja disponível como um JAR no seu Bitbucket. É preferível usar a área de dependências para instalar as dependências necessárias. Após o adicional ser instalado, reinicie o JMeter e valide que os mapeadores WebSocket estão disponíveis na área de Mapeamentos.

jmeter-sampler2

2.- Configuração>

2.- Configuração #

Esta adição é diferente da anterior porque requer uma série de mouses para estabelecer comunicação, manter-a, enviar informações e finalmente fechar o canal. Para iniciar, precisamos colocar um “Conexão WebSocket Aberta” para iniciar a comunicação com as seguintes informações:

Nome do Servidor ou IP: echo.websocket.org
Número da Porta: 80
Tempo de Espera para Conexão: 500 ms
Tempo de Espera para Leitura: 2000 ms
Protocolo: ws

jmeter-websocket-open

Depois de configurar o módulo de conexão, precisamos usar a amostra ‘Single Write WebSocket Sampler’ para enviar informações ao canal. Deveríamos sempre habilitar a existente conexão que é o primeiro botão da caixa de seleção.

Olá

jmeter-websocket-write

O seguinte deve ser adicionado: “Sampler de Leitura Só-Read WebSocket” para ler informações da canal. De forma semelhante, precisamos selecionar a opção de usar uma conexão existente.

jmeter-websocket-read

Também devemos adicionar a “Ping/Pong do WebSocket” para manter aberta a comunicação e selecionar a opção de usar uma conexão existente.

jmeter-websocket-ping

Para completar isso, precisamos adicionar “Encerramento WebSocket” para fechar a canal e terminar o comunique.

jmeter-websocket-close

3.- Tente-o>

3.- Tente-o #

Depois de configurar o leitor WebSocket, precisamos testar que funciona. Precisamos adicionar um Listener Resultado para ver a resposta do servidor, que é uma simples echo local que responderá com qualquer coisa que você envie. Se seu Script não funcionou como esperado, aqui está um link para um exemplo.

jmeter-websocket-response2

É JMeter uma boa escolha para testar WebSocket?>

É JMeter uma boa escolha para testar WebSocket? #

A resposta não é simples, mas creio que pode fazer o trabalho bem se seu objetivo for apenas testar a carga do sistema e medir a performance. Se precisar de um timing preciso das respostas, provavelmente fará bem com padrões de respostas ou fechando a conexão, que também é importante quando se está otimizando os recursos. Geralmente, JMeter é uma boa escolha, mas depende muito do escopo da testagem. Não é o forte de JMeter em testar WebSocket, pois é um tool sincrônico que limita sua perspectiva um pouco.

Conclusão>

Conclusão #

JMeter é uma opção válida para este trabalho também. Correlação e autenticidade dos tokens podem ser enviados através da canal. Em resumo, praticamente qualquer arquivo ou dados pode ser transmitido já que também suporta transferência binária. No entanto, de forma semelhante ao que tentei transmitir em minhas publicações anteriores, JMeter não é a melhor opção para essas tipos de testes; existem outros tools como Gatling, Artillery ou K6 que foram construídos com motores asynchronos que são melhores para tais tarefas. Além disso, para escalonamento, já que é o envio assíncrono de requisições, muitas mais podem ser enviadas sem manter threads esperando pela resposta, mas isso também envolve monitorar recursos como a rede ou memória, pois facilmente sobrecarregar geradores de carga e este benefício poderia virar um pesadelo.



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