Rest-Assured完整的测试例子

来源:互联网 发布:mysql 表空间大小限制 编辑:程序博客网 时间:2024/05/18 01:22

参考资料: 
使用 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等。

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

1 0