在Citrus Framework测试用例中启动模拟器

时间:2018-03-08 14:13:32

标签: simulator citrus-framework

这可能以某种方式从Citrus testcase中运行Citrus模拟器场景吗?

我有一个端到端的测试场景。我向输入端点发送一条消息,并从最后一个端点接收它:

<parallel>
   <sequential>
      <receive endpoint="...">
         <message>
            <resource file="..."/>
         </message>
         <header>
            ...
         </header>
      </receive>
   </sequential>
   <sequential>
      <sleep seconds="10"/>
      <send endpoint="...">
         <message>
            <resource file="..."/>
         </message>
         <header>
            ...
         </header>
      </send>
   </sequential>
</parallel>

与此同时,我的应用程序会执行一些额外的读数。我需要模拟这些读数的回复,如果我能够在此测试用例中包含对这些读取的回复,或者在运行此测试用例的同时启动特定的Simulator场景(在测试之前无需启动其他外部Java Simulator应用程序),那将会很棒。这可能吗?

最好的问候

1 个答案:

答案 0 :(得分:1)

让我看看我是否正确理解了您的情景:

  1. 发送初始消息。
  2. 模拟那些&#34;其他读物&#34;。
  3. 的回复
  4. 收到对初始消息的回复。
  5. 您可以使用<parallel>&amp; <sequential>代码:

    <parallel>
      <sequential>
        <!-- send initial request -->
        <send ...>
    
        <!-- receive response to the initial request -->
        <receive ...>
      </sequential>
      <sequential>
        <!-- simulate readings -->
      </sequential>
    </parallel>
    

    你有两个主题。在第一个<sequential>中,您发送启动请求(1)并等待响应(3)。

    在第二个<sequential>中,您模拟对您的读数的回复(2)。

    两个线程将并行运行。 Citrus将发送请求,之后它将等待<receive>操作的响应。只有在你完成模拟你的读数(在并行线程上)并且你的应用程序能够发送正确的响应(我推测)之后,才能得到这个响应。这意味着您需要在第一个<send>内的<receive><sequential>之间进行休眠,或者为<receive>操作配置足够高的超时。

    我还回答了与您的older question有关Citrus和主题的问题,我猜想,这就是为什么你有两个<sequential>与第一个<receive>并行运行的原因。如果您的应用仅在模拟读数后发送响应,则我上面发布的设置应该有效,因为响应的速度不应该是个问题。如果速度仍然是一个问题,这样的事情应该有效:

    <parallel>
      <sequential>
        <!-- receive response to the initial request -->
        <receive ...>
      </sequential>
    
      <sequential>
        <!-- send initial request -->
        <send ...>
      </sequential>
    
      <sequential>
        <!-- simulate readings -->
      </sequential>
    </parallel>
    

    再次,不要忘记<receive>操作的超时。

    如果您需要可重复使用的测试方案,可能模板可以help you