国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

小心進行 J2EE Web Services 的測試

2019-11-18 12:29:39
字體:
來源:轉載
供稿:網友

  我們已經了解了很多關于Web Services開發方面的知識,而對于Web Services測試所面臨的挑戰卻知之甚少。本文將闡述對Web Services功能性和互用性的測試。本文同時也指出了與傳統測試模式相比Web Services測試所面臨的挑戰。本文的目標讀者是開發人員、測試人員以及那些對Web Services的技術知識或工作方式沒有深入了解的項目經理。同時本文假設讀者已經很熟悉Web Services的基本知識。
  
  下載作者提供的與本文相關的文件
  
  以下所述及的示例的環境由WebLogic Server 8.1和Microsoft Windows .Net構成,二者所用操作系統均為windows 2000。
  
  挑戰
  測試Web Services的有效性、性能、可伸縮性、可靠性以及安全性時所面臨的主要挑戰是 Web Services的分布性。
  
  為了使完整的Web Services能夠實現預期的功能,就要求客戶端和服務都要滿足一系列的要求。接口必須在其WSDL文檔中正確描述出來,消息必須遵守傳輸協議規范(如HTTP1.1)和消息協議(如SOAP 1.1)。同時消息必須遵守描述該服務的WSDL文檔中的契約,要求同時考慮到消息的內容和傳輸層的綁定。加上綜合的安全條款、互操作性問題、UDDI注冊要求以及一定負載下的性能需求,就很輕易發現為什么網絡測試不是無足輕重的事情。
  
  Web Services組件可由多個利益相關者來共同構建和部署。因此,測試這些組件過程中會發現確定代碼質量、可用性等都有很大的難度。Web Services的標準是簡單的,數據驅動的,并且共享一個公共的基于xml的基礎。傳統的測試工具可能不足以有效地測試這些標準。而且GUI自動化工具也不足以有效地測試Web Services的接口點和消息格式。
  
  功能測試
  該測試的目標相當直觀易懂:確保服務器能夠對給定的請求發送正確的響應。然而,由于Web Services的復雜性,該任務原非想象的那么簡單。對于大多數的Web Services而言,它不可能精確預見客戶端會發來什么類型的請求。枚舉所有可能的請求并不切實可行,因為可能輸入的空間要么是沒有邊界,要么就是無窮大。因此,驗證服務器是否能處理大范圍的請求類型和參數是極其重要的。
  
  public boolean execute(String action, String symbol, int quantity)
  
  throws javax.xml.soap.SOAPException{
  
  Detail detail = null;
  
  detail = SOAPFactory.newInstance().createDetail();
  
  detail.addChildElement( "Stock Trade" ).addTextNode( "failed" );
  
  System.out.  
  with following arguments:: action:" + action +
  
  " symbol:" + symbol + " quantity:" + quantity);
  
  if(action == null) {
  
  throw new SOAPFaultException(new QName( "http://StockTrade/execute", "ServerFailed" ),
  
  "action parameter is null.",
  
  null,
  
  detail);
  
  }
  
  if(symbol == null) {
  
  throw new SOAPFaultException(new QName( "http://StockTrade/execute", "ServerFailed" ),
  
  "symbol parameter is null.",
  
  null,
  
  detail);
  
  }
  
  if(action.equalsIgnoreCase("BUY"))
  
  System.out.println("BUYING quantity: "+ quantity + " of symbol:" + symbol);
  
  // Invoke method to execute trade here.
  
  else if(action.equalsIgnoreCase("SELL"))
  
  System.out.println("SELLING quantity: "+ quantity + " of symbol:" + symbol);
  
  // Invoke method to execute trade here.
  
  else
  
  {
  
  System.out.println("INVALID action: "+ action);
  
  throw new SOAPFaultException(new QName( "http://StockTrade/execute", "ServerFailed" ),
  
  "Invalid Action:" + action,
  
  null,
  
  detail);
  
  }
  
  return true;
  
  }
  
  
  代碼摘錄:Stock Trade Web Services
  該段摘錄的代碼是Stock Trade Web Services的“execute()”方法的實現代碼。該方法首先驗證輸入參數的有效性,驗證成功才執行功能。舉例說明,假如參數action是空值,它就會拋出一個SoapFaultException異常,用faultstring參數(第二個參數)說明造成異常的原因。為了舉例說明,在對參數symbol進行相似的驗證之后,Web Services給出了處理機。在實際的情況下,商業邏輯應該在此位置中實現:
  
  try{
  
  // Setup the global JAXM message factory
  
  System.setProperty("javax.xml.soap.MessageFactory",
  
  "weblogic.webservice.core.soap.MessageFactoryImpl");
  
  // Setup the global JAX-RPC service factory
  
  System.setProperty( "javax.xml.rpc.ServiceFactory",
  
  "weblogic.webservice.core.rpc.ServiceFactoryImpl");
  
  StockTrade_Impl ws = new StockTrade_Impl();
  
  StockTradePort port = ws.getStockTradePort();
  
  boolean returnVal = port.execute(action, symbol, quantity);
  
  System.out.println("The webservice got back the following result:" + returnVal);
  
  }catch(Exception e) {
  
  }
  
  代碼摘錄:Web Services的客戶端
  上面的一段代碼描述了測試客戶端如何激活前面討論的Stock Trade Web Services,該例子使用了JAX-RPC API(JAX遠程處理應用程序接口函數),并且假設在讀者的CLASSPATH中已經含有了必要的BEA提供的JAR文件。這是一個靜態實現,在這里可獲得一個stub實現的實例。獲得stub實現后,Web Services的“execute”方法就會被激活。
  
  互操作性測試
  SOAP和Web Services的承諾之一就是互操作性。就是兩個應用系統可以自動交互而不需要人為的介入。Web Services未來成功的要害就在于互操作性。
  
  Web Services互操作性測試套件的目標應針對于測試以下方面:
  
  •服務器分析客戶端的SOAP包的能力。
  
  •服務器對包中所含的已編碼參數進行反串行化的能力。
  
  •客戶端對由服務器作為響應發送而來的SOAP包進行分析的能力。
  
  •客戶端對從服務器發回的已編碼參數進行反串行化的能力。
  
  測試模式
  對于一個WLS客戶和.NET Web Services:
  
  • 用Microsoft Visual Studio在目錄/InetPub/wwwroot/DotNetServices/下創建一個.NET Web Services。
  
  • 在WLS端,在為DotNetService 提供了WSDL URL后,用WebLlogic clientgen ant task生成一個clientjar。
  
  •從testclient,對JAVA Stub進行一次調用。
  
  WebLogic Server
  
  .NET Server
  
  .NET Web Service
  
  WLS Client
  
  // STOCK TRADE WEB SERVICE
  
  // The Stock Trade web service executes a trade and returns result.
  
  [WebMethod]
  
  public bool execute(string action, 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("BUYING quantity: "+ quantity + " of symbol:" + symbol);
  
  else if(action.Equals("SELL"))
  
  Console.WriteLine("SELLING quantity: "+ quantity + " of symbol:" + symbol);
  
  else {
  
  Console.WriteLine("INVALID action: "+ action);
  
  return false;
  
  }
  
  return true;
  
  }
  
  
  代碼摘錄:.NET Web Services
  上面摘錄的一段代碼是Stock Trade Web Services,它是前面所設計的WLS Web Services的.NET版。它用與JAVA非常相似的C#語言編寫。文件名是“StockTrade.asmx.cs”。
  
  代碼編寫完成后,在WebLogic服務器上部署WLS客戶程序,在.NET框架上部署.NET Web Services,驗證客戶端是否能調用Web Services。
  
  .NET客戶端和WLS Web 服務器端
  • 創建一個WLS Web Services(EAR文件)
  
  • 使用WLS Web 服務WSDL并通過運行wsdl.exe生成一個.NetClient Stub。這一過程將生成一個.cs文件,該文件包含對應于WSDL提供的Web Services的方法定義。
  
  • 另外一步是在Stub中定義一個新的構造函數,并將WSL URL作為一個參數。這一步是必須的,因為wsdl.exe所生成的Stub在缺省情況下指向USDL URL中的本地主機。
  
  • 創建一個.NetClient 類(另外一個.cs文件),該類實際上以WSDL URL作為構造函數參數。該類是一個代理類,它含有與Stub中所定義的相同的方法

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 天台县| 万年县| 南郑县| 军事| 东源县| 漯河市| 应用必备| 张北县| 兴宁市| 北宁市| 辽阳县| 怀化市| 开远市| 瓦房店市| 宝鸡市| 肇源县| 辽宁省| 延寿县| 盐山县| 新龙县| 忻州市| 玛多县| 杨浦区| 嵩明县| 玉龙| 公安县| 绥德县| 东方市| 富顺县| 巫溪县| 宜章县| 邻水| 墨江| 会同县| 伊春市| 寿宁县| 梁河县| 禄丰县| 枣阳市| 霍邱县| 宝山区|