Bisakah kerangka selenium saya mengkonsumsi pesan masuk

Aug 19 2020

Saya ingin tahu bagaimana kerangka Selenium saya dapat menghapus pesan yang ada di antrean pesan. Saya telah membangun aplikasi untuk mengirim string JSON yang berisi pasangan k / v ke antrian pesan.

Arsitektur saya adalah sebagai berikut dan aplikasi terpisah:

  1. Aplikasi Web JSP ada yang menerima parameter yang menghasilkan string JSON
  2. Pengirim pesan ada dan mengambil string JSON dan menerbitkannya ke Antrean
  3. Seorang konsumen pesan ada dan menggunakan Pesan. Ini pada dasarnya hanya duduk di sini
  4. Kerangka kerja Java Selenium ada, tetapi saya ingin memproses pesan dan untuk setiap pesan itu akan menafsirkan pasangan k / v dan memulai skrip.

Saya ingin menggunakan pesan yang sudah ada di antrian dan memproses pesan-pesan ini di dalam kerangka selenium, bagaimana saya bisa melakukannya?

Saya akan menghargai bantuannya. Saya telah mengedit pertanyaan dengan kode

Ini adalah potongan kode untuk mengirim Pesan 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);
}

}

potongan kode untuk kode konsumen yang telah saya masukkan ke dalam fungsi startup skrip otomasi, jadi jika sebuah pesan tiba, satu kasus uji dijalankan

    @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 -> {

    });
}

Keluarkan JSON

JSON Message received 2020-08-28T20:39:30.845{
  "NUMBER": "0000011111",
  "Type": "BAU",
  "User": "MyUser ",
  "Email": "[email protected]",
}

Ketika diuji secara terpisah, itu berfungsi dengan baik, yang saya maksud adalah saya mengirim pesan dan memeriksa apakah konsumen menerimanya, menambahkan kode konsumen ke kerangka kerja saya adalah tempat saya terjebak.

Jawaban

RichEdwards Aug 19 2020 at 10:09

Saya sarankan Anda tidak berpikir tentang apa yang Anda miliki sebagai " kerangka selenium " - anggap saja sebagai " kerangka kerja java ".

Selenium adalah seperangkat perpustakaan yang memungkinkan Anda mengotomatiskan browser web pada tingkat GUI. Kerangka kerja adalah solusi berkode untuk memfasilitasi pembuatan dan pengelolaan rangkaian pengujian Anda - tidak harus terbatas pada selenium dan kemungkinan itu sudah hanya salah satu komponennya.

Mencoba menjawab pertanyaan Anda secara langsung:

  • SELENIUM tidak dapat membaca pesan
  • JAVA dapat membaca pesan

Jika rabbitmq Anda memiliki ujung depan web maka Anda mungkin dapat menggunakan selenium untuk itu, tetapi ini bukan solusi yang sangat efisien atau logis.

Apa yang mungkin ingin Anda pertimbangkan, dan apa yang akan saya lakukan, adalah memperluas kerangka kerja Anda untuk menggunakan perpustakaan rabbitmq untuk memproses pesan yang Anda butuhkan. Pustaka ini dirancang untuk tugas ini.

Kamu bilang:

Saya ingin memproses pesan dan untuk setiap pesan itu akan menafsirkan pasangan k / v dan memulai skrip.

Saya memahami ini berarti bahwa pesan adalah data pra-persyaratan untuk pengujian. Jika Anda ingin membaca nilai pesan sebelum pengujian, Anda dapat:

  • Tempatkan get / read dalam @Beforemetode umum
  • atau jika itu adalah pesan khusus per kasus pengujian, tambahkan pesan tersebut ke awal pengujian.

Anda bekerja di java sehingga Anda dapat melakukan apa pun yang Anda inginkan.

Untuk membantu Anda memulai, tutorial rabbitmq dimulai di sini .

Ini ada contoh hello world untuk membaca pesan dari antrian:

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

  }
}