帝国软件
  设为首页 加入收藏 关于我们
 
解密帝国网站管理系统
栏 目:
 
您的位置:首页 > 技术文档 > JAVA编程
小心进行 J2EE Web Services 的测试
作者:佚名 发布时间:2005-04-02 来源:不详
 
  我们已经了解了很多关
的挑战却知之甚少。本文将
传统测试模式相比Web Serv
及那些对Web Services的技
经很熟悉Web Services的基
于Web Services开发方面的知识
阐述对Web Services功能性和互
ices测试所面临的挑战。本文的
术知识或工作方式没有深入了解
本知识。
,而对于Web Services测试所面临
用性的测试。本文同时也指出了与
目标读者是开发人员、测试人员以
的项目经理。同时本文假设读者已


  下载作者提供的与本文相关的文件                                                

  以下所述及的示例的环
所用操作系统均为Windows
境由WebLogic Server 8.1和Mic
2000。
rosoft Windows .Net构成,二者


  挑战

  测试Web Services的有
Web Services的分布性。
效性、性能、可伸缩性、可靠性

以及安全性时所面临的主要挑战是


  为了使完整的Web Services能够实现
要求。接口必须在其WSDL文档中正确描述
消息协议(如SOAP 1.1)。同时消息必须
到消息的内容和传输层的绑定。加上综合
负载下的性能需求,就很容易发现为什么
预期的功能,就要求客户端和服务都要满足一系列的
出来,消息必须遵守传输协议规范(如HTTP1.1)和
遵守描述该服务的WSDL文档中的契约,要求同时考虑
的安全条款、互操作性问题、UDDI注册要求以及一定
网络测试不是无足轻重的事情。

  Web Services组件可由多个利益相关
发现确定代码质量、可用性等都有很大的
并且共享一个公共的基于XML的基础。传
GUI自动化工具也不足以有效地测试Web S
者来共同构建和部署。因此,测试这些组件过程中会
难度。Web Services的标准是简单的,数据驱动的,
统的测试工具可能不足以有效地测试这些标准。而且
ervices的接口点和消息格式。

  功能测试

  该测试的目标相当直观
Web Services的复杂性,该
可能精确预见客户端会发来
入的空间要么是没有边界,
和参数是极其重要的。
易懂:确保服务器能够对给定的
任务原非想象的那么简单。对于
什么类型的请求。枚举所有可能
要么就是无穷大。因此,验证服

请求发送正确的响应。然而,由于
大多数的Web Services而言,它不
的请求并不切实可行,因为可能输
务器是否能处理大范围的请求类型


  public boolean execute(String ac
tion, String symbol, int quantity)

  throws javax.xml.soap.SOAPException{      

  Detail detail = null;                                    

  detail = SOAPFactory
.newInstance().createDetail(
);

  detail.addChildEleme
nt( "Stock Trade" ).addTextN
ode( "failed" );

  System.out.println("
invoked
execute() in webservices.sto

ck.trade webservice has been


  with following arguments:: actio
n:" + action +

  " symbol:" + symbol + " quantity
:" + quantity);

  if(action == null) {                                      

  throw new SOAPFaultE
"ServerFailed" ),
xception(new QName( "http://

StockTrade/execute",


  "action parameter is null.",                      

  null,                                                                    

  detail);                                                              

  }                                                                            

  if(symbol == null) {                                      

  throw new SOAPFaultE
"ServerFailed" ),
xception(new QName( "http://

StockTrade/execute",


  "symbol parameter is null.",                      

  null,                                                                    

  detail);                                                              

  }                                                                            

  if(action.equalsIgnoreCase("BUY"))          

  System.out.println("BUYING quant
ity: "+ quantity + " of symbol:" + symbol);

  // Invoke method to execute trade here.


  else if(action.equal
sIgnoreCase("SELL"))

  System.out.println("
SELLING quantity: "+ quantit
y + " of symbol:" + symbol);

  // Invoke method to execute trade here.

  else                                                                      

  {                                                                            

  System.out.println("INVALID acti
on: "+ action);

  throw new SOAPFaultE
"ServerFailed" ),
xception(new QName( "http://

StockTrade/execute",


  "Invalid Action:" + action,                        

  null,                                                                    

  detail);                                                              

  }                                                                            

  return true;                                                      

  }                                                                            


  代码摘录:Stock Trade Web Services

  该段摘录的代码是Stock Trade Web
首先验证输入参数的有效性,验证成功才
会抛出一个SoapFaultException异常,用
因。为了举例说明,在对参数symbol进行
际的情况下,商业逻辑应该在此位置中实
Services的“execute()”方法的实现代码。该方法
执行功能。举例说明,如果参数action是空值,它就
faultstring参数(第二个参数)说明造成异常的原
相似的验证之后,Web Services给出了处理机。在实
现:

  try{                                                                      


  // Setup the global
JAXM message factory

  System.setProperty("
javax.xml.soap.MessageFactor
y",

  "weblogic.webservice.core.soap.M
essageFactoryImpl");


  // Setup the global
JAX-RPC service factory

  System.setProperty( "javax.xml.r
pc.ServiceFactory",

  "weblogic.webservice.core.rpc.Se
rviceFactoryImpl");


  StockTrade_Impl ws =
new StockTrade_Impl();


  StockTradePort port
 = ws.getStockTradePort();

  boolean returnVal = port.execute
(action, symbol, quantity);

  System.out.println("The webservi
returnVal);
ce got back the following result:" +


  }catch(Exception e) {                                    

  }                                                                            

  代码摘录:Web Services的客户端

  上面的一段代码描述了
子使用了JAX-RPC API(JAX
经含有了必要的BEA提供的J
获得stub实现后,Web Serv
测试客户端如何激活前面讨论的
远程处理应用程序接口函数),
AR文件。这是一个静态实现,在
ices的“execute”方法就会被
Stock Trade Web Services,该例
并且假设在读者的CLASSPATH中已
这里可获得一个stub实现的实例。
激活。

  互操作性测试

  SOAP和Web Services的
人为的介入。Web Services
承诺之一就是互操作性。就是两
未来成功的关键就在于互操作性
个应用系统可以自动交互而不需要


  Web Services互操作性测试套件的目标应针对于测试以下方面:          

  •服务器分析客户端的SOAP包的能力。                            

  •服务器对包中所含的已编码参数进行反串行化的能力。                

  •客户端对由服务器作为响应发送而来的SOAP包进行分析的能力。    

  •客户端对从服务器发回的已编码参数进行反串行化的能力。            

  测试模式

  对于一个WLS客户和.NET Web Services:                      

  • 用Microsoft
一个.NET Web Services。
Visual Studio在目录/InetPub/

wwwroot/DotNetServices/下创建


  • 在WLS端,在
ant task生成一个clientja
为DotNetService 提供了WSDL U
r。
RL后,用WebLlogic clientgen


  •从testclient,对JAVA Stub进行一次调用。      

  WebLogic Server                                                

  .NET Server                                                        

  .NET Web Service                                              

  WLS Client                                                          

  // STOCK TRADE WEB SERVICE                          

  // The Stock Trade w
eb service executes a trade
and returns result.

  [WebMethod]                                                        

  public bool execute(string actio
n, string symbol, int quantity)

  {                                                                            

  if(action == null) {                                      

  Console.WriteLine("action null");            

  return false;                                                    

  }                                                                            

  if(symbol == null) {                                      

  Console.WriteLine("symbol null");            

  return false;                                                    

  }                                                                            

  if(action.Equals("BUY"))                              

  Console.WriteLine("B
UYING quantity: "+ quantity
+ " of symbol:" + symbol);

  else if(action.Equals("SELL"))                  

  Console.WriteLine("S
ELLING quantity: "+ quantity
+ " of symbol:" + symbol);

  else {                                                                  

  Console.WriteLine("INVALID actio
n: "+ action);

  return false;                                                    

  }                                                                            

  return true;                                                      

  }                                                                            


  代码摘录:.NET Web Services                                  
  上面摘录的一段代码是
的.NET版。它用与JAVA非常
Stock Trade Web Services,它
相似的C#语言编写。文件名是“
是前面所设计的WLS Web Services
StockTrade.asmx.cs”。

  代码编写完成后,在WebLogic服务器
Services,验证客户端是否能调用Web Se
上部署WLS客户程序,在.NET框架上部署.NET Web
rvices。

  .NET客户端和WLS Web 服务器端

  • 创建一个WLS Web Services(EAR文件)        

  • 使用WLS Web
程将生成一个.cs文件,该
服务WSDL并通过运行wsdl.exe生
文件包含对应于WSDL提供的Web
成一个.NetClient Stub。这一过
Services的方法定义。

  • 另外一步是在
步是必须的,因为wsdl.exe
Stub中定义一个新的构造函数,
所生成的Stub在缺省情况下指向
并将WSL URL作为一个参数。这一
USDL URL中的本地主机。

  • 创建一个.NetClient 类(
造函数参数。该类是一个代理类,它含有
类进行了实例化,然后将方法的调用委托
另外一个.cs文件),该类实际上以WSDL URL作为构
与Stub中所定义的相同的方法。.Net客户首先对Stub
到Stub。

  .NET Server                                                        

  .Net Client                                                        

  WebLogic Server                                                

  WLS Web Service                                                

  using System;                                                    

  namespace interop                                            

  {                                                                            

  /// <summary>


  /// Client for StockTrade web service    

  /// </summary>


  public class StockTradeClient                    

  {                                                                            

  public StockTradeClient()                            

  {                                                                            

  //                                                                          

  // TODO: Add constructor logic here        

  //                                                                          

  }                                                                            

  static void Main()                                          

  {                                                                            

  string action = "BUY";                                  

  string symbol = "BEAS";                                

  int quantity = 100;                                        

  StockTradeService st
Service = new StockTradeServ
ice();

  Console.WriteLine("Stock Trade S
ervice: ");

  bool result = stService.execute(
action,symbol, quantity);


  Console.Write("Resul
t of Stock Trade: ");

  Console.WriteLine(result.ToString());    

  }                                                                            

  }                                                                            

  }                                                                            

  代码摘录:.NET客户端

  上面摘录的的一段代码是对应于我们
代码,该段代码是用与JAVA语言极为相似
”。
前面创建的Stock Trade Web Services的.NET客户端
的C#语言开发的。文件名是“StockTradeClient.cs


  代码编写完成后,在.NET框架上部署
Web Services,验证客户端是否能正确调
.NET客户端,并且在WebLogic Server上部署WLS
用Web Services。

  下面的就是在WebLogic Server中显示的日志的格式:                

  SELLING quantity: 300 of symbol:IBM        

  execute() in webservices.stock.t
g
rade webservice has been invoked with followin


  arguments:: action:SELL123 symbo
l:IBM quantity:300

  INVALID action: SELL123                                

  execute() in webservices.stock.t
g
rade webservice has been invoked with followin



  arguments:: action:S
ELL symbol:IBM quantity:300

  SELLING quantity: 300 of symbol:IBM        

  execute() in webserv
g
ices.stock.trade webservice

has been invoked with followin


  arguments:: action:SELL123 symbo
l:IBM quantity:300

  INVALID action: SELL123                                

  结束语

  通过将所讨论的测试方法集成到 Web
务器能够良好处理可能类型和数量的客户
和检索服务所提供的任何数据。
服务开发过程中,我们就可以确保Web Services服
端请求,而且Web Services的客户端也能正确地访问


  您可以从开发流程中的任何一点开始
您防止错误以及发现错误的能力就强。通
能避免因创建与有问题模块交互的代码或
有可能避免在其他服务器或者客户中重用
实施所讨论的方法,但如果您较早的开始测试,那么
常,错误发现得越早,其解决就越早,而且也越有可
组件而在不经意中使问题变得更为糟糕的情况,也越
有问题的模块。

  
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
无相关信息

   栏目导行
  PHP编程
  ASP编程
  ASP.NET编程
  JAVA编程
   站点最新
·致合作伙伴的欢迎信
·媒体报道
·帝国软件合作伙伴计划协议
·DiscuzX2.5会员整合通行证发布
·帝国CMS 7.0版本功能建议收集
·帝国网站管理系统2012年授权购买说
·PHPWind8.7会员整合通行证发布
·[官方插件]帝国CMS-访问统计插件
·[官方插件]帝国CMS-sitemap插件
·[官方插件]帝国CMS内容页评论AJAX分
   类别最新
·谈谈JDBC
·JDBC专题介绍
·JDBC接口技术
·利用weblogic的POOL(连接池)连接
·Jsp中调用Oracle存储过程的小例子
·JSP数据库操作例程
·JSP数据库连接大全
·用连接池提高Servlet访问数据库的效
·一种简单JDBC连接池的实现
·数据库连接池Java实现小结
 
关于帝国 | 广告服务 | 联系我们 | 程序开发 | 网站地图 | 留言板 帝国网站管理系统