내 셀레늄 프레임 워크가 수신 메시지를 사용할 수 있습니까?
내 Selenium 프레임 워크가 메시지 대기열에있는 메시지를 대기열에서 빼는 방법을 알고 싶습니다. k / v 쌍이 포함 된 JSON 문자열을 메시지 큐에 보내는 애플리케이션을 빌드했습니다.
내 아키텍처는 다음과 같으며 별도의 앱입니다.
- JSON 문자열을 생성하는 매개 변수를 받아들이는 JSP 웹 애플리케이션이 존재합니다.
- 메시지 발신자가 존재하고 JSON 문자열을 가져와 큐에 게시합니다.
- 메시지 소비자가 존재하고 메시지를 소비합니다. 기본적으로 여기에 앉아
- Selenium Java Framework가 있지만 메시지를 처리하고 각 메시지에 대해 k / v 쌍을 해석하고 스크립트를 시작합니다.
큐에 이미있는 메시지를 사용하고 셀레늄 프레임 워크 내에서 이러한 메시지를 처리하고 싶습니다. 어떻게하면됩니까?
도움을 주시면 감사하겠습니다. 코드로 질문을 편집했습니다.
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]",
}
격리 된 상태에서 테스트 할 때 완벽하게 작동합니다. 즉, 메시지를 보내고 소비자가 받는지 확인하고 프레임 워크에 소비자 코드를 추가하면 문제가 발생합니다.
답변
" 셀레늄 프레임 워크" 라고 생각하지 말고 " 자바 프레임 워크" 라고 생각 하세요.
Selenium은 GUI 레벨에서 웹 브라우저를 자동화 할 수있는 라이브러리 세트입니다. 프레임 워크는 테스트 스위트의 생성 및 관리를 용이하게하는 코딩 된 솔루션입니다. 셀레늄에 국한 될 필요가 없으며 이미 구성 요소 중 하나 일 가능성이 있습니다.
귀하의 질문에 직접 답변하려고 :
- SELENIUM은 메시지를 읽을 수 없습니다.
- JAVA는 메시지를 읽을 수 있습니다.
당신의 rabbitmq 웹 프론트 엔드가있는 경우 당신은 할 수 있습니다 그것을 위해 셀레늄을 사용할 수 있지만, 이것은 매우 효율적인 또는 논리적 인 해결책이 아니다.
당신이 고려하고 싶은 것은 당신이 필요에 따라 메시지를 처리하기 위해 rabbitmq 라이브러리를 사용하도록 프레임 워크를 확장하는 것입니다. 이러한 라이브러리는이 작업을 위해 설계되었습니다.
당신은 말한다 :
메시지를 처리하고 각 메시지에 대해 k / v 쌍을 해석하고 스크립트를 시작합니다.
나는 메시지가 테스트를위한 필수 데이터라는 것을 의미한다는 것을 이해합니다. 테스트 전에 메시지 값을 읽으려면 다음 중 하나를 수행 할 수 있습니다.
- 일반
@Before
메소드 에 가져 오기 / 읽기 배치 - 또는 테스트 케이스 별 특정 메시지 인 경우 테스트 시작에 추가합니다.
당신은 당신이 정말로 원하는 것을 할 수 있도록 자바에서 일하고 있습니다.
시작하려면 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");
}
}