转载:http://blog.csdn.net/u012050416/article/details/50674612

  1. 准备
  2. 目标
  3. 开始编码
  4. 总结
 

  说明:本文只是一个getStart示例,关键在于让自己(新手)能快速地对REST-Assured自动化测试有个大概的认识,下面开始。 
参考资料: 
使用 Rest-Assured 测试 REST API 
使用 REST-Assured 测试 REST API 的进阶技巧和最佳实践

1.准备

  1. eclipse、jdk、maven
  2. 新建好一个maven项目
  3. 下载并安装RestClient客户端

2.目标

  • 对豆瓣API进行自动化测试

3.开始编码

1)修改pom.xml

        <dependency>
<groupId>com.jayway.restassured</groupId>
<artifactId>rest-assured</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
<version>1.3</version>
</dependency>

2)查看豆瓣的开发者文档 
  找到搜索图书的API,显示为GET https://api.douban.com/v2/book/:id 
那么只需要找到某个图书的id替换URL中的:id即可。 
  为了测试需要,我们打开上面要求下载好的RestClient客户端,输入http://api.douban.com/v2/book/1220562,选择访问方法为GET,前往访问,会获得如下的Json返回信息:

{
"rating": {
"max": 10,
"numRaters": 348,
"average": "7.0",
"min": 0
},
"subtitle": "",
"author": [
"[日] 片山恭一"
],
"pubdate": "2005-1",
"tags": [
{
"count": 136,
"name": "片山恭一",
"title": "片山恭一"
},
{
"count": 63,
"name": "日本",
"title": "日本"
},
{
"count": 61,
"name": "日本文学",
"title": "日本文学"
},
{
"count": 38,
"name": "小说",
"title": "小说"
},
{
"count": 32,
"name": "满月之夜白鲸现",
"title": "满月之夜白鲸现"
},
{
"count": 15,
"name": "爱情",
"title": "爱情"
},
{
"count": 8,
"name": "純愛",
"title": "純愛"
},
{
"count": 8,
"name": "外国文学",
"title": "外国文学"
}
],
"origin_title": "",
"image": "http://img3.douban.com/mpic/s1747553.jpg",
"binding": "平装",
"translator": [
"豫人"
],
"catalog": "
",
"pages": "180",
"images": {
"small": "http://img3.douban.com/spic/s1747553.jpg",
"large": "http://img3.douban.com/lpic/s1747553.jpg",
"medium": "http://img3.douban.com/mpic/s1747553.jpg"
},
"alt": "http://book.douban.com/subject/1220562/",
"id": "1220562",
"publisher": "青岛出版社",
"isbn10": "7543632608",
"isbn13": "9787543632608",
"title": "满月之夜白鲸现",
"url": "http://api.douban.com/v2/book/1220562",
"alt_title": "",
"author_intro": "",
"summary": "那一年,是听莫扎特、钓鲈鱼和家庭破裂的一年。说到家庭破裂,母亲怪自己当初没有找到好男人,父亲则认为当时是被狐狸精迷住了眼,失常的是母亲,但出问题的是父亲……。",
"price": "15.00元"
}

  注意,RestClient返回的Json不太容易看得清楚,可以选择Json在线转换工具进行格式化。以上返回信息就是格式化后的。 
3)创建Java类取名为ExampleForDoubanAPI.java

import com.jayway.restassured.RestAssured;
import com.jayway.restassured.response.ValidatableResponse;
import static com.jayway.restassured.module.jsv.JsonSchemaValidator.matchesJsonSchemaInClasspath;
import static com.jayway.restassured.RestAssured.*;
import static org.hamcrest.Matchers.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test; public class ExampleForDoubanAPI { @Before
public void before() {
RestAssured.baseURI = "http://api.douban.com/v2/book";
RestAssured.port = 80;
} @Test
//URL为http://api.douban.com/v2/book/1220562
//判断Json中的返回信息title
public void testGetBook() {
get("/1220562").then().body("title", equalTo("满月之夜白鲸现"));
} @Test
//URL为http://api.douban.com/v2/book/search?q=java8
//判断Json中的返回信息关键字为“java8”的书本的数目
public void testSearchBook() {
given().param("q", "java8").when().get("/search").then().body("count", equalTo(2));
} @Test
//解析JSON
public void testParseJson() {
ValidatableResponse resp = get("/1220562").then();
//判断返回Json数据的title
resp.body("title", equalTo("满月之夜白鲸现"));
//判断二级属性rating.max的值
resp.body("rating.max", equalTo(10));
//调用数组的方法判断数组的大小
resp.body("tags.size()", is(8));
//判断数组第一个对象的值
resp.body("tags[0].name", equalTo("片山恭一"));
//判断数组中是否有该元素
resp.body("author", hasItems("[日] 片山恭一"));
} @After
public void after() {
} }

  如上三个测试用例都可以运行成功。 
4)使用Json Schema验证返回数据

  • 一个个参数的去验证,测试用例会非常多,代码也会很冗长。如果我们使用 Json schema 去验证的话,就会大大减少用例和代码数量。
  • Json schema 描述了 Json 的数据格式,是一种元数据,它非常简单易读。只要返回的Json符合Json Schema的要求,就可以通过测试。
  • 对于简单的 Json 返回体,我们可以根据需求来自己创建 Json Schema,但是对于复杂的返回体,这个过程也挺累人的。为了方便起见,我可以用Json Schema 生成工具
  • 对于如上http://api.douban.com/v2/book/1220562返回的Json可以生成相应的Json Schema。此处略去。将它拷贝出来,放到新文件douban.json中去。
  • 将douban.json放到Maven工程的src/main/resources源文件夹下面即可。
  • 增加pom.xml中需要的jar包并在ExampleForDoubanAPI.java中增加测试用例。
        <dependency>
<groupId>com.jayway.restassured</groupId>
<artifactId>json-schema-validator</artifactId>
<version>2.8.0</version>
</dependency>
//使用Json Schema验证返回数据
@Test
public void testJsonScheme() {
expect().statusCode(200).given().auth().preemptive().basic("", "")
.headers("Accept", "application/JSON").when().get("http://api.douban.com/v2/book/1220562")
.then().assertThat().body(matchesJsonSchemaInClasspath("douban.json"));
}

  验证可以测试成功。

4.总结

  API自动化测试总体来说要比UI自动化测试简单一些,本例子中只是用GET方法进行简单地测试介绍,还有更多的课题,比如PUT,POST,DELETE等方法的测试,还有需要在HTTP协议的header和body中增加参数,以及session,cookie等。

使用REST-Assured对API接口进行自动化测试的更多相关文章

  1. REST API 自动化测试 利器Rest Assured(API接口自动化测试框架体系)

    现在,越来越多的 Web 应用转向了 RESTful 的架构,很多产品和应用暴露给用户的往往就是一组 REST API,这样有一个好处,用户可以根据需要,调用不同的 API,整合出自己的应用出来.从这 ...

  2. 10.API 接口自动化测试的基本原理

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 28.0px Helvetica } p.p2 { margin: 0.0px 0.0px 0.0px 0. ...

  3. itnesse实现api接口自动化测试学习

    上午在园子里乱逛,看了不少小伙伴们分享的接口测试方面的知识,大家所叙述到的一些经验或多或少,我也曾遇到过,突然意识到知识的点滴积累是多么的重要,我记得我最早接触接口测试的时候,就是只在浏览器里人工测试 ...

  4. 利用fitnesse实现api接口自动化测试

    上午在园子里乱逛,看了不少小伙伴们分享的接口测试方面的知识,仔细想想,我做接口测试也有几个年头了,大家所叙述到的一些经验或多或少,我也曾遇到过,突然意识到知识的点滴积累是多么的重要,我记得我最早接触接 ...

  5. API接口自动化之3 同一个war包中多个接口做自动化测试

    同一个war包中多个接口做自动化测试 一个接口用一个测试类,每个测试用例如下,比如下面是4个测试用例,每个详细的测试用例中含有请求入参,返回体校验,以此来判断每条测试用例是否通过 一个war包中,若含 ...

  6. 分享一个开源免费、目前最好的API接口管理平台----eoLinker

    一.概况 eoLinker 是目前业内领先.国内最大的在线 API 接口管理平台,提供自动生成 API 文档.API 自动化测试.Mock 测试.团队协作等功能,旨在解决由于前后端分离导致的开发效率低 ...

  7. 使用RAP2和Mock.JS实现Web API接口的数据模拟和测试

    最近一直在思考如何对Web API的其接口数据进行独立开发的问题,随着Web API的越来越广泛应用,很多开发也要求前端后端分离,例如统一的Web API接口后,Winform团队.Web前端团队.微 ...

  8. Django使用AJAX调用自己写的API接口

    Django使用AJAX调用自己写的API接口 *** 具体代码和数据已上传到github https://github.com/PythonerKK/eleme-api-by-django-rest ...

  9. Eolinker API 接口文档神器

    Eolinker API 接口文档神器 群里小伙伴推荐的,还没有去研究,先记下来. API文档管理.自动化测试.开发协作利器 正在为数万企业管理超过100万APIs,提高开发效率以及规范开发流程

随机推荐

  1. [openjudge6043]哆啦A梦的时光机

    [openjudge6043]哆啦A梦的时光机 试题描述 哆啦A梦有一个神奇的道具:时光机.坐着它,大雄和他的伙伴们能穿越时空,回到过去或者去到未来. 有一天,大雄和他的伙伴们想穿越时空进行探险,可是 ...

  2. HDU 5307 He is Flying ——FFT

    卷积的妙用,显然我们可以求出所有符合条件的右端点的和,然后减去左端点的和. 就是最后的答案.然后做一次前缀和,然后就变成了统计差是一个定值的情况. 令$A(s[i])++$ $B(s[i])+=i$ ...

  3. POJ3678 Katu Puzzle 【2-sat】

    题目 Katu Puzzle is presented as a directed graph G(V, E) with each edge e(a, b) labeled by a boolean ...

  4. Python之时间:calender模块(日历)

    import calendar 1.星期 (1)calendar.day_name 星期的全称 print calendar.day_name for i in calendar.day_name: ...

  5. Django使用js,css等静态文件的时候,出现mime类型问题

    使用adminLTE模板, return render(request, 'AdminLTE/index.html') 的时候报如下错误且页面渲染异常,css没有效果: Resource interp ...

  6. EclEmma Java Code Coverage for Eclipse

      1. 1EclEmma的介绍 一.EclEmma 简介: EclEmma是一个开源的软件测试工具(for eclipse),可以在编码过程中查看代码调用情况.也可以检测单覆盖率. 详见: http ...

  7. EasyUI中combogrid设置onSelect后 获取不到getSelecte问题解决

    $('#person').combogrid({ onSelect: function(index, item){ $('#dataForm').form('load', item); $(" ...

  8. kernel thread vs user thread

    The most important difference is they use different memory, the kernel mode thread can access any ke ...

  9. [bzoj 3048] [Usaco2013 Jan]Cow Lineup

    [bzoj 3048] [Usaco2013 Jan]Cow Lineup Description 给你一个长度为n(1<=n<=100,000)的自然数数列,其中每一个数都小于等于10亿 ...

  10. sql2008安装时 重新启动计算机 失败

    原文发布时间为:2010-11-02 -- 来源于本人的百度文章 [由搬家工具导入] sql2008安装时 重新启动计算机 失败解决方法:regedit 运行 打开注册表,找到HKEY_LOCAL_M ...