Может ли мой фреймворк Selenium потреблять входящее сообщение
Я хотел бы знать, как моя структура Selenium может удалить сообщение, находящееся в очереди сообщений. Я создал приложение для отправки строки JSON, содержащей пары k / v, в очередь сообщений.
Моя архитектура выглядит следующим образом и отдельные приложения:
- Существует веб-приложение JSP, принимающее параметры, приводящие к строке JSON
- Отправитель сообщения существует, берет строку JSON и публикует ее в очереди.
- Потребитель сообщений существует и потребляет сообщения. Это в основном просто сижу здесь
- Существует 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]",
}
Когда тестируется изолированно, он работает отлично, я имею в виду, что я отправляю сообщение и проверяю, что потребитель его получает, добавление кода потребителя в мою структуру - вот где я застрял.
Ответы
Я бы посоветовал вам не думать о том, что у вас есть, как о « фреймворке селена » - думайте об этом как о « фреймворке 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");
}
}