SoapUI使用说明.docx

上传人:b****5 文档编号:7813721 上传时间:2023-01-26 格式:DOCX 页数:31 大小:481.59KB
下载 相关 举报
SoapUI使用说明.docx_第1页
第1页 / 共31页
SoapUI使用说明.docx_第2页
第2页 / 共31页
SoapUI使用说明.docx_第3页
第3页 / 共31页
SoapUI使用说明.docx_第4页
第4页 / 共31页
SoapUI使用说明.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

SoapUI使用说明.docx

《SoapUI使用说明.docx》由会员分享,可在线阅读,更多相关《SoapUI使用说明.docx(31页珍藏版)》请在冰豆网上搜索。

SoapUI使用说明.docx

SoapUI使用说明

一soapUI基本概念

由于Web服务是被程序调用的,一般不会提供界面让最终用户或测试人员直接使用,soapUI是针对这种情况开发的一个工具,用户可以在soapUI中通过简单的操作完成复杂的测试。

目前我们系统中电子渠道接口、充值卡接口都是用WebService实现的,因此需要用到SoapUI进行测试。

SoapUI不仅可以简单地执行测试,而且可以自动运行已经准备好的测试用例,另外它也有性能测试的功能,虽然不及Loadrunner强大,但相对比较简单易用。

下文中主要介绍它的基本功能,不包括性能测试的部分。

  在创建测试用例之前,我们先来看一看在soapUI中的基本概念,soapUI把REST服务、资源及其操作组织为一个层次结构。

如图1所示,主要包括如下层次:

  ●项目定义:

位于最上层(BookStoreTest),项目可以包含多个服务的定义。

  ●REST服务定义:

服务其实是对多个REST资源的一个分组,在我们的例子中只有一个服务BookStoreServie

  ●REST资源定义:

具体描述该资源的名称,URI,参数等属性

  ●REST方法定义:

针对每个资源的方法(GET,POST,PUT,DELETE等),图1中的方法名就是GetBookList

  ●REST操作请求定义:

基于每个方法,可以有一个或多个请求操作,如GetBookListRequest,这些请求操作才是真正被soapUI所调用执行的。

每个请求可以设置非常丰富的信息,例如Accept类型,请求的Header信息,运行了该请求以后,就能以各种方式查看运行结果。

但是这里还不能加入断言来验证结果-必须在建立测试用例以后才能使用。

  对于测试用例来讲,同样是一个层次结构:

  ●TestSuite:

类似于Junit中的测试套件,其中可以加入多个TestCase

  ●TestCase:

可以包含多个TestStep

  ●TestStep:

一个TestCase可以包含多个TestStep,TestStep有多种类型,它可以是上面提到一个REST操作请求,也可以是一个Groovy的脚本,还可以试一个设置属性的操作。

TestStep甚至支持分支跳转操作:

根据特定的条件,从一个step可以跳转到其他step,而不必顺序执行。

  soapUI实际上是一个平台,它支持强大的编程能力,开发或者测试人员可以利用groovy脚本来访问soapUI中的对象,在运行时修改RESTrequest/response,这就提供了极大的灵活性。

二怎样用soapUI测试Webservice接口

安装过程比较简单,大家从ftp:

//180.200.3.233/SoapUI/上下载安装程序安装就可以了。

先从创建项目开始,菜单——文件——创建项目:

说明:

Createsamplerequestsforalloperations?

为每个接口创建一个请求的例子

CreatesaTestSuitefortheimportedWSDLorWADL:

为WSDL或WADL创建一个测试包

CreateaWebServiceSimulationoftheimportedWSDL:

为WSDL创建一个模拟的服务端

InitialWSDL/WADL:

指定一个WSDL/WADL的路径,可以是本地或网络URL。

这里我们填写232的充值卡接口路径:

http:

//180.200.3.232:

8080/interf/services/ServiceForRMP?

wsdl

然后点击[OK]到下一步生成初始的测试用例:

说明:

OneTestCaseforeachOperation:

每个接口创建一个用例

SingleTestCasewithoneRequestforeachOperation:

创建一个用例包含每个接口对应的请求

UseexistingRequestsinInterface:

使用已有的请求

Createnewemptyrequests:

创建一个空的请求

GeneratesadefaultLoadTestforeachcreatedTeseCase:

每个用例生成一个负责测试

确定后进入下一步,生成MockService。

Path是生成的本地服务路径,Port是端口。

StartstheMockServiceimmediately选项可选可不选。

完成之后会在左边的树形结构中生成3部分:

1ServiceForRMPSoapBinding服务的集合

创建项目的时候我们选择了Createsamplerequestsforalloperations,所以每个接口都会自动创建一个请求,双击它就可以打开编辑面板,左边是请求内容,右边是响应内容。

把每个节点的“?

”替换成需要的内容,点击绿色的箭头发送就可以了。

右边的内容就是服务器返回的结果,同时可以看到系统后台有相同的日志显示。

发送后返回的内容:

2ServiceForRMPSoapBindingTestSuite测试用例的集合

TestSuite是测试用例的集合,且里面每个测试用例包含测试步骤和负载测试。

负载测试可以测试响应时间,统计测试结果。

这里不讨论。

在创建时已经自动给每个接口生成了一个发送请求的测试步骤,如图,同样,初始的节点内容是“?

”,要修改。

除了这个步骤,还可以加入其它步骤,它提供了几种用例步骤,包括:

简单说明一下其中几种步骤:

TestRequest:

发送一个soap请求

GroovyScript:

用Groovy脚本定义的步骤。

Groovy是一种脚本语言,语法跟java类似。

Properties:

定义变量/属性

PropertyTransfer:

传值。

可以把指定的属性的值传给另一个属性,也可以给请求中节点赋值。

ConditionalGoto:

跳转,符合一定条件就跳到第N步

Delay:

延迟,可以调整用例执行时间,模拟人工思考时间。

RunTestCase:

在用例中执行另一个用例。

下面举一个简单的例子来说明:

(这个用例包含9个步骤,但只看这前3个)

用例中第一步:

Properties

(2)。

这里定义了两个变量,CAID和SerialNo。

第二步:

PropertyTransfer,把上面定义的变量值传给下一步的recharge请求的相应节点。

图中所示的是设置PropertyTransfer的面板。

上面是值的来源,选择上一步定义的变量,下面是目标,选择下一步的recharge请求,property属性为Request。

因为整段请求XML是作为一个属性保存在这个步骤的。

下面的空白框要指明传给哪个节点,这里默认用的是Xpath语言。

Xpath是一种对XML格式文档操作的语言,功能很多,大家可以自行研究。

这里的“//customerId”意思是在全文中寻找这个名称的节点。

这样就可以把CAID传到充值请求中的customerId字段,设置好之后可以点击上方的绿色箭头(第一个)执行这个步骤,然后可以看到下一步的recharge请求中对应字段已经改变。

第三步:

recharge。

这一步是发送请求。

这里要说明是添加断言,也就是检查点。

如图所示,这个步骤包含2个检查点。

点击下面的Assertions或上方的

按钮可以添加断言。

soapUI定义了多种断言类型:

简单说明其中几种:

NotSOAPFault:

不是“失败响应”。

SOAPResponse:

是一个SOAP响应。

Contains:

响应内容包含的文本。

XPathMatch:

指定XML节点的内容。

SOAPFault:

是一个“失败响应”。

NotContains:

响应内容不包括哪些文本。

例子中用了Contains和XPathMatch。

Contains比较简单,只要指定包含的文本内容即可,介绍一下XPathMatch:

这里上面的部分指明了要检查哪个节点,//multiRef[@id]的意思是:

在全文中寻找名称为multiRef,并且有一个属性名称是id的节点。

这个节点是返回结果编码。

下面的“0”是这个节点的期望值。

0表示充值成功。

运行用例

先设置一下运行属性。

右键点击一个用例——options:

AbortonError选项,发生错误时终止运行,如果不希望这样,就取消它。

FailTestCaseonError选项,发生错误时把用例fail。

大家运行时可以按需要来决定。

然后可以运行用例。

双击TestSuite会弹出运行面板。

这里列出了TestSuite里面的全部用例,点击绿色箭头就会顺序执行。

点击下面的[TestSuiteLog]按钮可以查看执行日志,可以看到每一步骤的执行情况。

如下图。

这样我们就可以对Webservice接口进行简单的自动化测试。

3ServiceForRMPSoapBindingMockService设置虚拟的服务端

这部分是设置虚拟的服务端,它会在本机启动一个虚拟的服务,返回指定的响应内容。

当服务端还没开发完,或者条件不允许与其他系统一起调试时,这个功能便于在开发完成前就可以把测试用例准备好。

下图所示,recharge接口下面建了3个response。

右键单击对应的接口,新建一个response。

右边的内容是自动生成的,只要节点的“?

”替换成实际需要的内容即可。

也可以创建一个“失败响应”,点击这个按钮

,就会生成一个默认格式的失败响应,与实际系统返回的格式不一样,我们把已有的失败响应内容复制上去即可。

内容填写好之后,可以把响应与请求关联起来。

点击

,选择一个已有请求或新建一个,如下图。

然后启动MockService,运行一下请求,就会返回刚刚设置的response。

但要注意,要把请求响应的服务地址改为本机的虚拟地址,如下图

要选择图中的灰色的那个,前面部分是本机名称。

启动MockService:

右键单击ServiceForRMPSoapBindingMockService,选择restart即可,会看到

这个绿色的小图标在闪,表示正在运行。

三使用变量

  soapUI支持使用自定义变量(Property)在Project中存储和共享数据。

Property是一个命名的字符串可以被GroovyScript,PropertyTransfer或者Property-Expansion引用,目前所有的变量均被处理为字符串。

soapUI允许在项目的各个层次中定义变量,常用的层次包括:

Project,TestSuite,TestCase,Global等。

  1.使用Property编辑器定义变量。

  用户可以使用soapUI自带的PropertyEditor定义各个层次的变量。

以Project变量为例,点击BookStoreTest,在Properties面板中添加自定义变量,如下图所示:

图5.使用Property编辑器定义项目变量

  2.使用命令行指定变量。

  修改soapUI.bat文件中的Java参数如下:

  清单x.使用命令行指定变量

setJAVA_OPTS=%JAVA_OPTS%-Xms128m-Xmx256m-Dsoapui.properties=properties.txt

  其中,properties.txt为指定的全局变量文件名字,可以通过添加如下代码到全局变量文件来设置project/testsuite/testcase等层次的变量:

  清单x.使用命令行指定变量

soapui.properties.=pathtopropertiesfile

  为相应对象的名字。

  3.使用变量

  soapUI使用如下语法引用项目中定义的变量:

  清单x.使用命令行指定变量

${[scope]propertyName[#xpath-expression]}

  其中,scope可以为#Project#,#TestSuite#,#TestCase#,#Global#,#System#,#MockService#,#Env#,[TestStepname]#。

四验证结果

  测试用例建好之后,需要向测试用例中添加Assertions以便验证结果的正确性。

soapUI支持ResponseSLA,ScriptAssertion,Contains,XQueryMatch,SchemaCompliance,XPathMatch以及NotContains等多种断言来对response进行判断来保证对Web服务高质量的测试。

本文以XPathMatch和ScriptAssertion为例来对在线书店服务返回的XML和JSON格式的response进行判断。

  1.使用XPathMatch测试请求GetBookListRequest_XML返回的结果中,id为1234的book的price为29.0,response参见代码清单2。

  点击TestCase的添加Assertions按钮,如图4所示。

在弹出的SelectAssertion窗口中选择XPathMatch断言,点击OK。

配置XPath如下图所示:

图6.使用XPATH测试XML格式的书籍列表

  在XPathExpression面板中书写用于匹配Response的XPath表达式,ExpectedResult面板中填写期望的值。

soapUI将使用XPathExpression面板中填写的XPath表达式与Service调用结果匹配,将匹配结果与期望值比较,如果相同则测试通过,否则失败。

  2.使用ScriptAssertion测试请求GetBookListRequest_JSON返回的结果,response参见代码清单1。

  Assertion添加过程与XPathMatch类似,在SelectAssertion窗口中选择ScriptAssertion,并在之后弹出的ScriptAssertion窗口中书写如下代码:

  清单5.使用ScriptAssertion测试JSON格式的书籍列表

 //asserttheresponseheader

assertmessageExchange.responseHeaders["Content-Type"]=="application/json;charset=UTF-8";

assertmessageExchange.responseHeaders["Cache-Control"]=="no-cache";

 //asserttherepsonsebody

 defbooksRoot=net.sf.json.JSONSerializer.toJSON(messageExchange.responseContent);

 defbooks=booksRoot.get("books");

 //assertbookdetail

 assertbooks[0].get("book").get("id")=="1234";

 assertbooks[0].get("book").get("name")=="book1";

 assertbooks[0].get("book").get("price")==29;

3.使用Property测试请求GetBookRequest_JSON返回的结果,response参见代码清单3。

  在ScriptAssertion窗口中写入如下代码:

  清单6.使用Property测试JSON格式的书籍详情

 //getproperty

 defexpectedID=context.expand('${#Project#book.id}');

 defexpectedName= context.expand('${#Project#book.name}');

 //asserttheresponseheader

 assertmessageExchange.responseHeaders["Cache-Control"]=="no-cache";

 //asserttheresponsebody

 defbookRoot=net.sf.json.JSONSerializer.toJSON(messageExchange.responseContent);

 assertbookRoot.get("id")==expectedID;

 assertbookRoot.get("name")==expectedName;

 assertbookRoot.get("price")==29.0;

  上述使用GroovyScript对Service调用结果进行验证,可用的soapUI对象包括:

messageExchange,context以及log。

  ●messageExchange:

当前交互request/response的MessageExchange,可以用来直接访问messagecontent,HTTPHeaders,Attachment等对象。

  ●context:

运行当前TestCase的TestRunContext对象,具体使用方式请参见soapUIAPI文档。

  ●log:

一个标准的Log4jLogger对象,可以用来输出日志。

  依照上述步骤定义好TestCase并添加适当的断言之后,就可以对在线书店REST服务进行测试。

双击BookStoreSerive_TestSuite,点击Run按钮来运行所有的TestCase,结果如下图所示:

图7.运行测试用例

五性能测试

  性能测试在soapUI中称为LoadTest,针对一个soapUI的TestCase,可以建立一个或多个LoadTest,这些LoadTest会自动的把TestCase中的所有步骤都添加到其中,在运行的时候,soapUI会自动的使用多个线程来运行这些TestStep,同时也会监控它们的运行时间,例如最短时间,最长时间,平均时间等等。

这样用户能够很直观的看到REST服务的响应时间,从而对性能进行调优。

  建立LoadTest非常简单,只需要在“LoadTests”上点击右键,选择"NewLoadTest",然后输入名称即可,下图是一个针对GetBookList的性能测试,可以看到有两个TestStep:

"GetBookList_xml"和"GetBookList_json",100个线程并发执行,时间限制是60秒。

最后的结果是,最短时间4毫秒,最长时间1204毫秒,平均时间20.54毫秒。

图8.性能测试

  性能测试还支持断言,用户可以对一个TestStep或TestCase设置运行时间要求,例如平均时间大于2秒就认为失败,点击图8中中的“LoadTestAssertions”就可以设置。

当然根据需要,用户也可以编写脚本来做一些准备工作,或者清除工作。

参见图8中的"SetupScript"和“TearDownScript”。

六与BuildForge集成

  测试可以有效的保证代码的质量,但是仅仅手工的、在本机上运行的REST服务测试时远远不够的。

实际上把测试作为软件构建的一部分,加入到持续集成中去是一个常见的敏捷开发实践,通过频繁的,自动化的测试,可以更有效的发现缺陷,保证代码质量。

  IBMRationalBuildForge是一个管理软件构建和发布的平台,它提供了一个框架来自动化整个构建流程,不仅仅自动化单独的任务,可以集成多种用户现有的脚本和工具,最大限度的保护用户投资。

作为一个框架,BuildForge几乎可以调用操作系统上的任何脚本。

本文重点不在介绍BuildForge,假定读者对BuildForge已经比较熟悉,不熟悉的读者可以查看参考资料中的相关文章。

  对于soapUI来说,最简单的一种集成方式就是提供命令行脚本让BuildForge调用。

在上文中我们已经展示了通过soapUI的GUI运行TestCase的功能,那么soapUI可不可以通过命令行完成类似的功能呢?

答案是肯定的。

  soapUI提供了一个命令行工具testrunner.bat来运行一个项目中的TestSuite,可以在/bin下找到它,它的使用非常简单,只需要设置下面的几个常用参数即可:

  -s指定要运行的TestSuite

  -f指定运行结果的输出目录

  -j生成junit风格的report

  -r运行完成以后打印一个简单的summary

  下面这行命令就是运行bookstore.xml这个soapUI项目中的BookstoreTestSuite,把结果输出到c:

\temp\reports中。

  testrunner.bat-sBookstoreTestSuite-r-jC:

\developerWorks\soapui\bookstore.xml-fc:

\temp\reports

  有了testrunner,把soapUI的测试集成到BuildForge中就很简单了,只需要在BuildForge的项目中添加一个步骤,参见下图:

图9.BuildForge中使用testrunner

七关于SoapUI的sample示例文件

1SoapUI的安装与启动

安装完SoapUI,我安装的目录是D盘,版本是3.6,则在D盘下会生成D:

\soapUI-Pro-3.6-beta1这个目录,进入D:

\soapUI-Pro-3.6-beta1\bin这个文件夹,双击soapUI-Pro-3.6-beta1,则启动了SoapUI软件。

2导入SoapUI示例的文件

在打开的SoapUI界面中,在Project上右键ImportProject导入文件的目录是:

D:

\soapUI-Pro-3.6-beta1\Tutorials\目录下的sample-soapui-pro-project.xml文件,这时工程里的界面如下图:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 教育学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1