0

我可以先说我是编程和 SoapUI 的新手(更像是一周前)。对于提出我将要提出的问题,我提前道歉。

问题

基本上,我正在尝试自动化 web 服务。我需要在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
    }
  }
}

概括

一个用 2 个方法调用的类XmlGenerator()GetXML()(用于生成 XML )和postXML()(用于将生成的 XML 发送GetXML()到 Webservice。)

问题

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

  2. 如何创建 xml 并在后续请求消息中运行请求。例如; 我这样做吗?XmlGenerator() gen = new XmlGenerator(), 然后做gen.GetXML()andgen.postXML()来创建和运行请求。另外,testRunner 在这一切中可以扮演什么角色

  3. HTTPBuilder, ContentType , Method can not be resolved即使我已在脚本中导入它们,运行代码当前也会抛出(见上文)

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

4

1 回答 1

3

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

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

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

  1. 新的 REST 服务
  2. 新的 REST 资源
  3. 新的 REST 方法

然后,您可以向调用该请求的测试用例添加 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

于 2013-04-27T22:42:22.110 回答