• 一文搞定自动化测试框架 RESTAssured 实践(三):对 Response 结果导出


    文章霍格沃兹测试学院

    rest-assured对响应结果的导出

    这里将继续研究rest-assured对响应结果的更新获取,现有一个登录接口auth / oauth / token,接口的部分返回值如下:

    HTTP/1.1 200 OK
    Server: nginx/1.12.2
    Date: Mon, 13 Jan 2020 02:15:11 GMT
    Content-Type: application/json;charset=UTF-8
    Transfer-Encoding: chunked
    Expires: 0
    Cache-Control: no-cache, no-store, max-age=0, must-revalidate
    X-XSS-Protection: 1; mode=block
    Pragma: no-cache
    X-Frame-Options: DENY
    X-Content-Type-Options: nosniff
    Proxy-Connection: keep-alive

    {
    "code": 1,
    "msg": null,
    "data": {
    "tenant_id": 6,
    "userType": "1",
    "dept_id": 0,
    "user_id": 6,
    "username": "xxx",
    "jti": "afeb93f8-e4e4-4c15-955b-90cee130c4c7",
    "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.exxxzciLCJjbGllbnRfaWQiOiJzeXN0ZW0iLCJ1c2VybmFtZSI6InFpbnpoZW4ifQ.6NQmjJp_9XSveOaATNLjtTktWe6_WjHY0o9NbBUdDx8",
    "expires_in": 9999999,
    "token_type": "bearer"
    }
    ...
    }

    语法演示

    注:因这篇文章的主要目的是演示返回值的启动功能,所以演示代码中将省略请求参数部分,如需了解可参考文章往期文章。

    extract()。path()
    extract是我们获取返回值的核心,通过它来规范后面需要获取的内容,path()中的语法同断言时的JsonPath一致,例如我们现在要获取user_id,写法如下:

    @Test
    void login(){
    .. .
    when()
    .log().all().post("http://47.xxx.xxx.133/auth/oauth/token").
    then()
    .log().all().statusCode(200).body("code",equalTo(1))
    .extract().path("data.user_id");
    System.out.println("返回id的值是:"+id);
    }

    运行结果:

    自动化测试框架RESTAssured实践(三):对响应结果导出

     

    extract()。asString()有时候我们可能需要获取ResponseBody中的多个值,例如我们现在想要获取返回物体body中的dept_id和user_id,我们就可以利用extract()。asString()先将响应结果以JSON形式的形式保存下来,再一一根据需要获取,具体写法如下:

    @Test
    void login(){
    .. .
    when()
    .log().all().post("http://47.xxx.xxx.133/auth/oauth/token").
    then()
    .log().all().statusCode(200).body("code",equalTo(1))
    .extract().asString();
    System.out.println("返回body的值是:"+json);
    System.out.println("获取user_id的值是:"+ from(json).get("data.user_id"));
    System.out.println("获取dept_id的值是:"+ from(json).get("data.dept_id"));
    }

    运行结果:

    自动化测试框架RESTAssured实践(三):对响应结果导出

     

    注:这里用到的是从rest-assured的,不要导错包了:import static io.restassured.path.json.JsonPath.from;

    extract()。response()上面都是对响应体的结果进行转换,但是实际工作中我们的需求远不止于此,我们可能还需要响应头等信息,例如某些接口的令牌,就可能会在响应信息的Header中返回;

    这个时候就可以利用extract()。response()假定所有的response信息都保存成一个Response对象:

    @Test
    void login(){
    .. .
    when()
    .log().all().post("http://47.xxx.xxx.133/auth/oauth/token").
    then()
    .log().all().statusCode(200).body("code",equalTo(1))
    .extract().response();
    System.out.println("返回response是:"+response);
    }

    运行结果:

    自动化测试框架RESTAssured实践(三):对响应结果导出

     

    然后在利用各种Response.get方法来获取。

    1)获取所有的标题

    @Test
    void login(){
    .. .
    when()
    .log().all().post("http://47.xxx.xxx.133/auth/oauth/token").
    then()
    .log().all().statusCode(200).body("code",equalTo(1))
    .extract().response();
    System.out.println("返回headers是: "+response.getHeaders());
    }

    运行结果:

    自动化测试框架RESTAssured实践(三):对响应结果导出

     

    2)获取某人头值类似的键,值的结构,使用getHeader(“ headerName”)就可以,例如我们这里要获取Content-type的值:

    @Test
    void login(){
    .. .
    when()
    .log().all().post("http://47.xxx.xxx.133/auth/oauth/token").
    then()
    .log().all().statusCode(200).body("code",equalTo(1))
    .extract().response();
    System.out.println("返回Content-Type是: "+response.getHeader("Content-Type"));
    }

    运行结果:

    自动化测试框架RESTAssured实践(三):对响应结果导出

     

    3)获取状态行——getStatusLine()

    @Test
    void login(){
    .. .
    when()
    .log().all().post("http://47.xxx.xxx.133/auth/oauth/token").
    then()
    .log().all().statusCode(200).body("code",equalTo(1))
    .extract().response();
    System.out.println("返回StatusLine是: "+response.getStatusLine());
    }

    运行结果:

    自动化测试框架RESTAssured实践(三):对响应结果导出

     

    4)获取状态码——getStatusCode()

    @Test
    void login(){
    .. .
    when()
    .log().all().post("http://47.xxx.xxx.133/auth/oauth/token").
    then()
    .log().all().statusCode(200).body("code",equalTo(1))
    .extract().response();
    System.out.println("返回StatusCode是: "+response.getStatusCode());
    }

    运行结果:

    自动化测试框架RESTAssured实践(三):对响应结果导出

     

    5)获取cookie——getCookies(),getCookie(“ cookieName”)可以确保为我们提供方便的获取cookie的方法;因本例中无cookies返回,所以仅展示代码语法,有需要的可自行测试或参考官方文档

    // Get all cookies as simple name-value pairs
    Map<String, String> allCookies = response.getCookies();
    // Get a single cookie value:
    String cookieValue = response.getCookie("cookieName");

    (文章附带霍格沃兹测试学院)

    更多内容可点击:https://shimo.im/docs/63w96qK9xpkH96hT/read

    同时也可以关注我的公众号:霍格沃兹测试学院

    34g软件测试开发、自动化资料教程群文件免费下载:Q群145743285

  • 相关阅读:
    单元测试
    Go 语言基础语法
    Go 切片
    Beego环境搭建和bee工具安装使用(绝对可成功)
    Go 语言安装以及BeeGo环境配置
    解决安装了Phpstudy和本地数据库冲突的问题
    Go语言入门学习指南
    day74:drf:drf其他功能:认证/权限/限流/过滤/排序/分页/异常处理&自动生成接口文档
    day73:drf:drf视图相关类&路由Routers&创建虚拟环境
    day72:drf:反序列化功能&模型类序列化器Modelserializer&drf视图APIView
  • 原文地址:https://www.cnblogs.com/hogwarts/p/12894888.html
Copyright © 2020-2023  润新知