使用REST-Assured对API接口进行自动化测试

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

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

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

1.准备

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

2.目标

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

3.开始编码

1)修改pom.xmljson

<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返回信息:api

{
    "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验证返回数据markdown

  • 一个个参数的去验证,测试用例会很是多,代码也会很冗长。若是咱们使用 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")); }

  验证能够测试成功。cookie

4.总结

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

相关文章
相关标签/搜索