转载: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. 【转】一个java页游服务器框架

    源地址:http://www.cnblogs.com/metoy/p/4305326.html?utm_source=tuicool&utm_medium=referral 一.前言 此游戏服 ...

  2. mysql查看语句执行状态的常见函数

    row_count() 返回上一个insert.update.delete语句的影响行数 found_rows() 返回上一个select查到的记录条数 last_insert_id() 返回上一次插 ...

  3. hdu3586 Information Disturbing 【树形dp】

    题目链接 hdu3586 题解 二分 + 简单的树形dp 我正有练一下dp的必要了 #include<iostream> #include<cstdio> #include&l ...

  4. Gym 100971B 水&愚

    Description standard input/output Announcement   Statements A permutation of n numbers is a sequence ...

  5. vue项目中使用阿里iconfont图标

    在上一篇文章中介绍了如何在vue项目中使用vue-awesome,如果你想了解,请移步<vue项目中使用vue-awesome> 这里介绍一下vue项目中如何使用阿里的iconfont图标 ...

  6. iterator & iterable

    一. java.lang.Iterable java.util.Iterator Iterator是迭代器类,而Iterable是接口. 好多类都实现了Iterable接口,这样对象就可以调用iter ...

  7. Treblecross(uva 10561)

    题意:一个 1 × n 的棋盘,有 X 和 :,当棋盘上出现三个连续的X 时游戏结束,两人轮流操作,每次能把一个 : 变成 X,问先手必胜方案数以及先手可以放的位置. /* 对于先手,当有一个'X'时 ...

  8. pat 甲级 1022. Digital Library (30)

    1022. Digital Library (30) 时间限制 1000 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A Di ...

  9. set基本用法---1

    #include<cstdio> #include<iostream> #include<cstdlib> #include<cmath> #inclu ...

  10. 解决mariadb数据库服务无法开启

    我的系统Manjaro linux,安装的数据库为mariadb 10.1 1.安装数据库 pacman -S mariadb 2.配置数据库启动环境: mysql_install_db --user ...