私のセレンフレームワークは着信メッセージを消費できますか

Aug 19 2020

Seleniumフレームワークがメッセージキューにあるメッセージをデキューする方法を知りたいのですが。k / vペアを含むJSON文字列をメッセージキューに送信するアプリケーションを作成しました。

私のアーキテクチャは次のとおりで、個別のアプリです。

  1. JSON文字列になるパラメータを受け入れるJSPWebアプリケーションが存在します
  2. メッセージ送信者が存在し、JSON文字列を取得して、キューに公開します
  3. メッセージコンシューマーが存在し、メッセージを消費します。基本的にここに座っているだけです
  4. Selenium Javaフレームワークが存在しますが、メッセージを処理したいと思います。メッセージごとに、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

自分が持っているものを「セレンフレームワーク」とは考えないでください。「Javaフレームワーク」と考えてください。

Seleniumは、GUIレベルでWebブラウザーを自動化できるライブラリのセットです。フレームワークは、テストスイートの作成と管理を容易にするためのコード化されたソリューションです。セレンや、すでにそのコンポーネントの1つにすぎない可能性に限定する必要はありません。

あなたの質問に直接答えようとしています:

  • SELENIUMはメッセージを読み取ることができません
  • JAVAはメッセージを読むことができます

あなたのrabbitmqがウェブフロントエンドを持っているなら、あなたはそれにセレンを使うことができるかもしれません、しかしこれはあまり効率的または論理的な解決策ではありません。

検討したいこと、そして私がすることは、必要に応じてメッセージを処理するためにrabbitmqライブラリを使用するようにフレームワークを拡張することです。これらのライブラリは、このタスク用に設計されています。

あなたは言う:

メッセージを処理したいと思います。メッセージごとに、k / vペアを解釈し、スクリプトを開始します。

これは、メッセージがテストの前提条件データであることを意味すると理解しています。テストの前にメッセージの値を読み取りたい場合は、次のいずれかを実行できます。

  • get / readをジェネリック@Beforeメソッドに配置します
  • または、テストケースごとの特定のメッセージである場合は、テストの開始に追加します。

あなたはJavaで作業しているので、本当にやりたいことが何でもできます。

はじめに、rabbitmqチュートリアルはここから始まります。

これは、キューからメッセージを読み取るためのhelloworldの例です。

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

  }
}