Il mio framework di selenio può consumare un messaggio in arrivo
Vorrei sapere come il mio framework Selenium può rimuovere dalla coda un messaggio che si trova in una coda di messaggi. Ho creato un'applicazione per inviare una stringa JSON contenente coppie k / v a una coda di messaggi.
La mia architettura è la seguente e app separate:
- Esiste un'applicazione Web JSP che accetta parametri che risultano in una stringa JSON
- Un mittente del messaggio esiste e prende la stringa JSON e la pubblica in una coda
- Un consumatore di messaggi esiste e consuma i messaggi. Fondamentalmente è solo seduto qui
- Esiste un Selenium Java Framework, ma vorrei elaborare i messaggi e per ogni messaggio interpreterà le coppie k / v e darà il via allo script.
Vorrei utilizzare i messaggi già in coda ed elaborare questi messaggi all'interno del framework selenio, come posso ottenere questo risultato?
Apprezzerò l'aiuto. Ho modificato la domanda con il codice
Questo è lo snippet di codice per inviare il messaggio 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);
}
}
frammento di codice per il codice consumer che ho inserito nella funzione di avvio dello script di automazione, quindi se arriva un messaggio viene eseguito un singolo test case
@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 -> {
});
}
Output JSON
JSON Message received 2020-08-28T20:39:30.845{
"NUMBER": "0000011111",
"Type": "BAU",
"User": "MyUser ",
"Email": "[email protected]",
}
Quando viene testato isolatamente, funziona perfettamente, ciò che intendo è che invio il messaggio e controllo che il consumatore lo riceva, aggiungendo il codice consumatore al mio framework è dove sono bloccato.
Risposte
Ti suggerirei di non pensare a quello che hai come un " framework di selenio " - pensalo come un " framework java ".
Selenium è un insieme di librerie che ti consentono di automatizzare il browser web a livello di GUI. Il framework è la soluzione codificata per facilitare la creazione e la gestione della tua suite di test: non deve essere limitato al selenio e probabilmente è già solo uno dei suoi componenti.
Cercando di rispondere direttamente alla tua domanda:
- SELENIO non può leggere i messaggi
- JAVA può leggere i messaggi
Se il vostro RabbitMQ ha un front-end web allora si potrebbe essere in grado di utilizzare il selenio per essa, ma questo non è un molto efficiente o di una soluzione logica.
Quello che potresti voler considerare, e quello che farei io, è estendere il tuo framework per utilizzare le librerie rabbitmq per elaborare i messaggi di cui hai bisogno. Queste librerie sono progettate per questa attività.
Tu dici:
Vorrei elaborare i messaggi e per ogni messaggio interpreterà le coppie k / v e darà il via allo script.
Capisco che questo significhi che i messaggi sono i dati pre-richiesta per i test. Se vuoi leggere i valori di un messaggio prima del test puoi:
- Posiziona il get / read in un
@Before
metodo generico - oppure, se si tratta di un messaggio specifico per scenario di test, aggiungilo all'inizio del test.
Stai lavorando in java quindi puoi fare quello che vuoi davvero.
Per iniziare, il tutorial di rabbitmq inizia qui .
Questo è un esempio di Hello World per leggere i messaggi dalla coda:
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");
}
}