教你用soapUI测试web服务(一)

五六年前我测试了自己的第一个web服务。该服务是一个更大的系统重写的一部分。在这一阶段,我们用web服务集成了一个遗留主机应用和一个新的web平台。我们在测试办公方面的web服务有若干工具:SoapScope ,一个国产的基于浏览器的测试工具,我们当中还有一些人直接编写Java或Ruby代码进行测试。我还记得,那时候就在想,应该有更容易的测试方式才对。

  那时候项目开展有两个星期了,当时我正在设法获取几个可以测试服务的Ruby库,项目组里面有人向我推荐了soapUI ,那时候soapUI还很年轻——只有基本功能和性能测试能力,且还没有专业版。从我第一次使用soapUI开始,它就成为了我测试服务的缺省选择。

   现在,soapUI除了开源版本以外还有商业的专用版。它们提供了对WS、REST及以HTTP为基础的服务的支持,还有最近宣布的对JMS、AMF及 JDBC的支持。在本文中,我们来看一个对WSDL服务进行功能和性能测试的例子。在将来的文章中我们还将讨论负载测试、web服务模拟以及与JUnit 的集成。对于这些文章中所涉及的例子应用,我们都会考虑Atlassian JIRAsoap web服务。这是一个很好的、非凡的界面,也有一个公开的例子。

  创建第一个项目

  第一次打开soapUI时,不会有工程加载进来。要想创建新工程的话,右键单击Project图标然后选择New soapUI Project,如下图1所示:

图1:在soapUI中创建一个新项目。

图1:在soapUI中创建一个新项目。

  第一步:在soapUI中创建一个新项目

   这会弹出New soapUI Project的对话框,如下图2所示。输入项目的名字及所建项目的初始WSDL地址。如果WSDL变了,你可以在后面导入更新—不要以为拿到最后版本才 能开始。在本例中,我会使用自己的JIRAweb服务实现以便可以执行测试。如果你要跟着做的话,可以将你的项目指向Atlassian的例子,该例子可 在此处找到。

图2: 命名项目并导入初始WSDL。

图2: 命名项目并导入初始WSDL。

  第二步:命名项目并导入初始WSDL

   你会看到几个复选框,让你选择在项目创建过程中由soapUI自动执行的任务。若是想全部都选上,欢迎,不过通常我只会选“为所有的操作创建样例请求 吗?(Create sample requests for all operations?)”这个复选框。一旦完成新项目信息的输入,点击OK按钮。

图3:显示在项目下面的各种JIRA请求,有一个请求窗口在soapUI主工作区打开。

图3:显示在项目下面的各种JIRA请求,有一个请求窗口在soapUI主工作区打开。

  项目加载完成后,你应该看一看所有不同的请求的细节,这些细节均在图3中项目底下的WSDL定义中显示。要想观看这些请求细节,你可以展开请求并双击图中所示的“Request 1”按钮。应该就能打开soapUI主工作区的一个窗口。

  第三步:显示在项目下面的各种JIRA请求,在soapUI主工作区打开一个请求窗口

图4:用绿色箭头提交一项服务请求。

图4:用绿色箭头提交一项服务请求。

  要想手工提交请求给web服务,只需点击请求窗口中的绿色箭头—如图4所示。

  第四步:用绿色箭头将请求提交给服务。
 
  如果你对这个请求—addVersion请求执行上述动作,在没有做出任何改变的情况下,你会得到如下表1所示的包含有例外的响应:

  表 1:例外:未传递合法参数数据。

以下是引用片段:

<faultcode>soapenv:Server.userException</faultcode>
         <faultstring>java.lang.NumberFormatException: Invalid boolean</faultstring>

  这一例外会得到返回,有几个原因。首先,我们还没有登录进去。如果你向下滚动我们项目已有的请求,就会看到有一个登录请求。其次,请求中所有的数据值上面都有问号,正如下面的列表2所示。在提交任何请求之前,你应该想要输入测试值到看到出现有问号的那些字域中去。

  列表2:缺省情况下,请求的值不会弹出。

以下是引用片段:

<in0 xsi:type="xsd:string">?</in0>
         <in1 xsi:type="xsd:string">?</in1>
         <in2 xsi:type="bean:RemoteVersion" xmlns:bean="http://beans.soap.rpc.jira.atlassian.com">
            <id xsi:type="xsd:string">?</id>
            <name xsi:type="xsd:string">?</name>
            <archived xsi:type="xsd:boolean">?</archived>
            <releaseDate xsi:type="xsd:dateTime">?</releaseDate>
            <released xsi:type="xsd:boolean">?</released>
            <sequence xsi:type="xsd:long">?</sequence>
         </in2>

  这时候,你可以浏览任何的请求;查看不同的请求参数;改变请求并人工运行来看那些响应。总而言之,你应该可以浏览web服务并与之交互。

猜你喜欢

转载自xiaoxuejie.iteye.com/blog/1409165