更新一个SOAP项目的WSDL经常导致测试节点(endpoints)、请求、响应、且/或者操作函数的变化。例如上部分提到的一个简单的例子,那不是个大的问题。对于根据复杂WSDL的改变将设计更多的测试,SoapUI Pro有一个很好的图形编辑器帮助管理一步一步的迁移。
SoapUIWSDL重构能帮助管理如下:
n 添加、移除、或重命名操作
n 添加、移除、或重命名请求/响应的域
n XPath断言结果更新
新的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上方来解决这个问题,最终得到如下图所示的结果:
3. 在“Refactor Schema”窗口点击“Next”。使用和此处类似的方法更正getInvoice请求:
点击“Disconnect”,然后在”New Schema”中点击“retrieveInvoice”,点击“connect”:
4. 这是点击红色标注的“createInvoice”操作。映射invoiceNo为id,但是company没有隐射(由于要移除它),给“company”高亮,然后点击“Discard”。操作截图如下:
进行“Discard”后截图:
5. 点击“Next”进入“Update XPath Expressions”窗口,勾选“Filterunchanged paths”选项只显示有问题的部分。我们不能处理XPath关联的companyName,仅仅处理invoiceNo的XPath断言InvoiceNoShouldBe12345,操作方法是:复制old Schema值到new xpath输入框中,然后改变invoiceNo为id,然后点击完成。如下截图所示:
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,启动该实例服务就可以!
重构工具明显没有给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重构功能的一次传递中唯一可以涵盖的模式.
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。