java—我的selenium框架可以使用传入消息吗

du7egjpx  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(244)

我想知道我的selenium框架如何对消息队列中的消息进行出列。我构建了一个应用程序,将包含k/v对的json字符串发送到消息队列。
我的体系结构如下所示,并且是独立的应用程序:
存在一个jspweb应用程序,它接受产生json字符串的参数
消息发送者存在并获取json字符串并将其发布到队列
消息使用者存在并使用消息。基本上就是坐在这里
一个selenium java框架已经存在,但是我想处理消息,对于每条消息,它将解释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": "riidonesh@gmail.com",
}

当单独测试时,它工作得非常好,我的意思是,我发送消息并检查消费者是否收到消息,将消费者代码添加到我的框架中是我遇到的难题。

ecr0jaav

ecr0jaav1#

我建议您不要把您拥有的东西看作是“selenium框架”,而是把它看作是“java框架”。
selenium是一组库,允许您在gui级别自动化web浏览器。这个框架是一个代码化的解决方案,可以帮助您创建和管理测试套件—它不必局限于selenium和它的一个组件。
试着直接回答你的问题:
selenium无法读取消息
java可以读取消息
如果您的rabbitmq有一个web前端,那么您可以使用selenium来实现它,但这不是一个非常有效或合乎逻辑的解决方案。
您可能需要考虑的是,我将要做的是扩展您的框架,以便根据需要使用rabbitmq库来处理消息。这些库是为此任务而设计的。
你说:
我想处理这些消息,对于每条消息,它将解释k/v对并启动脚本。
我理解这意味着消息是测试的预请求数据。如果要在测试之前读取消息的值,可以:
将get/read放在泛型中 @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");

  }
}

相关问题