Mon framework sélénium peut-il consommer un message entrant
Je voudrais savoir comment mon framework Selenium peut retirer un message de la file d'attente. J'ai construit une application pour envoyer une chaîne JSON contenant des paires k / v à une file d'attente de messages.
Mon architecture est la suivante et des applications séparées:
- Une application Web JSP existe et accepte des paramètres, ce qui entraîne une chaîne JSON
- Un expéditeur de message existe et prend la chaîne JSON et la publie dans une file d'attente
- Un consommateur de messages existe et consomme les messages. C'est fondamentalement juste assis ici
- Un Framework Java Selenium existe, mais j'aimerais traiter les messages et pour chaque message, il interprétera les paires k / v et lancera le script.
Je souhaite utiliser les messages déjà dans la file d'attente et traiter ces messages dans le cadre du sélénium, comment puis-je y parvenir?
J'apprécierai l'aide. J'ai édité la question avec le code
Voici l'extrait de code pour envoyer le message JSON
public class MessageSender {
public static void main(String[] args) throws IOException {
SingleNumberLogin generateLogin = new SingleNumberLogin();
//function call to build the JSON object
String jsonQueue = generateLogin.buildJASONObject();
ConnectionFactory conFactory = new ConnectionFactory();
try {
Connection connInterface = conFactory.newConnection();
Channel mqChannel = connInterface.createChannel();
mqChannel.queueDeclare("MyQueue",false,false,false,null);
//Just assigning json to another string, then publish the message
String myMessage = jsonQueue;
mqChannel.basicPublish("","MyQueue",false ,false, null,myMessage.getBytes());
}catch (
IOException | TimeoutException e)
{
System.out.println(e.getStackTrace());
}
conFactory.setUsername("guest");
conFactory.setPassword("guest");
conFactory.setVirtualHost("/");
conFactory.setHost("localhost");
conFactory.setPort(5672);
}
}
extrait de code pour le code consommateur que j'ai inséré dans la fonction de démarrage du script d'automatisation, donc si un message arrive, un seul cas de test est exécuté
@BeforeTest
public static void initializeTestBaseSetup() throws Exception, IOException, TimeoutException {
ConnectionFactory conFactory = new ConnectionFactory();
Connection connInterface = conFactory.newConnection();
Channel mqChannel = connInterface.createChannel();
mqChannel.queueDeclare("MyQueue",false,false,false,null);
mqChannel.basicConsume("MyQueue", true, (consumerTag, message) -> {
//convert to byte array
String m = new String (message.getBody(), "UTF-8");
System.out.println("Message received" + m);
}, consumerTag -> {
});
}
Sortie JSON
JSON Message received 2020-08-28T20:39:30.845{
"NUMBER": "0000011111",
"Type": "BAU",
"User": "MyUser ",
"Email": "[email protected]",
}
Testé de manière isolée, cela fonctionne parfaitement bien, ce que je veux dire, c'est que j'envoie le message et que je vérifie que le consommateur le reçoit, en ajoutant le code consommateur à mon framework, c'est là que je suis bloqué.
Réponses
Je vous suggérerais de ne pas penser à ce que vous avez en tant que " framework sélénium " - pensez-y comme " framework java ".
Selenium est un ensemble de bibliothèques qui vous permettent d'automatiser le navigateur Web au niveau de l'interface graphique. Le framework est la solution codée pour faciliter la création et la gestion de votre suite de tests - il ne doit pas être limité au sélénium et il est probable qu'il ne soit déjà qu'un de ses composants.
Essayer de répondre directement à votre question:
- SELENIUM ne peut pas lire les messages
- JAVA peut lire les messages
Si votre rabbitmq a une interface Web, vous pourrez peut- être utiliser du sélénium pour cela, mais ce n'est pas une solution très efficace ou logique.
Ce que vous voudrez peut-être envisager, et ce que je ferais, est d'étendre votre cadre pour utiliser les bibliothèques rabbitmq pour traiter les messages selon vos besoins. Ces bibliothèques sont conçues pour cette tâche.
Vous dites:
Je voudrais traiter les messages et pour chaque message, il interprétera les paires k / v et lancera le script.
Je comprends que cela signifie que les messages sont les données de pré-demande pour les tests. Si vous souhaitez lire les valeurs d'un message avant le test, vous pouvez soit:
- Placez le get / read dans une
@Before
méthode générique - ou s'il s'agit d'un message spécifique par cas de test, ajoutez-le au début du test.
Vous travaillez en Java pour pouvoir faire ce que vous voulez vraiment.
Pour commencer, le tutoriel rabbitmq commence ici .
Voici un exemple bonjour du monde pour lire les messages de la file d'attente:
public class Recv {
private final static String QUEUE_NAME = "hello";
public static void main(String[] argv) throws Exception {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
}
}