私のセレンフレームワークは着信メッセージを消費できますか
Seleniumフレームワークがメッセージキューにあるメッセージをデキューする方法を知りたいのですが。k / vペアを含むJSON文字列をメッセージキューに送信するアプリケーションを作成しました。
私のアーキテクチャは次のとおりで、個別のアプリです。
- JSON文字列になるパラメータを受け入れるJSPWebアプリケーションが存在します
- メッセージ送信者が存在し、JSON文字列を取得して、キューに公開します
- メッセージコンシューマーが存在し、メッセージを消費します。基本的にここに座っているだけです
- 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]",
}
単独でテストした場合、それは完全に正常に機能します。つまり、メッセージを送信し、コンシューマーがメッセージを受信することを確認します。フレームワークにコンシューマーコードを追加すると、行き詰まります。
回答
自分が持っているものを「セレンフレームワーク」とは考えないでください。「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");
}
}