Может ли мой фреймворк Selenium потреблять входящее сообщение

Aug 19 2020

Я хотел бы знать, как моя структура Selenium может удалить сообщение, находящееся в очереди сообщений. Я создал приложение для отправки строки JSON, содержащей пары k / v, в очередь сообщений.

Моя архитектура выглядит следующим образом и отдельные приложения:

  1. Существует веб-приложение JSP, принимающее параметры, приводящие к строке JSON
  2. Отправитель сообщения существует, берет строку JSON и публикует ее в очереди.
  3. Потребитель сообщений существует и потребляет сообщения. Это в основном просто сижу здесь
  4. Существует Selenium Java Framework, но я хотел бы обрабатывать сообщения, и для каждого сообщения он интерпретирует пары k / v и запускает сценарий.

Я хотел бы использовать сообщения, уже находящиеся в очереди, и обрабатывать эти сообщения в рамках selenium, как я могу этого добиться?

Буду признателен за помощь. Я редактировал вопрос с кодом

Это фрагмент кода для отправки сообщения 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);
}

}

фрагмент кода для потребительского кода, который я вставил в функцию запуска сценария автоматизации, поэтому, если приходит сообщение, выполняется один тестовый пример

    @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

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

Когда тестируется изолированно, он работает отлично, я имею в виду, что я отправляю сообщение и проверяю, что потребитель его получает, добавление кода потребителя в мою структуру - вот где я застрял.

Ответы

RichEdwards Aug 19 2020 at 10:09

Я бы посоветовал вам не думать о том, что у вас есть, как о « фреймворке селена » - думайте об этом как о « фреймворке Java ».

Selenium - это набор библиотек, которые позволяют автоматизировать веб-браузер на уровне графического интерфейса. Фреймворк - это закодированное решение для облегчения создания и управления вашим набором тестов - он не должен ограничиваться селеном и, возможно, уже только одним из его компонентов.

Пытаюсь прямо ответить на ваш вопрос:

  • SELENIUM не может читать сообщения
  • JAVA может читать сообщения

Если у вашего rabbitmq есть веб-интерфейс, вы можете использовать для него селен, но это не очень эффективное или логичное решение.

Что вы, возможно, захотите рассмотреть, и что бы я сделал, так это расширение вашей структуры для использования библиотек rabbitmq для обработки сообщений по мере необходимости. Эти библиотеки предназначены для этой задачи.

Ты говоришь:

Я хотел бы обработать сообщения, и для каждого сообщения он интерпретирует пары k / v и запускает сценарий.

Я понимаю, что это означает, что сообщения являются предварительными данными для тестов. Если вы хотите прочитать значения сообщения перед тестом, вы можете:

  • Поместите получение / чтение в общий @Beforeметод
  • или, если это конкретное сообщение для каждого тестового примера, добавьте его в начало теста.

Вы работаете в java, поэтому можете делать все, что хотите.

Чтобы вы начали, здесь начинается учебник rabbitmq .

Вот пример hello world для чтения сообщений из очереди:

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

  }
}