Minha estrutura de selênio pode consumir uma mensagem recebida
Gostaria de saber como minha estrutura Selenium pode retirar da fila uma mensagem que está em uma fila de mensagens. Eu construí um aplicativo para enviar uma string JSON contendo pares k / v para uma fila de mensagens.
Minha arquitetura é a seguinte e aplicativos separados:
- Existe um aplicativo da Web JSP que aceita parâmetros que resultam em uma string JSON
- Um remetente de mensagem existe e pega a string JSON e a publica em uma fila
- Existe um consumidor de mensagem e consome as mensagens. É basicamente apenas sentado aqui
- Existe um Selenium Java Framework, mas eu gostaria de processar as mensagens e para cada mensagem ele interpretará os pares k / v e iniciará o script.
Eu gostaria de usar as mensagens que já estão na fila e processar essas mensagens dentro da estrutura de selênio, como posso fazer isso?
Agradeço a ajuda. Eu editei a pergunta com o código
Este é o snippet de código para enviar a mensagem 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);
}
}
trecho de código para o código do consumidor que eu inseri na função de inicialização do script de automação, portanto, se uma mensagem chegar, um único caso de teste será executado
@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 -> {
});
}
JSON de saída
JSON Message received 2020-08-28T20:39:30.845{
"NUMBER": "0000011111",
"Type": "BAU",
"User": "MyUser ",
"Email": "[email protected]",
}
Quando testado isoladamente, funciona perfeitamente bem, o que quero dizer é que eu envio a mensagem e verifico se o consumidor a recebe, adicionando o código do consumidor ao meu framework é onde fico preso.
Respostas
Eu sugiro que você não pense sobre o que você tem como uma " estrutura de selênio " - pense nisso como uma " estrutura de java ".
Selenium é um conjunto de bibliotecas que permitem automatizar o navegador da web em um nível de GUI. A estrutura é a solução codificada para facilitar a criação e o gerenciamento de seu conjunto de testes - ela não precisa ser limitada ao selênio e provavelmente já é apenas um de seus componentes.
Tentando responder sua pergunta diretamente:
- SELENIUM não pode ler mensagens
- JAVA pode ler mensagens
Se o seu rabbitmq tiver um front-end da web, você poderá usar selênio para ele, mas esta não é uma solução muito eficiente ou lógica.
O que você pode querer considerar, e o que eu faria, é estender sua estrutura para usar as bibliotecas rabbitmq para processar mensagens conforme necessário. Essas bibliotecas são projetadas para essa tarefa.
Você diz:
Eu gostaria de processar as mensagens e para cada mensagem ele interpretará os pares k / v e dará início ao script.
Eu entendo que isso significa que as mensagens são os dados pré-requisitados para os testes. Se quiser ler os valores de uma mensagem antes do teste, você pode:
- Coloque o get / read em um
@Before
método genérico - ou se for uma mensagem específica por caso de teste, adicione-a no início do teste.
Você está trabalhando em java, então você pode fazer o que realmente quiser.
Para começar, o tutorial do rabbitmq começa aqui .
Este é o exemplo hello world para ler mensagens da fila:
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");
}
}