0
点赞
收藏
分享

微信扫一扫

开发一个用于测试的SOAP Web服务

1.1  开发一个用于测试的SOAP Web服务

SoapUI通常用于改进已经至少部分开发的Web服务的测试。遵循测试优先(test-first)测试驱动开发(TDD)方法要求我们首先设置失败的测试用例,然后提供一个服务实现通过这些失败的测试用例。

1.1.1  准备阶段

需要从上个章节中穿点的SoapUI 项目(<chapter1samples>/soap/invoicev1_impl),使用java代码实现web服务实现代码在:<chapter1 samples>/soap/invoicev1_impl。可看到项目:

<chapter1samples>/invoice-soap-v1-soapuiproject.xml。

       Tip:使用Eclipse项目创建一个轻量级的测试、边际、编译以及循环运行都是很容易的。首先,导入实例代码,作为一个标准的java应用程序运行。

1.1.2  创建步骤

首先,创建一组简单的失败的测试去查看getInvoice操作返回预期的结果,然后提供一些基础的实现来通过这些失败的测试。

其次,为了createInvoice操作的实现更新invoice的WSDL定义,创建失败的测试用例,最后提供基本的编码来通过这些测试用例。执行步骤如下:

1.      创建SoapUI项目,生成初始化PortBinding、Test Suite、TestCase、Test Request TestStepm,右击工作空间(workspace)选择创建SOAP项目(New SOAP Project)。在当前窗口,输入如下信息,然后点击OK:

n  项目名称:InvoiceService

n  初始化WSDL: \SoapUIcook\chapter1\soap\invoicev1_impl\wsdl

n  保留“创建请求”勾选,并勾选创建测试集(CreateTestSuite)

开发一个用于测试的SOAP Web服务_测试用例

2.      在“生成测试集(Generate TestSuite)”窗口,勾选如下选项然后点击OK:

开发一个用于测试的SOAP Web服务_测试的SOAP Web服务_02

l  风格勾选“一个测试用例对应一个操作”

l  请求内容使用“接口已经存在的请求”

3.      使用建议的测试集名称“InvoicePortBinding TestSuite”。所有测试期望的SoapUI测试框架现在在项目中都已经生成!

4.     现在,写一个简单的失败测试用例来判断一个成功的getInvoice请求返回的内容与预期一致。在第一个TestStep选项中,双击getInvoice你将看到一个如下的SOAP请求:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:inv="http://soapui.cookbook.samples/schema/invoice">

<soapenv:Header/>

<soapenv:Body>

<inv:getInvoice>

<inv:invoiceNo>?</inv:invoiceNo>

</inv:getInvoice>

</soapenv:Body>

</soapenv:Envelope>



5.      把上述SOAP请求中invoiceNo(?)值改为一个更容易记忆的值,如:12345

6.      启动在之前生成的invoice服务stub

开发一个用于测试的SOAP Web服务_xml_03

让后点击绿色箭头表示提交请求,如下图所示

开发一个用于测试的SOAP Web服务_测试用例_04

可以看到一个stubbed响应,响应信息如下编码:

开发一个用于测试的SOAP Web服务_xml_05

7.      给预期的指定期望的invoice属性值设置SoapUI断言,例如如下的属性值:invoceNo=12345、company=Test Company、amount=100.0

由于处理的士SOAP XML文件,因此在这里给这些响应中的值使用xpath断言。SoapUI Pro用户可以使用xpath构建,很容易实现,操作步骤如下:

开发一个用于测试的SOAP Web服务_xml_06

如果是开源免费的用户,需要自己写,或者复制提供的详细信息。根据xpath实例,这里做下解释说明:

Ø  declare namespacens1='http://soapui.cookbook.samples/schema/invoice';

Ø  //ns1:InvoiceDocument[1]/ns1:amount[1]

使用declare namespace声明命名空间为ns1,编写xpath://ns1:InvoiceDocument[1]/ns1:amount[1]

开发一个用于测试的SOAP Web服务_测试用例_07

TIPS:

XPATHHELP: 即使是Pro版本的XPath构建器,如果不能直接检索构建的响应XML,也就是根本没有服务时,它的用处就会减少。以这个作为工作背景,可以通过Add Step|SOAP Mock Respone测试步骤生成一个简单的响应XML到测试用例中,这时复制响应XML到一个有用的XPATH工具中,来编写XPATH表达式,这些工具例如:

         免费的:​​https://www.freeformatter.com/xpath-tester.html​​,  付费的工具,例如XML Spy这些领域也有一些帮助。也可以学习一些xpath语法规则自己编写xpath,xpath链接如下:

​​http://www.w3schools.com/XPath/xpath_syntax.asp​​。

TIPS:

服务超时:如果看到请求返回一个拒绝错误(refuse error),这时检查服务是否离开(服务器默认是5分钟),这很容易改变超时计数值。可以通过添加一个基本的服务实现,来通过这个测试。需要实现InvoicePortImpl.java中的getInvoice()方法。这个简单的实现选项仅仅是重新编辑InvoicePortImpl.java,添加如下所示的核心代码:

开发一个用于测试的SOAP Web服务_使用web服务stub进行测试_08

TIPS:

TDD(测试数据驱动):严格来说,在实现方法之前,需要写一个单元测试,例如,使用Junit。然后重新编译、重新启动服务。

开发一个用于测试的SOAP Web服务_使用SoapUI进行测试_09

重新运行测试,测试执行通过!

1.1.3  怎么使用

本部分建立在与上一部门相同的JAX-WS服务代码解释上。添加一个简单的stub实现,该实现返回最少的必要信息,以至于该stub通过测试!对于那些以前没有见过JAX-WS的人来说,使用javax.xml.ws.Holder包装器对象意味着不必显式设置invoiceNo,因为它是通过请求传递的。(详细信息,可以看:​​http://tomee.apache.org/examples-trunk/webservice-holder/README.html​​)

         在上一部分提及的SoapUImocks,它能提供一个简便、快速的替代,如果是需要对带有基本功能实现的web服务执行一次性测试版本。然而,如果想web服务stub作为持续开发的基础,这时可能需要考虑使用一个构建框架,如Gradle或者Maven去管理构建、部署、测试周期。在“自动化和脚本章节”,在web服务构建并部署完成后,可以看到使用构建框架和脚本来运行SoapUI测试(mocks)的不同之处。如果stub实现变得越来越复杂,你可能想要单元测试。

         在下一部分,将告诉你如何使用SoapUI来帮助用户更新项目、测试、服务到新添加的createInvoice操作函数。

 n  Gradle更多信息:​​https://www.gradle.org/​​

 n  Maven更多信息:​​http://maven.apache.org/​​

 n  JUnit更多信息:​​http://junit.org/​​


举报

相关推荐

0 条评论