参考资料: 
使用 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 {@Beforepublic void before() {RestAssured.baseURI = "http://api.douban.com/v2/book";RestAssured.port = 80;}@Test//URL为http://api.douban.com/v2/book/1220562//判断Json中的返回信息titlepublic 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//解析JSONpublic void testParseJson() {ValidatableResponse resp = get("/1220562").then();//判断返回Json数据的titleresp.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("[日] 片山恭一"));}@Afterpublic 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验证返回数据@Testpublic 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等。

原文地址: http://blog.csdn.net/u012050416/article/details/50674612, 谢谢分享

Rest-Assured完整的测试例子相关推荐

  1. 一个完整利用InternetOpen等系列函数进行下载的测试例子

    2011-08-14 12:03 一个完整利用InternetOpen等系列函数进行下载的测试例子 // TODO: Add extra validation here  HINTERNET hsse ...

  2. unity蒙板测试例子——传送门

    返回目录 Unity蒙板测试例子--传送门 一.例子介绍 大家好,我是阿赵. 蒙板测试(Stencil Test)是渲染管线的合并输出环节里面的一种测试,和透明度测试或者深度测试一样,它实际上也是控制 ...

  3. InternetOpen系列函数进行下载的测试例子

    转自 :http://hi.baidu.com/wlpscu/item/d10a2a0ecf14b491a2df4376 一个完整利用InternetOpen等系列函数进行下载的测试例子 // TOD ...

  4. 实际测试例子+源码分析的方式解剖MyBatis缓存的概念

    前言: 前方高能! 本文内容有点多,通过实际测试例子+源码分析的方式解剖MyBatis缓存的概念,对这方面有兴趣的小伙伴请继续看下去~ 欢迎工作一到五年的Java工程师朋友们加入Java架构开发:79 ...

  5. MySQL笔记12:C语言访问MYSQL数据库的完整的代码例子

    C语言访问MYSQL数据库的完整的代码例子 1.手写安装带mysql sdk 的mysql 2.新建控制台项目,项目属性中把 C:\Program Files\MySQL\MySQL Server 5 ...

  6. 一个简单的epoll测试例子

    一个简单的epoll测试例子 一段简单的epoll测试例子,编译运行后可以直接用浏览器访问localhost来测试. 1 #include <unistd.h> 2 #include &l ...

  7. mysql一张表最多多少索引_MySQL一个索引最多有多少个列?真实的测试例子

    MySQL一个索引最多有多少个列?真实的测试例子 更新时间:2009年07月01日 22:22:21   作者: MySQL一个索引最多有多少个列?下面是具体的实现代码. 最多16列. create ...

  8. [转]Android Service Test——简单测试例子

    本文转自:http://cmk128.chinaunix.com/space.php?uid=20771867&do=blog&id=134316 前两篇文章对Android Serv ...

  9. Hibernate初次搭建与第一个测试例子

    今年学了两个框架,今年重装了两次myeclipse,我能怎么办,我也很无奈 安装myeclipse2017 stable2.0 https://www.52pojie.cn/thread-687683 ...

最新文章

  1. 过年期间:这个 GitHub 项目你必能用到
  2. UIPickerView详解
  3. Django 权限管理-后台根据用户权限动态生成菜单
  4. 又翻出来老电视剧看了看....
  5. 微信小程序笔记六模块化 —— module.exports
  6. 用scrapy框架爬虫时遇到的错误ValueError: Missing scheme in request url: //scpic3.chinaz.net/Files/pic/pic 9/2021
  7. linux移动文件_Linux基础
  8. 递归函数与二分查找算法
  9. ApiPost简单的接口测试教程
  10. 程控电源测试使用小记
  11. 使用vue实现的人物关系图谱
  12. C/C++ DNS 查询IP地址
  13. 一个产品人和“阿里云”的故事
  14. oracle付款汇兑损益怎么产生,月末汇兑损益怎么算调整分录如何做
  15. windows--花里胡哨的文件图标
  16. 将VSCode语言环境设置为中文
  17. 计算机网络安全基础东南大学,设计(东南大学计算机网络与安全).doc
  18. 我国人口14亿人那为什么汉语编程没有办法成为主流?
  19. faker和劫的图片_LOL6.18版冠军皮肤劫图片曝光 专为Faker制作
  20. C语言入门——时间换算

热门文章

  1. 分享几款可以说是神器的高质量app
  2. 解决find: paths must precede expression
  3. ubuntu安装NVIDIA显卡驱动后图形用户界面卡死现象
  4. 海康威视E3000 笔记本SSD固态硬盘M.2接口(NVMe协议)
  5. java beanshell_BeanShell用法汇总(部分摘抄至网络)
  6. 技术控:巧将闲置旧手机电脑变成免费远程摄像头网络监控防盗系统
  7. Java实现 “ 将数字金额转为大写中文金额 ”
  8. 电子商务(Electronic Commerce)
  9. 计算机专业江汉大学,2019江汉大学专业排名
  10. vueX 自动匹配modules,vueX插件vuex-persistedstate自动存储本地