51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4809|回复: 3
打印 上一主题 下一主题

使用 soapUI 测试 REST 服务(一)

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2011-5-21 07:56:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 cta 于 2011-8-3 11:28 编辑

原文地址:http://www.ibm.com/developerworks/cn/opensource/os-cn-soapui/


REST 服务介绍


REST(Representational State Transfer)是 Roy Fielding 博士在 2000 年提出的一种新的软件架构风格,它以资源(resource)为核心,使用 HTTP、 URI、XML 以及 HTML 等现有流行协议和标准来完成对资源的操作及显示。 这些操作包括获取、创建、修改和删除资源,分别对应于 HTTP 协议的 GET、POST、PUT 和 DELETE 方法。REST 架构定义了以下设计准则:
  • 网络中的所有事物都被抽象为资源(resource)。
  • 每个资源对应一个唯一的资源标识(resource identifier)。
  • 通过通用的连接器接口(generic connector interface)对资源进行操作。
  • 对资源的各种操作不会改变资源标识。
  • 所有的操作都是无状态的(stateless)。

REST 服务(RESTful Service)是一种基于 HTTP 和 REST 准则的轻量级 Web 服务。这类服务可以看作一系列资源(resource)的集合,服务的定义可以视为以下三个切面的组合 :
  • 访问 Web Service 的 URI,如:http://example.com/resources
  • Web Service 所支持的数据 MIME 类型,如:JSON, XML, YAML 等。
  • Web Service 使用 HTTP 协议支持的操作,如 GET, POST, PUT, DELETE。

相比目前流行的 Web 服务实现方案 SOAP 和 XML-RPC, REST 服务更加简洁,它可以完全通过 HTTP 协议实现,还可以利用缓存 Cache 来提高响应速度, 其性能,效率和易用性等方面均优于 SOAP 协议。 本文主要介绍如何使用 soapUI 来测试此类 Web 服务。

回页首

soapUI 介绍


由于 Web 服务是被程序调用的, 一般不会提供界面让最终用户或测试人员直接使用,在 soapUI 等工具出现之前,测试人员不得不自己编写程序来测试它, 这就要求测试人员花费很大的精力了解底层的接口,调用关系和详细的协议,导致他们不能把注意力集中到测试中。
soapUI 的出现极大的改变了这一局面。 作为一个开源的工具,soapUI 强大的功能、易用的界面,吸引了很多用户。用户可以在 soapUI 中通过简单的操作完成复杂的测试,不需要了解底层的细节, 极大的减轻了工作量。soapUI 支持多样的测试, 例如功能测试,性能测试,回归测试等。到目前为止 soapUI 的下载量已经超过了 100 万次,成为了事实的 Web 服务测试标准和领先的 Web 服务测试工具。 它不仅仅可以测试基于 SOAP 的 Web 服务,也可以测试 REST 风格的 Web 服务,后者也是本文介绍的重点。

soapUI 基于 Java 开发,支持多个平台,安装非常简单。读者可以到 soapUI 的 官方网站下载一个安装包 ( 本文使用的是 Window 版本 3.0.1),直接安装即可。在该安装包中,包括了一个 soapUI 所需要的 JRE1.6 版本。安装完毕以后,读者需要设置 JAVA_HOME 变量指向到相应的 JRE 目录,同时修改 PATH 变量,将 JRE1.6 的 bin 目录添加进去。



回页首

REST 服务案例


为了避免空洞的讲解,同时为了更好的展示 soapUI 对 REST 服务的测试功能,本文假想了一个在线书店 (http://www.example.com) 的例子。该在线书店对外提供了一些 REST 服务让第三方的应用程序调用。 为了让读者把注意力集中在使用 soapUI 进行测试上,我们对这些 REST 服务进行了必要的简化,仅仅只包含下面 3 种功能:书籍列表,书籍详情和添加评论。这 3 个 REST 服务覆盖了层次状的 REST 资源、基本的 HTTP 操作和多种展现形式。
服务名称HTTP 操作资源 URI资源展现注释
书籍列表GEThttp://www.example.com/booksapplication/json,text/xml该 REST 服务的目的是列出在线书店中的书籍列表,参见 代码清单 1代码清单 2
书籍详情GEThttp://www.example.com/books/<book id >application/json该 REST 服务目的是给定一个书籍 ID,返回该书籍的详细信息,参见 代码清单 3,需要注意的是书籍详细信息是一个带有层次结构的 json 展示
添加评论POSThttp://www.example.com/books/<book id >/comments无 , 系统仅仅返回 200 OK该 REST 服务的目的是对一个书籍添加评论,调用方需要 POST 类似 author=xxx&content=xxx 的数据到服务器端。

清单 1. 书籍列表 application/json
                                 {"books": [    {"book":    {       "id": "1234",       "name": "book1",       "price": 29    }},    {"book":    {       "id": "5678",       "name": "book2",       "price": 18    }}  ]}         


清单 2. 书籍列表 text/xml
                                 <bookes>    <book>       <id>1234</id>       <name>book1</name>       <price>29.0</price>    </book>    <book>       <id>5678</id>       <name>book2</name>       <price>18</price>    </book>  </bookes>         


清单 3. 书籍详情 application/json
                                 {    "id": "1234",    "name": "book1",    "description": "this is book 1",    "author": "author1",    "price": 29,    "comments":    [       {"comment":       {          "user": "user1",          "content": "good book"      }},       {"comment":       {          "user": "user2",          "content": "not bad"      }}    ]  }         



回页首

在 soapUI 中建立测试用例

基本概念

在创建测试用例之前,我们先来看一看在 soapUI 中的基本概念,soapUI 把 REST 服务、资源及其操作组织为一个层次结构。如 图 1所示,主要包括如下层次:

  • 项目定义:位于最上层 (BookStoreTest),项目可以包含多个服务的定义。
  • REST 服务定义:服务其实是对多个 REST 资源的一个分组,在我们的例子中只有一个服务 BookStoreServie
  • REST 资源定义:具体描述该资源的名称,URI, 参数等属性
  • REST 方法定义:针对每个资源的方法 (GET,POST,PUT,DELETE 等 ),图 1 中的方法名就是 GetBookList
  • REST 操作请求定义:基于每个方法,可以有一个或多个请求操作,如 GetBookListRequest,这些请求操作才是真正被 soapUI 所调用执行的。每个请求可以设置非常丰富的信息,例如 Accept 类型,请求的 Header 信息,运行了该请求以后,就能以各种方式查看运行结果。但是这里还不能加入断言来验证结果 - 必须在建立测试用例以后才能使用。

注: 读者可以在 下载区的 bookstore-soapui-project.zip 找到完整的例子,下文中主要以该例子为基础进行讲解。读者解压 zip 文件以后,能得到一个 xml 文件,可以通过 soapUI 的 File->import project 把项目导入到自己的工作区中。


图 1. soapUI 中的层次结构


对于测试用例来讲,同样是一个层次结构:
  • TestSuite:类似于 Junit 中的测试套件,其中可以加入多个 TestCase
  • TestCase:可以包含多个 TestStep
  • TestStep:一个 TestCase 可以包含多个 TestStep,TestStep 有多种类型,它可以是上面提到一个 REST 操作请求,也可以是一个 Groovy 的脚本,还可以试一个设置属性的操作。 TestStep 甚至支持分支跳转操作:根据特定的条件,从一个 step 可以跳转到其他 step, 而不必顺序执行。

soapUI 实际上是一个平台,它支持强大的编程能力,开发或者测试人员可以利用 groovy 脚本来访问 soapUI 中的对象,在运行时修改 REST request/response, 这就提供了极大的灵活性。
图 2. TestCase 定义

创建测试用例

有了上面的基本概念以后,在 soapUI 中创建测试用例就比较简单了, 用户几乎可以根据自己的直觉来一步一步的完成一个测试。图 3展示的就是一个建立书籍列表 REST 服务的步骤:


1. 新建一个名为 BookStoreTest 的项目
2. 在项目上点击右键,选择"New Rest Service",在对话框中输入 Service Name(BookStoreService) 和 Endpoint(http://localhost:9080)
3. 在"BookstoreService"上点击右键,选择“New Resource”, 在对话框中输入 Resource Name(BookList) 和 Resource Path (/books),点击 OK
4. 在弹出的对话框中输入 Method Name: GetBookList,HTTP Method 选择默认的 GET, 点击 OK
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1
回复

使用道具 举报

该用户从未签到

2#
发表于 2011-6-7 22:22:02 | 只看该作者
我晕,这个是IBM网上的文章,你拿 过来竟然还要收费
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2011-6-17 16:09:39 | 只看该作者
不太厚道啊
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2011-8-3 11:29:25 | 只看该作者
回复 2# kyo19


晕,我那时不是没看到嘛,我发来给自己看的
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-10-1 07:29 , Processed in 0.087529 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表