내 셀레늄 프레임 워크가 수신 메시지를 사용할 수 있습니까?

Aug 19 2020

내 Selenium 프레임 워크가 메시지 대기열에있는 메시지를 대기열에서 빼는 방법을 알고 싶습니다. k / v 쌍이 포함 된 JSON 문자열을 메시지 큐에 보내는 애플리케이션을 빌드했습니다.

내 아키텍처는 다음과 같으며 별도의 앱입니다.

  1. JSON 문자열을 생성하는 매개 변수를 받아들이는 JSP 웹 애플리케이션이 존재합니다.
  2. 메시지 발신자가 존재하고 JSON 문자열을 가져와 큐에 게시합니다.
  3. 메시지 소비자가 존재하고 메시지를 소비합니다. 기본적으로 여기에 앉아
  4. 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]",
}

격리 된 상태에서 테스트 할 때 완벽하게 작동합니다. 즉, 메시지를 보내고 소비자가 받는지 확인하고 프레임 워크에 소비자 코드를 추가하면 문제가 발생합니다.

답변

RichEdwards Aug 19 2020 at 10:09

" 셀레늄 프레임 워크" 라고 생각하지 말고 " 자바 프레임 워크" 라고 생각 하세요.

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

  }
}