2.2 使用WSDL重构项目更新Soap项目

         更新一个SOAP项目的WSDL经常导致测试节点(endpoints)、请求、响应、且/或者操作函数的变化。例如上部分提到的一个简单的例子,那不是个大的问题。对于根据复杂WSDL的改变将设计更多的测试,SoapUI Pro有一个很好的图形编辑器帮助管理一步一步的迁移。

         SoapUIWSDL重构能帮助管理如下:

 n  添加、移除、或重命名操作

 n  添加、移除、或重命名请求/响应的域

 n  XPath断言结果更新

2.2.1 操作步骤

         新的WSDL可以在:<chapter1samples>/soap/invoicev3/wsdl/invoice_v3.wsdl中发现。为了数目WSDL重构功能,我们将重构invoice_v2.wsdl和之前的测试用例到一个新的WSDL文件involve_v3.wsdl中。将做的改变如下:

n  getInvoice操作将重命名为retrieveInvoice

n  添加新的操作,如:updateInvoice、deleteInvoice

n  invoiceNo域重命名为id

n  新的域dueDate被添加到invoice文档中

n  移除companyName域有利于新的customerRef域

这些改变将导致一个CRUD风格界面,并伴随一些基本schema改变:

1.        首先,打开项目(之前项目:InvoiceSOAPv3),然后在InvoiceServicePortBinding上右击在弹出菜单中选择“重构定义(RefactorDefinition)”。输入新的WSDL(invoice_v3.wsdl),然后勾选“createnew request and a backup”点击下一步(next)。

2.        在“Transfer Operations”窗口,SoapUI正确地映射了createInvoice,并将getInvoice保留为红色,以指示它在新的WSDL中没有映射。通过在New Schema拖动createInvoice到retrieveInvoice上方来解决这个问题,最终得到如下图所示的结果:

2.2 使用WSDL重构项目更新Soap项目_重命名

3.        在“Refactor Schema”窗口点击“Next”。使用和此处类似的方法更正getInvoice请求:

2.2 使用WSDL重构项目更新Soap项目_重命名_02

点击“Disconnect”,然后在”New Schema”中点击“retrieveInvoice”,点击“connect”:

2.2 使用WSDL重构项目更新Soap项目_WSDL_03

4.        这是点击红色标注的“createInvoice”操作。映射invoiceNo为id,但是company没有隐射(由于要移除它),给“company”高亮,然后点击“Discard”。操作截图如下:

2.2 使用WSDL重构项目更新Soap项目_SOAPUI_04

进行“Discard”后截图:

2.2 使用WSDL重构项目更新Soap项目_WSDL_05

5.        点击“Next”进入“Update XPath Expressions”窗口,勾选“Filterunchanged paths”选项只显示有问题的部分。我们不能处理XPath关联的companyName,仅仅处理invoiceNo的XPath断言InvoiceNoShouldBe12345,操作方法是:复制old Schema值到new xpath输入框中,然后改变invoiceNo为id,然后点击完成。如下截图所示:

2.2 使用WSDL重构项目更新Soap项目_SOAPUI_06 

6.        在弹出的“Update Definition”点击YES,设置请求为新的v3的endpoint。这时,你将看到“Update of interface successful”信息。这表明重构完成。

在对重构的SoapUI项目进行检查时,所有的工件看起来都是有序的,有以下例外:

n  测试步骤(TestStep)的endpoints需要手动更新为v3的endpoint

n  在MacOSX系统自动备份失败的IOException。作为解决办法,推荐手动备份SoapUI项目的xml文件

n  Invoice12345ShouldHaveCompanyNameOfTestCompany的断言需要手动删除。

如果想运行所有测试,需要生成v3 invoice服务。需要添加一个最小的实现来满足当前断言。我已经有一个非常基础的实现,在:<chapter1samples>/soap/invoicev3_impl,启动该实例服务就可以!

2.2 使用WSDL重构项目更新Soap项目_WSDL_07

         重构工具明显没有给updateInvoice、deleteInvoice操作进行测试或者给他们创建新的断言。这需要手动添加来确认测试覆盖!在这里不做赘述!可能使用WSDL重构而言,三个传统的SOA模式:

u  Contract Standardization(标准化):​​http://soapatterns.org/design_patterns/contract_denormalization​

u  分解能力(DecomposedCapability):​​http://soapatterns.org/design_patterns/decomposed_capability​

u  服务标准化(ServiceNormalization):​​http://soapatterns.org/design_patterns/service_normalization​

         第一种模式的变化可能是最常见的,就像我们的例子那样,重构一个WSDL。这也是WSDL重构功能的一次传递中唯一可以涵盖的模式.