自动化 Web 服务测试,第 1 部分: 使用 IBM Rational Software Architect 创建 Web 服务

本系列教程说明如何使用各种技术(如 Junit、Apache Commons HttpClient 和 Apache XMLUnit)自动化典型 Web 服务的测试。在第 1 部分中,我们将使用 IBM® Rational® Software Architect 创建简单的 Web 服务。

Mohan K Jadhav (mohan.jadhav@in.ibm.com), 软件工程师, IBM

作者照片Mohan K Jadhav 是 IBM India Software Labs 的一位软件工程师,在印度班加罗尔市工作。他目前从事有关 Java™ 中间件和服务器端技术方面的研究。


developerWorks 投稿作者

Mansoor Ahmed, Software Engineer, IBM

Mansoor Ahmed photoMansoor Ahmed 是位于印度班加罗尔的 IBM Software Labs 的软件工程师。他擅长的领域包括开源对象和 Java EE 技术。Mansoor 获得了 Visvesvaraya 科技大学计算机科学学士学位。您可以通过 manahmed@in.ibm.com 与他联系。



2007 年 8 月 01 日

开始之前

关于本系列

Web 服务正逐渐成为业务应用程序中的主要组件,随着面向服务的体系结构(Service-Oriented Architecture,SOA)之类的范式的出现,Web 服务越来越受关注。在这些面向服务的服务关键型应用程序中,Web 服务的测试具有同等重要的地位。复杂 Web 服务的快速创建和部署对 QA 团队提出了一个挑战。实现 Web 服务测试的自动化,可帮助团队有效地管理此工作。

Web 服务测试通常包括以下任务:

  1. 为 Web 服务生成客户机或框架代码
  2. 定义测试输入
  3. 使用客户机或框架代码调用 Web 服务
  4. 验证实际响应与预期响应是否相似

在这些活动中,客户机或框架代码生成和响应验证需要进行的工作最多。

可使用各种工具来基于 WSDL 文件生成 Web 服务的客户机或框架代码,不过生成的代码可能是专用的,可能需要每次在 WSDL 发生更改时进行重新生成。此问题的解决方法是,消除客户机或框架代码的生成工作,通过通用 HTTP 客户机直接调用 Web 服务。在本系列稍后,我们将了解 Apache Commons HttpClient API 所提供的这样的工具集。

类似地,响应验证通常涉及到某种类型的手动干预,具体取决于响应内容的复杂性。如果响应包含简单元素,验证工作可能非常简单,因为只需要检查简单元素中的值即可。对于包含复杂元素以及此类复杂元素的巨大列表的响应,手动验证工作量可能会非常大。

本系列将向您介绍一种技术,以使用各种技术(如 Junit、Apache Commons HttpClient(以下称为 HttpClient)和 Apache XMLUnit(以下称为 XMLUnit))自动化典型 Web 服务的测试。我们将在 IBM® Rational® Software Architect 提供的开发平台上演示此技术。

本系列包括两个部分:

  • 第 1 部分说明如何使用 IBM Rational Software Architect 创建简单的 Web 服务。
  • 第 2 部分介绍 XMLUnit,它提供了用于比较两个 XML 格式文件的 API。

关于本教程

本系列教程说明如何使用各种技术(如 Junit、Apache Commons HttpClient 和 Apache XMLUnit)自动化典型 Web 服务的测试,本教程是其中的第 1 部分。我们将说明使用 IBM Rational Software Architect 创建简单 Web 服务时所涉及的步骤,IBM Rational Software Architect 在集成开发平台中提供了一组成熟的功能供使用。

目标

在本教程中,我们将了解如何使用 IBM Rational Software Architect 创建和测试简单 Web 服务。

先决条件

我们假定您基本了解 Web 服务及使用 Java™ 进行 Web 服务开发,而且接触过单元测试工具(如 JUnit)。

系统要求

您的系统应该安装以下软件:

  1. Windows 98/2000/2003
  2. IBM Rational Software Architect V6.x

创建 Web 服务

示例方案

我们将创建示例 Web 服务,其中包含单个方法,用以返回用户列表。每个用户都将具有姓名和地址。为了简单起见,我们将让此 Web 服务返回静态用户列表。在实际的情况中,此列表可能来自数据库或文件之类的数据源。

用户的 XML 模式如清单 1 中所示。

清单 1
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">  
  <xsd:element name="user">    
    <xsd:complexType>      
      <xsd:sequence>        
        <xsd:element ref="name"/>        
        <xsd:element ref="address"/>      
      </xsd:sequence>    
    </xsd:complexType>  
  </xsd:element>  
  <xsd:element name="street">    
    <xsd:complexType/>  
  </xsd:element>  
  <xsd:element name="address">    
    <xsd:complexType>      
      <xsd:sequence>        
        <xsd:element ref="street"/>        
        <xsd:element ref="city"/>        
        <xsd:element ref="zip"/>      
      </xsd:sequence>    
    </xsd:complexType>  
  </xsd:element>  
  <xsd:element name="zip">    
    <xsd:complexType/>  
  </xsd:element>  
  <xsd:element name="name" type="xsd:string"/>  
    <xsd:element name="city">    
    <xsd:complexType/>  
  </xsd:element></xsd:schema>

要测试示例 Web 服务,请执行以下操作:

  • 为 Web 服务创建 Web 项目。
  • 创建 Java 项目,将用此项目来包含用于测试 Web 服务的 JUnit 测试代码。
  • 使用 HttpClient 调用 Web 服务。
  • 从 Web 服务获取响应,并将其存储在文件中。
  • 使用 XMLUnit API 来将实际响应与预期响应进行比较。

接下来我们将对这些任务进行说明。

创建 Web 服务

第一步是创建 Web 服务。

  • 打开 IBM Rational Software Architect。转到菜单 Window > Open Perspective > Web
  • 转到 File > New > Project,并在向导中选择 Dynamic Web Project,如图 1 中所示。
图 1. 创建动态 Web 项目
创建动态 Web 项目
  • 单击 Next
  • 输入项目名,例如使用 SampleProject 作为项目名,如图 2 中所示。
图 2. 动态 Web 项目名称
图 2. 动态 Web 项目名称
  • 单击 Finish
  • 创建项目后,Project Explorer 视图应该看起来与图 3 所示类似。
图 3. Web 项目的视图
图 3. Web 项目的视图
  • 在 Project Explorer 视图中的 SampleProject\Java Resources 文件夹下右键单击 JavaSource,并选择 New > Package
  • 在 Java Package 页中输入包的名称,如 com.ibm.ws.sample,如图 4 中所示。
图 4. Java package
图 4. Java package
  • 单击 Finish
  • 右键单击包 com.ibm.ws.sample 并选择 New > Class,以创建 Java 类 Address.java、User.java 和 Users.java。有关这些类的源代码,请参见下面的清单 2、3、4。
清单 2. Address.java
package com.ibm.ws.sample;

public class Address 
{  
  private String street;  
  private String city;  
  private String zip;  
  
  // Getters  
  public String getStreet() { return street; }  
  public String getCity() { return city; }  
  public String getZip() { return zip; }  
  
  // Setters  
  public void setStreet(String street) {this.street = street;}  
  public void setCity(String city) { this.city = city; }  
  public void setZip(String zip) { this.zip = zip; }
}
清单 3. User.java
package com.ibm.ws.sample;
      
public class User 
{  
  private String name;  
  private Address address;  

  // Getters  
  public String getName() { return name; }  
  public Address getAddress() { return address; }	  

  // Setters  
  public void setName(String name) { this.name = name; }  
  public void setAddress(Address address) {this.address =   address;}
}
清单 4. Users.java
package com.ibm.ws.sample;

public class Users 
{  
  /**   
   * Returns all the users.   
   * The list of users might come from a database   
   * in the real scenario.   
   *    
   * @return User[]   
   */  
   public User[] getUsers()  
   {    
     User[] users = new User[3];	 	    
     users[0] = getUser("John","Park Street","Washington", "012345");    
     users[1] = getUser("Mohan","Avenue Street", "Bangalore", "456789");    
     users[2] = getUser("Mansoor","Martin Street", "Bangalore", "135791");
     return users;  
   }	  
   
   /**   
   * Returns a User object   
   *    
   * @param name   
   * @param street   
   * @param city   
   * @param zip   
   * @return User   
   */  
   private User getUser(String name, String street, String city, String zip)  
   {    
     Address address = new Address();    
     address.setStreet(street);    
     address.setCity(city);    
     address.setZip(zip);		    
     User user = new User();    
     user.setName(name);    
     user.setAddress(address);		    
     return user;  
   }
}
  • 创建了 Java 类之后,Project Explorer 应该与图 5 中所示类似。
图 5. Explorer 视图
图 5. Explorer 视图
  • 现在,我们将从 Users.java 得到 Web 服务。右键单击 Users.java 并选择 Web Services > Create Web service。如果未看到此菜单项,应该通过菜单 Window > Preferences > Workbench > Capabilities > Web Service Developer 启用 Web 服务功能。
  • Web Services 页面,取消选中 Start Web service in Web project 选项,并单击 Next,如图 6 中所示。
图 6. Web 服务
图 6. Web 服务
  • Object Selection 页中,确保 Bean 字段包含值 com.ibm.ws.sample.Users,如图 7 中所示。
图 7. Object selection 页
图 7. Object selection 页
  • Service Deployment Configuration 页中单击 Next,而不更改缺省值,如图 8 中所示。
图 8. Service Deployment Configuration
图 8. Service Deployment Configuration
  • Service Endpoint Interface Selection 页中单击 Next,而不更改缺省值,如图 9 中所示。
图 9. Service Endpoint Interface Selection
图 9. Service Endpoint Interface Selection
  • 在 Web Service Java Bean Identity 页中单击 Next,确保选中了 getUsers() 方法,如图 10 中所示。
图 10. Web Service Java Bean Identity
图 10. Web Service Java Bean Identity
  • Web Service Publication 页中单击 Finish,而不更改缺省值,如图 11 中所示。
图 11. Web ServicepPublication
Web ServicepPublication
  • Project Explorer 视图应与图 12 中所示类似。
图 12. Project Explorer
图 12. Project Explorer

部署 Web 服务

现在我们已经创建了 Web 服务,接下来将在服务器中部署应用程序。

  • 右键单击项目名称 SampleProject 并选择 Run > Run on Server...,如图 13 中所示。
图 13. 在服务器上运行
图 13. 在服务器上运行
  • Define a New Server 页中单击 Next,而不更改缺省值,如图 14 中所示。
图 14. 定义新服务器
图 14. 定义新服务器
  • 在 Add and Remove Projects 页中确保 SampleProjectEAR 添加到了 Configured projects 部分,如图 15 中所示。
图 15. 添加和删除项目
图 15. 添加和删除项目
  • 单击 Finish

现在会将应用程序部署到服务器中。在浏览器中访问 URL http://localhost:9080/SampleProject/services/Users,以验证 Web 服务是否在运行。

结束语

在本教程中,我们在 Rational Software Architect 工具集提供的开发平台上创建了一个简单的 Web 服务。在本系列的第 2 部分中,我们将学习一种技术,以便使用 HttpClient 和 XMLUnit API 自动化 Web 服务输出测试。

参考资料

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=SOA and web services
ArticleID=244113
ArticleTitle=自动化 Web 服务测试,第 1 部分: 使用 IBM Rational Software Architect 创建 Web 服务
publish-date=08012007