如何将结果从groovy中的方法传递到SOAPUi中的请求主体

时间:2013-01-30 14:55:20

标签: groovy soapui

我可以先说我是编程和SoapUI的新手(更像是一周大了)。我提前道歉,询问我即将问的问题。

问题

基本上,我正在尝试自动化webservice。 我需要在soapui中使用Groovy创建xml,并将其作为请求体的一部分发送到Web服务(REST而不是SOAP),并对收到的响应做一些断言。我将发送相当多的请求,因此自动化的原因。

我建议的解决方案(我不确定)

import groovyx.net.http.HTTPBuilder
import groovyx.net.http.ContentType
import groovyx.net.http.Method

class XmlGenerator {

  // I created a class i.e. called XmlGenerator with a
  // static method called GetXML() which looks like this:
  public static def GetXML() 
  {
    def  writer = new StringWriter()
    def  xml = new MarkupBuilder(writer)
    xml.GetDMessage() //creating the xml message
    {
      PrescribedItems 
      {
        PrescribedMethod(xml,'Some Value','Some Value','Some Value')
        PrescribedItem
        {
          PrescribedMethod(xml,'Some Value','Some Value','Some Value')
        }
      }
    }
    return writer
  }

  // This method creates the XML needed but then i need to
  // pass the xml generated to a request boy; so i
  //create another method within the same class:  
  static def postXML(String baseUrl, String path)
  {
    def RequestBody = XmlGenerator.GetXML()  // i am not sure if this will work
    try 
    {
      def ret = null
      def http = new HTTPBuilder(baseUrl)
      http.request(Method.POST, ContentType.XML) 
      {
        uri.path = path
        body = RequestBody
      }
    }
    catch (groovyx.net.http.HttpResponseException ex) 
    {
      ex.printStackTrace()
      return null
    }
    catch (java.net.ConnectException ex) 
    {
      ex.printStackTrace()
      return null
    }
  }
}

摘要

一个名为XmlGenerator()的类,有两种方法; GetXML()(用于生成XML)和postXML()(用于将GetXML()生成的XML发送到Web服务。)

问题

  1. 如何确保其他请求消息使用这两种方法(GetXML()postXML()),即我是否需要导入groovy scripte.g。我是否导入... GroovyScriptName,如果是,请问如何?

  2. 如何创建创建xml并在后续请求消息中运行请求。例如; 我这样做; XmlGenerator() gen = new XmlGenerator(),然后执行gen.GetXML()gen.postXML()来创建并运行请求。此外,testRunner在所有这些

  3. 中扮演什么角色
  4. 即使我已经在脚本中导入了代码,但运行代码仍然会引发HTTPBuilder, ContentType , Method can not be resolved

  5. 最后,财产在构建此框架方面可以发挥什么作用?请记住,每个请求将独立于其他请求,即在测试执行期间没有任何内容从一个请求传递到另一个请求

1 个答案:

答案 0 :(得分:3)

您可以使用标准soapui功能指定要测试的REST请求,如下所示:

http://www.soapui.org/REST-Testing/getting-started.html

按照上一页中的步骤创建:

  1. 新的REST服务
  2. 新的REST资源
  3. 新的REST方法
  4. 然后,您可以向调用该请求的测试用例添加REST测试步骤。

    然后,您可以在REST测试步骤之前插入Groovy测试步骤来构建xml主体;这是一个构建XML字符串的简单示例:

    import groovy.xml.MarkupBuilder
    
    context.writer = new StringWriter()
    def xml = new MarkupBuilder(context.writer)
    xml.books() {
      book(name:'blue ocean') {
        format ('paperback')
        year ('2010')
      }
      book(name:'quicksilver') {
        format ('hardback')
        year ('2011')
      }
    }
    

    请注意,XML已分配给上下文变量(context.writer)。这使得它可以在测试用例的范围内的后续步骤中用于测试运行期间。

    然后,将以下代码插入REST测试步骤的主体:

    ${=context.writer}
    

    最后,您可以选择在REST测试步骤中添加断言;这里有一些信息:

    http://www.soapui.org/Functional-Testing/getting-started-with-assertions.html