rest-assured接口测试学习(一)

作者: DayBreakL | 来源:发表于2019-03-22 00:04 被阅读13次

    一、rest-assured介绍

    rest-assured是github上一个开源项目。
    地址:https://github.com/rest-assured/rest-assured
    作者言:

    Testing and validation of REST services in Java is harder than in dynamic languages such as Ruby and Groovy. REST Assured brings the simplicity of using these languages into the Java domain.

    优点:
    简约的接口测试DSL
    支持xml json的结构化解析
    支持xpath jsonpath gpath等多种解析方式
    对spring的支持比较全面

    二、restassured接口测试步骤

    1. IDEA创建maven项目
    2. 添加依赖 restassured junit
    3. 编写用例
    4. 添加断言
    5. 调试

    三、demo演练

    在IDEA中新建一个maven项目,then……

    1. pom.xml文件中添加依赖:
     <dependencies>
            <dependency>
                <groupId>io.rest-assured</groupId>
                <artifactId>rest-assured</artifactId>
                <version>3.3.0</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
    1. src/test/java下new一个RestDemo.class
      开源wiki中说需要Static imports一下几个包。即静态导入:
    import static io.restassured.RestAssured.given;
    import static io.restassured.matcher.RestAssuredMatchers.*;
    import static org.hamcrest.Matchers.*;
    
    1. 最简单的代码:
    public class RestDemo {
        @Test
        public void testGetHtml(){
            given().get("http://www.baidu.com").then().statusCode(200);
        }
    }
    

    表示发送一个get请求,url是http://www.baidu.comthen()是断言,statusCode(200)是响应状态码等于200。

    1. 打印log
    public class RestDemo {
        @Test
        public void testGetHtml(){
            given().log().all().get("http://www.baidu.com").then().log().all().statusCode(200);
        }
    

    log().all():打印所有log,可以查看有请求和响应的信息


    可以使用这样的格式写:

    //百度搜索Mp3
    @Test
        public void testMp3(){
            given()
                    .get("http://www.baidu.com/s?wd=mp3")
                    .then().log().all().statusCode(200);
        }
    
    1. restassured最期望的格式:
        @Test
        public void testMp3(){
            given()
                    .queryParam("wd","mp3")
            .when()
                    .get("http://www.baidu.com/s")
            .then()
                    .log().all()
                    .statusCode(200);
        }
    }
    

    given():一次网络请求所需要的条件都写在这里,头信息、query参数
    when():触发条件
    then():断言

    1. demo演练:
      (1)抓取真实接口,以xueqiu.com搜索接口为例




      (2)new一个Xueqiu.class文件

    public class Xueqiu {
      @Test
      public void testSearch() {
        given()
                .queryParam("code", "sogo")
        .when()
                .get("https://xueqiu.com/stock/search.json")
        .then()
                .log().all()
                .statusCode(200);
      }
    }
    

    (3)run一下,提示错误:


    (4)打印log,查找错误:

    通过与f12抓的包对比,发现Cookie没有值:

    复制抓到的Cookie值


    现在请求可以正常发送,也有结果返回了,根据结果修改我们的断言。

    (5)调整断言:断言stocks下面的name值为搜狗:
    .body("stocks.name",hasItems("搜狗"));

    stocks.name根节点.子节点
    .body() 可以无限的写下去
    image.png
    当实际结果不符合断言会怎样呢?
    假如我们把断言改成“sogo”,让其实际结果不符合预期
    .body("stocks.code",hasItems("sogo"))

    7.demo演练代码

    import org.junit.Test;
    import static io.restassured.RestAssured.given;
    import static org.hamcrest.Matchers.hasItems;
    
    public class Xueqiu {
      @Test
      public void testSearch() {
        //given开头表示输入数据
        given().log().all()
                //query请求参数
                .queryParam("code", "sogo")
                //头信息
                .header("Cookie","_ga=GA1.2.506579530.1552574503; device_id=0158c91c7ecd8e4d248a54002af6d8ae; aliyungf_tc=AQAAAIatGzFrQgoAJGDMeOsikkxtPFqv; xq_a_token=682c39a460645dafb1ff41f67e0efccba8b0f118; xq_a_token.sig=Bg9acTC-woVSsS6DZvdAtd40CQU; xq_r_token=798a7cab8cd606f61a09fbac15374f1172b00607; xq_r_token.sig=sHSWFNmu_GqEUOK9A-6umfNgFcU; _gid=GA1.2.841306833.1553178554; Hm_lvt_1db88642e346389874251b5a1eded6e3=1552574504,1552736056,1553178554; u=881553178554746; _gat=1; Hm_lpvt_1db88642e346389874251b5a1eded6e3=1553180196")
        //when表示触发条件
         .when()
                .get("https://xueqiu.com/stock/search.json")
         //then对结果断言
        .then()
                //打印log
                .log().all()
                //断言状态码
                .statusCode(200)
                //字段断言
                .body("stocks.name",hasItems("搜狗"))
                .body("stocks.code",hasItems("sogo"));
      }
    }
    

    相关文章

      网友评论

        本文标题:rest-assured接口测试学习(一)

        本文链接:https://www.haomeiwen.com/subject/pfbxvqtx.html