第一章 使用SOAPUI测试和开发Web Services Stubs

article/2025/9/24 15:16:39

Stub(桩件)的作用是:如果一个接口有很多方法,如果要实现这个接口,就要实现所有的方法。但是一个类从业务来说,可能只需要其中一两个方法。如果直接去实现这个接口,除了实现所需的方法,还要实现其他所有的无关方法。而如果通过继承存根类就实现接口,就免去了这种麻烦。对stub应答的设定是为了通过测试。 stubs只检查的是状态(state)。

本章内容:

使用SoapUI工具生成一个WSDL优先的web 服务

在测试前,开发一个SOAP web服务

使用一个WSDL更新一个SOAP项目

使用WSDL 重构更新一个SOAP项目

测试前,生成并开发一个RESTful webservice stub(桩件)

使用REST discovery生成SoapUI测试

1.1  简介

Web Service Stubs一般是在项目早期阶段就被开发,Stubs目的是:当整个web服务被实现时,给客服端提供有限的功能。该章节将告诉,使用SoapUI怎么帮助你快速测试和开发简单的Java REST和SOAP web服务Stubs、以及如何通过录制web服务的交互过程生成测试?使用JAVA编写的Web Service Stub能使用Java成功执行。

除了对基本的SoapUI测试提供快速的热身之外,服务接口和实现示例将在本书后面被重用作更高级主题的基础。

在本章你能学到什么,大致的内容如下:

1.     怎么使用SoapUI的WSDL帮助你测试、更新、重构、开发一个简单的SOAP Web 服务的Stub。

2.     怎么使用SoapUI帮助你测试、开发一个简单的RESTWeb服务的Stub

3.     怎么使用SoapUI的发现(discovery)功能生产测试

4.     使用Apache CXF生成、实现并运行基础的JAX-RS和JAX-WS Web服务Stubs

在学习前,你需要部署环境,你需要如下软件:

Ø  JDK:编译运行代码(1.6以上)

Ø  Apach CXF:用于构建、运行(有时),REST和SOAP Web服务

Ø  IDE(可选):使用一个IDE,例如Eclipse,能更容易的发现、编译、执行实例代码

本文开始,不包括SoapUI的安装、启动、SoapUI概述,直接从如何建立基础的SoapUI REST和SOAP 项目、测试、断言(assertion)开始。如果想从起步开始,可以看:http://www.soapui.org

1.2  使用SoapUI工具生成一个WSDL优先的Web服务

本部分将展示,怎么把Apache CXF集成到SoapUI工具上生成一个可运行的空Java Web服务,该服务是使用它的WSDL实现的。这可能是有用,如果需要一个快速的菜单驱动方法去创建一个Soap Web服务,该Web服务能独立被实现和部署到SoapUI上。

1.2.1准备开始

         该WSDL被用于定义一个简单的invoice WEB 服务。它只有一个函数(operation)去引用一个基本的invoice文档,该操作的参数invoice数量:

l  Operation:getInvoice 

l  Request:invoiceNo : string

l Response:InvoiceDocument(invoiceNo : string, company : string, amount: string)

l  Location: http://localhost:9001/ws/invoice/v1

该WSDL可以在本章代码块中:soap/invoicev1/wsdl/invoice_v1.wsdl。在这之前需要把Apache CXFWeb服务框架集成到SoapUI工具生成Web服务Stub。下载最新版本的下载链接:http://cxf.apache.org/download.html(我使用3.2.1版本)。版本3.01需要JDK1.7。

1.2.2 创建步骤

         首先,配置SoapUI能够生产并构建invoice的web服务。这时,作为一个标准的Java运行该服务。执行的步骤如下:

1.        启动并打开SoapUI,选择ToolsàApache CXF,点击右下角的Tools,进入SoapUI Preferences窗口:


这时在CXF 2.X中选择下载的Apache CXF的bin目录:

2.        在如下界面:

输入如下信息:

WSDL:<chapter1 samples>/soap/invoicev1/wsdl/invoice_v1.wsdl,如果这已经填了,在CustomArgs中的Tool Args中就不需要填写,不让回报错!

l  Output directory:生成代码存放的位置。例如: <chapter1 samples>/soap/invoicev1/src/main/java

l  Package:生成源代码的包名,例如:ws.invoice.v1

Artifact Options:只选择ServerImplementation。对于,client与build.xml 也是可用的。我们使用SoapUI作为客户端且不需要Ant

3.        为了自动编译生成的服务代码,在Advanced的Tab下:

进行如下操作:

l  选择Compile

l  提供一个ClassFolder值,作为存放结果Java类文件的存放目录,例如:<chapter1 samples>/soap/invoicev1/target/classes

l  选中“ValidateWSDL(可选)”检查WSDL文件(在高级Tab下检查结构和使用基础WS-I编译检查WSDL)。Invoice_v1.wsdl不应该输出任何东西。

 

4.        在Custom Args Tab下,把WSDL所在位置输入在Tool Args中。这告诉web服务在运行时从哪里找到WSDL文件。设置像invoice_v1.wsdl的值是被期望作为classes的根目录。

PS:如果在Basic Tab下的WSDL路径已经填写了,这里就不需要填写,如果填写了,会报错误“WSDLToJava Error”:

5.        点击”Genrate”按钮。如果执行成功,输出类似如下的结果:

 

      可以在输出文件路径下,看到成的Java源码文件,输出文件路径例如:<chapter1 samples>/soap/invoicev1/src/main/java/ws/invoice/v1/。在class目录下关联class文件:<chapter1samples>/soap/invoicev1/target/classes/ws/invoice/v1/。

         注意:MAC/LinuxIssue:如果出现一个像“./wsdl2java.sh: No such file or directory”的错误,这时解决办法是:打开<Apache CXF Home>/bin/wsdl2java.sh,然后复制wsdl2java内容到wsdl2java.sh;命令是:cp wsdl2java wsdl2java.sh

6.        在运行服务之前,需要复制invoice_v1.wsdl文件到生成的类目录下,例如类目录为:<chapter1 samples>/soap/invoicev1/target/classes。否则,当运行服务时,将看到一个类似“[failed toocalize]cannot.load.wsdl(invoice_v1.wsdl)”的错误。

PS:由于wsdl需要访问http://soapui.cookbook.example,这个来获取targetNamespace以及SOAPOperation等,本网站无法访问,造成提示上述问题,以至于下面的服务启动提示该问题!!!!

7.        最后,启动服务。执行命令:

cd <chapter1samples>/soap/invoicev1/target/classes

javaws.invoice.v1.InvoicePortType_InvoicePort_Server

       为了确认服务是否启动成功,打开浏览器,在浏览器输入:http://localhost:9001/ws/invoice/v1?wsdl,这时候如果看到invoice_v1.wsdl正常显示,说明生产的服务已经启动并正常运行。

1.2.3 如何工作

         SoapUI实际上正在为各种Web服务框架构建命令行参数。在上述的例子中,喜欢使用命令的可以直接运行:<Apache CXF Home>/bin/wsdl2java

注意:Apache CXF wsdl2javascript

关于wsdl2java的信息,可以看:http://cxf.apache.org/docs/wsdl-to-java.html, 快速看下生成的源文件。主要包括如下几点:

1.        运行wsdl2java选项生成Java标准的JAX-WS Web服务代码,该代码带有源自WSDL文件的类型和方法。

2.        Java JDK附带一个JAX-WS的实现:

²  不需要任何编译或者运行时依赖的库,例如:Apache CXF库

²  不需要servlet容器来发布web服务,例如Tomcat或者Jetty。如果查看InvoicePortType_InvoicePort_Server.java,可看到服务已经被发布,发布的服务使用的是JDK默认的HTTP服务中的javax.xml.ws.Endpoint类。这个静态的Endpoint.publish(…)方法绑定生成的服务implementation(InvoicePortImpl.java)到endpoint 地址,以至于invoice请求能被getInvoice()方法处理。

²  该服务是非常容易移植的,只需要一个Java JRE就能运行它

²  在运行时需要WSDL文件。wsdlLocation参数被应用于第4步,被设置成InvoicePortImpl.java类中@javax.jws.webService注释的一个属性。

²  服务的Emdpoint和超时(默认值为5分钟)很容易更改。对InvoicePortType_InvoicePort_Server.java进行如下修改:

Endpoint: String address="http://localhost:9001/ws/invoice/v1";

Timeout: Thread.sleep(5 * 60 *1000);

重新编译


http://chatgpt.dhexx.cn/article/q3isginX.shtml

相关文章

单元测试探析:什么是Stubs、Mocks、Spies、Dummies?带你了解4个核心工具

在单元测试中&#xff0c;对象之间的依赖往往交织到一起&#xff0c;需要拆成各个单元才能逐个击破&#xff0c;这也是单元测试的目的。如何将这些交织到一起的对象拆开&#xff0c;需要一些工具&#xff0c;这些工具业内人们称其为“测试替身”。 本文作者介绍了单元测试中的…

分布式CAP 定理

历史 这个定理起源于柏克莱加州大学University of California, Berkeley的计算机科学家埃里克布鲁尔在2000年的分布式计算原则研讨会&#xff08;Symposium on Principles of Distributed Computing&#xff08;PODC&#xff09;&#xff09;上提出的一个猜想。 在2002年&…

简单解释CAP定理

简单解释下分布式系统中的CAP定理: CAP定理: P-分区容错性, C-一致性, A-可用性 (易 ---> 难) CAP如何选择 > 在不同的业务领域中对CAP的选择有所不同; (典型的情况以及选取的规则) CAP的重要性 > CAP是分布式系统设计中最基础也最为关键的理论! (分布式系统不可能同…

CAP定理以及BASE定理详解

CAP 是分布式系统设计理论&#xff0c;BASE 是 CAP 理论中 AP 方案的延伸。 CAP定理 C&#xff1a;Consistency&#xff08;一致性&#xff09;、A: Availability&#xff08;可用性&#xff09;、P: Partition Tolerance&#xff08;分区容错性&#xff09; 一致性&#xf…

架构设计之「 CAP 定理 」

在计算机领域&#xff0c;如果是初入行就算了&#xff0c;如果是多年的老码农还不懂 CAP 定理&#xff0c;那就真的说不过去了。CAP可是每一名技术架构师都必须掌握的基础原则啊。 现在只要是稍微大一点的互联网项目都是采用 分布式 结构了&#xff0c;一个系统可能有多个节点组…

图解 CAP 定理(转载)

文章目录 CAP 定理不一致的产生解决方案保 CP 失 A保 AP 失 C CAP 定理 Consistency 一致性&#xff1a;访问分布式系统中任意节点&#xff0c;总能返回一致的结果 Every read receives the most recent write or an errorAvailability 可用性&#xff1a;分布式系统总能向客户…

分布式系统的CAP定理

目前只要是大型互联网项目都是采用分布式结构&#xff0c;一个系统可能有多个节点组成&#xff0c;每个节点都可能需要维护一份数据。那么如何维护各个节点之间的状态&#xff0c;如何保障各个节点之间数据的同步问题就是大家急需关注的事情了。CAP定理是分布式系统中最基础的原…

CAP 定理的含义

看到一篇很好的关于 CAP 定理的博文&#xff0c;顺便转发一下&#xff0c;by&#xff1a;阮一峰 分布式系统&#xff08;distributed system&#xff09;正变得越来越重要&#xff0c;大型网站几乎都是分布式的。 分布式系统的最大难点&#xff0c;就是各个节点的状态如何同步。…

CAP定理和BASE理论

2000 年的时候&#xff0c;Eric Brewer 教授提出了 CAP 猜想&#xff0c;2年后&#xff0c;被 Seth Gilbert 和 Nancy Lynch 从理论上证明了猜想的可能性&#xff0c;从此&#xff0c;CAP 理论正式在学术上成为了分布式计算领域的公认定理。并深深的影响了分布式计算的发展。 …

分布式-CAP定理

在分布式学习中&#xff0c;我们经常遇到一个概念便是CAP&#xff0c;它是分布式很重要的理论基础。很多分布式算法也是在不断的在解决相关问题&#xff0c;今天就让我们重新学习或者回顾一下这个知识点吧&#xff0c;加深印象打牢基础。 一、简介 CAP定理&#xff08;CAP theo…

佳文分享:CAP定理

1976年6月4号&#xff0c;周5&#xff0c;在远离音乐会大厅的一个楼上的房间内&#xff0c;在位于Manchester的Lesser Free Trade Hall &#xff0c;Sex Pistols 乐队&#xff08;注&#xff1a;Sex Pistols的经理人Malcolm McLaren 2010.4.8去世&#xff09;开始了他们的第一次…

谈谈对CAP定理的理解

谈谈对CAP定理的理解 CAP定理的常规解释是任何分布式系统只能在一致性(Consitency)&#xff0c;可用性(Availability)和分区容忍性(Partition Tolerance)中三选二。这个解释很让人费解&#xff0c;笔者在看了一些文章后谈谈我对它的理解&#xff0c;还请斧正。 从问题出发 假设…

分布式系统的 CAP 定理

CAP定理指出&#xff0c;在一个分布式系统中&#xff0c;对于一致性、可用性、分区容错这三个特性&#xff0c;不可能同时满足&#xff0c;而是必须有所舍弃。我们设计分布式系统时&#xff0c;必须在三者之间&#xff08;尤其是一致性和可用性之间&#xff09;有所取舍和平衡。…

简述CAP定理

CAP定理示意图&#xff1a; 一.CAP理论概述: CAP定理告诉我们&#xff0c;一个分布式系统不可能同时满足一致性&#xff08;Consistency&#xff09;、可用性&#xff08;Availability&#xff09;和分区容错性&#xff08;Partition tolerance&#xff09;这三个基本需求&…

CAP定理的含义

目录 定理解读 如何抉择 1998年&#xff0c;加州大学的计算机科学家 Eric Brewer 提出了分布式系统的三个指标&#xff1a; C&#xff1a;Consistency&#xff0c;一致性。在分布式系统中的所有数据备份&#xff0c;在同一时刻具有同样的值&#xff0c;所有节点在同一时刻读…

CAP定理是什么?

写在前面 本文隶属于专栏《100个问题搞定大数据理论体系》&#xff0c;该专栏为笔者原创&#xff0c;引用请注明来源&#xff0c;不足和错误之处请在评论区帮忙指出&#xff0c;谢谢&#xff01; 本专栏目录结构和文献引用请见100个问题搞定大数据理论体系 解答 分布式系统不…

分布式CAP定理,为什么不能同时满足三个特性?

在弄清楚这个问题之前&#xff0c;我们先了解一下什么是分布式的CAP定理。 根据百度百科的定义&#xff0c;CAP定理又称CAP原则&#xff0c;指的是在一个分布式系统中&#xff0c;Consistency&#xff08;一致性&#xff09;、 Availability&#xff08;可用性&#xff09;、P…

AMBA总线理解-AXI总线

AXI的设计目标是可以在高始终频率下运行&#xff0c;并且在迟滞时间长的情况下也可以达到高数据吞吐率。他可以将读/写请求和读/写结果相互分离&#xff0c;将数据写入和数据读出的信号分类&#xff0c;并且可以同时进行写入和读出的动作&#xff0c;因此可以大幅度提升数据吞吐…

Zynq AXI总线

S02_CH12_ AXI_Lite 总线详解 - 米联客 - 博客园 12.1前言 ZYNQ拥有ARMFPGA这个神奇的架构&#xff0c;那么ARM和FPGA究竟是如何进行通信的呢&#xff1f;本章通过剖析AXI总线源码&#xff0c;来一探其中的秘密。 12.2 AXI总线与ZYNQ的关系 AXI&#xff08;Advanced eXtens…

AXI总线协议介绍

AXI总线协议介绍 AXI(Advanced eXtensible Interface)协议是一种面向高性能、高带宽系统设计的总线协议,能够满足各种高速系统的总线协议,能够满足各种高速系统的总线互连。 AXI协议的主要特点有: 独立的地址,控制和数据接口支持使用字节选通的不对齐数据的传输基于特定地…