Rest-Assured完整的测试例子
参考资料:
使用 Rest-Assured 测试 REST API
使用 REST-Assured 测试 REST API 的进阶技巧和最佳实践
1.准备
- eclipse、jdk、maven
- 新建好一个maven项目
- 下载并安装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完整的测试例子相关推荐
- 一个完整利用InternetOpen等系列函数进行下载的测试例子
2011-08-14 12:03 一个完整利用InternetOpen等系列函数进行下载的测试例子 // TODO: Add extra validation here HINTERNET hsse ...
- unity蒙板测试例子——传送门
返回目录 Unity蒙板测试例子--传送门 一.例子介绍 大家好,我是阿赵. 蒙板测试(Stencil Test)是渲染管线的合并输出环节里面的一种测试,和透明度测试或者深度测试一样,它实际上也是控制 ...
- InternetOpen系列函数进行下载的测试例子
转自 :http://hi.baidu.com/wlpscu/item/d10a2a0ecf14b491a2df4376 一个完整利用InternetOpen等系列函数进行下载的测试例子 // TOD ...
- 实际测试例子+源码分析的方式解剖MyBatis缓存的概念
前言: 前方高能! 本文内容有点多,通过实际测试例子+源码分析的方式解剖MyBatis缓存的概念,对这方面有兴趣的小伙伴请继续看下去~ 欢迎工作一到五年的Java工程师朋友们加入Java架构开发:79 ...
- MySQL笔记12:C语言访问MYSQL数据库的完整的代码例子
C语言访问MYSQL数据库的完整的代码例子 1.手写安装带mysql sdk 的mysql 2.新建控制台项目,项目属性中把 C:\Program Files\MySQL\MySQL Server 5 ...
- 一个简单的epoll测试例子
一个简单的epoll测试例子 一段简单的epoll测试例子,编译运行后可以直接用浏览器访问localhost来测试. 1 #include <unistd.h> 2 #include &l ...
- mysql一张表最多多少索引_MySQL一个索引最多有多少个列?真实的测试例子
MySQL一个索引最多有多少个列?真实的测试例子 更新时间:2009年07月01日 22:22:21 作者: MySQL一个索引最多有多少个列?下面是具体的实现代码. 最多16列. create ...
- [转]Android Service Test——简单测试例子
本文转自:http://cmk128.chinaunix.com/space.php?uid=20771867&do=blog&id=134316 前两篇文章对Android Serv ...
- Hibernate初次搭建与第一个测试例子
今年学了两个框架,今年重装了两次myeclipse,我能怎么办,我也很无奈 安装myeclipse2017 stable2.0 https://www.52pojie.cn/thread-687683 ...
最新文章
- 过年期间:这个 GitHub 项目你必能用到
- UIPickerView详解
- Django 权限管理-后台根据用户权限动态生成菜单
- 又翻出来老电视剧看了看....
- 微信小程序笔记六模块化 —— module.exports
- 用scrapy框架爬虫时遇到的错误ValueError: Missing scheme in request url: //scpic3.chinaz.net/Files/pic/pic 9/2021
- linux移动文件_Linux基础
- 递归函数与二分查找算法
- ApiPost简单的接口测试教程
- 程控电源测试使用小记
- 使用vue实现的人物关系图谱
- C/C++ DNS 查询IP地址
- 一个产品人和“阿里云”的故事
- oracle付款汇兑损益怎么产生,月末汇兑损益怎么算调整分录如何做
- windows--花里胡哨的文件图标
- 将VSCode语言环境设置为中文
- 计算机网络安全基础东南大学,设计(东南大学计算机网络与安全).doc
- 我国人口14亿人那为什么汉语编程没有办法成为主流?
- faker和劫的图片_LOL6.18版冠军皮肤劫图片曝光 专为Faker制作
- C语言入门——时间换算
热门文章
- 分享几款可以说是神器的高质量app
- 解决find: paths must precede expression
- ubuntu安装NVIDIA显卡驱动后图形用户界面卡死现象
- 海康威视E3000 笔记本SSD固态硬盘M.2接口(NVMe协议)
- java beanshell_BeanShell用法汇总(部分摘抄至网络)
- 技术控:巧将闲置旧手机电脑变成免费远程摄像头网络监控防盗系统
- Java实现 “ 将数字金额转为大写中文金额 ”
- 电子商务(Electronic Commerce)
- 计算机专业江汉大学,2019江汉大学专业排名
- vueX 自动匹配modules,vueX插件vuex-persistedstate自动存储本地