Selenyum çerçevem gelen bir mesajı tüketebilir mi
Selenium çerçevemin bir mesaj kuyruğunda oturan bir mesajı nasıl kuyruğundan çıkarabileceğini bilmek istiyorum. Bir ileti kuyruğuna k / v çiftleri içeren bir JSON dizesi göndermek için bir uygulama oluşturdum.
Benim mimarim aşağıdaki gibidir ve ayrı uygulamalar:
- JSON dizesiyle sonuçlanan parametreleri kabul eden bir JSP Web Uygulaması mevcuttur
- Bir mesaj gönderen vardır ve JSON dizesini alır ve bir Kuyruğa yayınlar
- Bir mesaj tüketicisi vardır ve Mesajları tüketir. Temelde sadece burada oturuyor
- Bir Selenium Java Çerçevesi var, ancak mesajları işlemek istiyorum ve her mesaj için k / v çiftlerini yorumlayacak ve betiği başlatacak.
Halihazırda kuyrukta olan mesajları kullanmak ve bu mesajları selenyum çerçevesinde işlemek istiyorum, bunu nasıl başarabilirim?
Yardımı takdir edeceğim. Soruyu kodla düzenledim
Bu, JSON İletisini gönderecek kod parçacığıdır
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);
}
}
Otomasyon betiğinin başlangıç işlevine eklediğim tüketici kodu için kod parçacığı, yani bir mesaj gelirse tek bir test durumu yürütülür
@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 çıkışı
JSON Message received 2020-08-28T20:39:30.845{
"NUMBER": "0000011111",
"Type": "BAU",
"User": "MyUser ",
"Email": "[email protected]",
}
İzole olarak test edildiğinde mükemmel çalışıyor, demek istediğim mesajı gönderiyorum ve tüketicinin aldığını kontrol ediyorum, tüketici kodunu çerçeveme ekleyerek sıkıştığım yer.
Yanıtlar
Bir " selenyum çerçevesi" olarak sahip olduğunuz şeyi düşünmemenizi öneririm - bunu bir " java çerçevesi" olarak düşünün .
Selenium, web tarayıcısını GUI seviyesinde otomatikleştirmenize izin veren bir kitaplık kümesidir. Çerçeve, test paketinizin oluşturulmasını ve yönetimini kolaylaştırmak için kodlanmış bir çözümdür - selenyum ve zaten bileşenlerinden sadece biri olan ihtimallerle sınırlı olması gerekmez.
Sorunuza doğrudan cevap vermeye çalışıyorum:
- SELENIUM mesajları okuyamaz
- JAVA mesajları okuyabilir
Rabbitmq'inizin bir web ön ucu varsa , bunun için selenyum kullanabilirsiniz, ancak bu çok verimli veya mantıklı bir çözüm değildir.
Göz önünde bulundurmak isteyebileceğiniz şey ve yapacağım şey, çerçevenizi, iletileri ihtiyaç duyduğunuz şekilde işlemek için rabbitmq kitaplıklarını kullanacak şekilde genişletmektir. Bu kütüphaneler bu görev için tasarlanmıştır.
Diyorsun:
Mesajları işlemek istiyorum ve her mesaj için k / v çiftlerini yorumlayacak ve betiği başlatacak.
Bunu, mesajların testler için ön gereksinim verileri olduğu anlamına gelmek üzere anlıyorum. Testten önce bir mesajın değerlerini okumak istiyorsanız şunlardan birini yapabilirsiniz:
- Al / okumayı genel bir
@Before
yönteme yerleştirin - veya test senaryosu başına belirli bir mesajsa, testin başlangıcına ekleyin.
Javada çalışıyorsun, böylece gerçekten istediğini yapabilirsin.
Başlamanız için, rabbitmq öğreticisi burada başlıyor .
Bu, kuyruktaki mesajları okumak için merhaba dünya örneğidir:
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");
}
}