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


    转载: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等。

  • 相关阅读:
    字典列表元组的推导式使用方法
    算法之排序
    闭包与装饰器
    循环(打印一些小东西)
    iOS内存小知识
    NSset
    字典
    NSNumber
    NSString
    NSArray
  • 原文地址:https://www.cnblogs.com/ceshi2016/p/6735033.html
Copyright © 2020-2023  润新知