¿Puede mi marco de selenio consumir un mensaje entrante?

Aug 19 2020

Me gustaría saber cómo mi marco de Selenium puede quitar de la cola un mensaje que se encuentra en una cola de mensajes. He creado una aplicación para enviar una cadena JSON que contiene pares k / v a una cola de mensajes.

Mi arquitectura es la siguiente y aplicaciones separadas:

  1. Existe una aplicación web JSP que acepta parámetros que dan como resultado una cadena JSON
  2. Existe un remitente de mensaje y toma la cadena JSON y la publica en una cola
  3. Existe un consumidor de mensajes y consume los mensajes. Básicamente está sentado aquí
  4. Existe un Selenium Java Framework, pero me gustaría procesar los mensajes y para cada mensaje interpretará los pares k / v e iniciará el script.

Me gustaría usar los mensajes que ya están en la cola y procesar estos mensajes dentro del marco de selenio, ¿cómo puedo lograr esto?

Agradeceré la ayuda. He editado la pregunta con el código

Este es el fragmento de código para enviar el mensaje 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);
}

}

fragmento de código para el código del consumidor que he insertado en la función de inicio del script de automatización, por lo que si llega un mensaje, se ejecuta un solo caso de prueba

    @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 salida

JSON Message received 2020-08-28T20:39:30.845{
  "NUMBER": "0000011111",
  "Type": "BAU",
  "User": "MyUser ",
  "Email": "[email protected]",
}

Cuando se prueba de forma aislada, funciona perfectamente bien, lo que quiero decir es que envío el mensaje y verifico que el consumidor lo recibe, agregando el código del consumidor a mi marco es donde estoy atascado.

Respuestas

RichEdwards Aug 19 2020 at 10:09

Le sugiero que no piense en lo que tiene como un " marco de selenio ", piense en ello como un " marco de Java ".

Selenium es un conjunto de bibliotecas que le permiten automatizar el navegador web a nivel de GUI. El marco es la solución codificada para facilitar la creación y administración de su suite de pruebas; no tiene que limitarse al selenio y es probable que ya sea solo uno de sus componentes.

Tratando de responder a su pregunta directamente:

  • SELENIUM no puede leer mensajes
  • JAVA puede leer mensajes

Si su rabbitmq tiene una interfaz web, es posible que pueda usar selenio, pero esta no es una solución muy eficiente o lógica.

Lo que es posible que desee considerar, y lo que haría, es extender su marco para usar las bibliotecas rabbitmq para procesar los mensajes que necesite. Estas bibliotecas están diseñadas para esta tarea.

Tu dices:

Me gustaría procesar los mensajes y para cada mensaje interpretará los pares k / v e iniciará el script.

Entiendo que esto significa que los mensajes son los datos de prerrequisito para las pruebas. Si desea leer los valores de un mensaje antes de la prueba, puede:

  • Coloque el get / read en un @Beforemétodo genérico
  • o si es un mensaje específico por caso de prueba, agréguelo al inicio de la prueba.

Estás trabajando en Java para que puedas hacer lo que quieras de verdad.

Para comenzar, el tutorial de rabbitmq comienza aquí .

Este es un ejemplo de hola mundo para leer mensajes de la cola:

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");

  }
}