如何测试我的应用程序是否不使用SoapUI发送消息?

时间:2016-07-11 13:49:14

标签: testing soap groovy soapui

我有一个Java EE应用程序,它处理来自不同接口的大量消息。 (某些)功能测试是使用SoapUI执行的。

在其中一个案例中,我创建了一个SOAP VirtResponse步骤,该步骤接收我的应用程序的输出并检查收到的消息中的值。测试包括以下步骤:

  1. 加载输入和预期输出的数据源步骤(多个方案)
  2. JMS步骤,将输入发送到特定接口上的应用程序。
  3. SOAP步骤以在另一个接口上接收应用程序输出(无验证)。
  4. 用于检查结果的Groovy脚本(例如,没有收到消息或收到带有特定值的消息)。请参阅下面的脚本,无法让它在列表项之间工作。
  5. 数据源循环到第2步。
  6. 有一种情况(好的,还有更多场景),输入不应该生成输出。我想检查我的应用程序是否在这种情况下没有发送输出。

    策略1: 我添加了第四个groovy步骤,我在其中验证步骤3的结果是一个空字符串。为了使测试通过,我必须禁用TestCase Options中的复选框,其中显示“Error TestCase on Error”。这适用于快乐执行测试的情况。但是,如果确实发生了错误(例如,应用程序确实发送了响应,或者应用程序发送了错误的响应),则整个TestCase设置为通过(因为复选框)并且只有特定步骤深入到日志失败。这使得很难看到整个测试套件的结果。

    尝试策略2: 通过添加条件测试步骤开始,该步骤将基于输入跳过步骤3。然而,这样我就不再验证我的应用程序是否在不应该发送消息时发送消息。

    检查这些场景的最佳方法是什么?

    编辑:

    如果数据源中的某个方案失败,则整个测试用例应该失败。 (如果这意味着某些方案尚未评估,那么这不是问题)

    Groovy脚本:

    // Get flag from datasource that indicates if a message should be received
    def soapBerichtOntvangen = context.expand('${DataSourceUISBerichten#SoapBerichtOntvangen}' );
    // Get the message from the previous step.
    def receivedSoapRequest = context.expand( '${SOAPVirtResponse#Request#declare namespace out=\'http://application/messageprocessing/outbound/out:SendOutboundMessage[1]/Message[1]}' )
    // If we don't expect a message the flag is set to "N"
    if(soapBerichtOntvangen=="N"){
        assert(receivedSoapRequest=="")
    } else if(receivedSoapRequest!=null && receivedSoapRequest!=""){
        def slurpedMessage = new XmlSlurper().parseText(receivedSoapRequest)
        def messageType=slurpedMessage.MessageHeader.MessageReference.MessageType
        // Get expected values from context
        def verwachtMessageType = context.expand('${DataSourceOutboundCIBerichten#messageType}' )
        assert(String.valueOf(messageType)==verwachtMessageType)
    } else {
        // Should have received a message, but none came up.
        assert(false)
    }
    

0 个答案:

没有答案