使用websocket和jms的难以处理的Robot框架测试用例

时间:2018-03-02 17:32:32

标签: java jms robotframework keyword java-websocket

我在机器人框架中重写java测试用例时遇到了麻烦。

为了做到这一点,我需要创建新的java关键字,但实现测试的方式,不要轻松!

这是我需要在RF中重写的脚本示例:

try
{
  ServerSocket server = Utils.startSocketServer; 
  while(true)
  {
    Socket socket = server.accept();
    ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
    RequestX request = (RequestX) ois.readObject();
    if(request.getSource().equals(String.INFO)
    {  
      /** do something  **/
    }
    else if(request.getSource().equals(String.X)
    {
     /** do something  **/
    }
    else 
    {
     /** do something  **/
    }
    /** break on condition **/
  }
    Utils.closeSocketServer(server);

}catch(Exception e)
{
   /** do something **/ 
}

关于我如何将其变成RF测试案例的任何建议!

将整个脚本变成单个关键字不是一个选项,因为在该循环中的某个地方,在执行注释时,我还需要调用关键字。

主要的想法是将此脚本分解为函数,以便我可以将它们用作RF中的java关键字,但我仍然无法理解这一点!

1 个答案:

答案 0 :(得分:0)

所以,我做了进一步的研究,这就是我提出的:

将此代码拆分为函数,以便我可以在机器人框架中调用它们并将其用作关键字。 所以代码就像这样:

public static String SendTask(String taskFile)
{
  ServerSocket server = null;
  try
  {
    server = startSocketServer();
    if (taskFile != null)
    {
       Utils.sendJMSWakeUp();
       while(true)
       { 
         Socket socket = server.accept();
         ObjectInputStream ois = getInputStream(socket);
         RequestX request = (cast)ois.readObject();
         if (getSource(request,Strings.INFO)
         {
          /** log info **/
         }
          /** if the current jms queue is Scheduler then send task !*/
         else if (getSource(request,Strings.SCHEDULER))
         {
          /** send task **/
          break;
         }
       }
   }
   else   
   {
      assertion(false, "Illegal Argument Value null");
   }  
  }catch (Exception e)
  {
    /** log errors **/
  }finally
  {
   /** close socket server & return a task id **/
  }
}

我正在收听的每个JMS队列都是如此

public static String getTaskAck(String taskId);

public static String getTaskresult(String taskId);

它确实适用于我的同步任务执行。但这对异步任务执行非常不方便。因为每次我都要等待关键字的响应,所以下一个关键字可能会失败,因为他应该读取的响应已经发送了!

我可以查看用于并行关键字执行的进程BuiltIn库或RobotFramework-Async库,但是对于许多异步jms消息来说,它将更难处理。

经过进一步调查,我想我会研究一下robotframework-jmsLibrary。必须像添加activeMq一样进行一些开发增强。 这样,我可以通过activeMq发送和使用许多异步消息,然后通过robotframework-jmsLibrary处理每条消息 示例: RF-jmsLibrary< ==>同步< ==> activeMq< ==>异步< ==>系统