Telnet is not dead!!!

Ça peut paraître assez bizarre comme ça, mais en effet il arrive d’avoir besoin d’accéder à l’interface telnet d’une application comme Memcached ou MongoDB afin de pouvoir mettre en place des prérequis à des tests JMeter.

Dans une application, j’ai Memcached qui fourni mon cache distribué pour un cluster de serveur. J’y retrouve donc des informations de session, mais également du cache de 1er niveau pour fournir des réponses Http en Json.
Il serait assez compliqué de devoir réinitialiser à la main entre chaque test JMeter ce cache. Mais c’est sans compter les possibilités du langage de scripting BeanShell intégré dans JMeter.

En effet, en galérant un petit peu j’ai réussi a écrire ça:


import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

Socket pingSocket = null;
PrintWriter out = null;
BufferedReader in = null;

try {
 pingSocket = new Socket("${__property(host)}", ${__property(memcached_port)});
 out = new PrintWriter(pingSocket.getOutputStream(), true);
 in = new BufferedReader(new InputStreamReader(pingSocket.getInputStream()));
} catch (IOException e) {
 return;
}

out.print("flush_all\r\n");
out.println("quit");

String line;
while((line = in.readLine()) != null) {
 log.info(line);
}

out.close();
in.close();
pingSocket.close();

Bien sûr, ne pas oublier de configurer les propriétés host et memcached_port qui permettent de porter ce script sur un autre environnement.

Et graĉe à ça on peut faire plein de choses:

  • Du GET, pour vérifier le contenu d’un stockage à la suite de l’exécution de code

par exemple:

out.print("get  account-captcha-12345678");
  • Du SET, pour stocker des valeurs pré-requises pour nos tests

par exemple:

out.print("set account-captcha-12345678 0 0 6\r\n999999\r\n");

On retrouvera en cherchant un peu l’ensemble des commandes telnet disponibles pour memcached

Leave a comment

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *