RESTassured接口测试框架学习使用

文章目录

  • 写在前面
  • 依赖的引入
  • 简单示例
  • 关于 GET
    • headers 请求头
    • params 传参
  • 关于 PUT
    • header 请求头
    • 请求 contentType
    • body 体
  • 关于 extract
  • 关于 log
  • 关于断言

RESTassured接口测试框架学习使用_第1张图片

写在前面

java 的 mvn 依赖中有一个 httpclient 工具可以做到接口的访问,但是如果用 httpclient 去写大量的接口请求,会显得非常复杂且臃肿(除非你自己对 httpclient 进行封装弄一个好用的框架),如果我们使用 REST assured 来做大量的接口测试,则能大大提高脚本开发效率

是一个能够简化测试rest服务的 Java DSL,像 ruby 或者 python 一样的动态语言去测试和验证 http 服务。基于 java 并且兼容了 groovy 动态语言的特性,使我们像写脚本语言一样去测试 http 服务

依赖的引入

<dependency>
    <groupId>io.rest-assuredgroupId>
    <artifactId>rest-assuredartifactId>
    <version>4.2.0version>
dependency>

简单示例

get 访问百度,返回响应码,以及响应体信息

given()
    .get("https://www.baidu.com")
    .then()
    .statusCode(200)
    .log().all();

如果要做断言,REST assured 支持直接在 body() 中判断,而不是显示的直接使用 assert 去断言

given().when()
    .get()
    .then()
    .body("xxx", Matchers.equalTo("xxx"));

当然还可以使用 post 请求,还有指定请求的 contenttype 等等

对于提取返回的响应我们建议使用如下形式,它会返回一个 Response 对象,然后再通过 Response 中的 path() 方法即可拿到想要的 json 数据

given()
    .contentType("application/json")
    .put("xxx")
    .then()
    .extract().response();

关于 GET

headers 请求头

请求头有的需要添加一些必要信息,也就是键值对的形式

given().when()
    .header("aaa", "bbb")
    .get("...")
    .then()
    .log().all();

params 传参

一种思路是你直接写进 get() 方法中肯定 ok,另一种思路是你通过 param() 方法或者 params() 方法也是 ok 的

given().when()
    .param("xxx", "yyy")
    .param("aaa", "bbb")
    .get("...")
    .then()
    .log().all();

关于 PUT

header 请求头

和上面 GET 中使用方法一致

请求 contentType

contentType 为请求格式,你直接写成 “application/json” 也是没有问题的

given()
    .contentType(ContentType.JSON)
    .put("xxx")
    .then()
    .log().all();

body 体

given()
    .contentType(ContentType.JSON)
    .body("某个 json 字符串")
    .put("xxx")
    .then()
    .log().all();

关于 extract

用来提取信息响应信息,比如常见的提取响应体的 json 信息,返回的 Response 对象,我们从 Response 中调用 path() 方法可以拿到指定键的值

given()
    .contentType("application/json")
    .put("xxx")
    .then()
    .extract().response();

通常 ValidatableResponse 会有 extract() 这个方法,所以对于下面几种写法都是可以调用 extrat()

// 方式一
.then()
    .extract().response();

// 方式二(方式二只不过比方式一多了 log 输出,其他效果同)
.then().log().all()
    .extract().response();

// 方式三(方式三也是多了个 log)
.then().log().body()
    .extract().response();

// 方式四(比方式一多了一个断言机制)
.then().body(Matchers 断言匹配与否)
    .extract().resposne();

// 方式五(和方式四一样,多了一个 log 日志)
.then().log().all().body(Matchers 断言匹配与否)
    .extract().response();

关于 log

当我们加上 log 后便于我们在控制台可以很方便的查看到 log 日志输出,输出的是接口响应返回的结果,下面举了个简单的 PUT 的例子

given()
    .contentType(ContentType.JSON)
    .body("某个 json 字符串")
    .put("xxx")
    .then()
    .log().all();

关于断言

REST assured 可以使用 body() 方法中的 hamcrest 依赖的 Matcher 来直接代替断言,或者使用 Response 提取字段来 assert,具体的使用可以查看博主的另一篇博文https://blog.csdn.net/abcnull/article/details/108062414

当然这类还会介绍一些 REST assured 断言的细节,比如对于 json 的数据使用很灵活的层级关系去匹配断言

given()
    .contentType(ContentType.JSON)
    .body("某个 json 字符串")
    .put("xxx")
    .then()
    .body("aaa.bbb", Matchers.is("ccc"))

而产生响应的 json 是如下

{
    "aaa" : {
        "bbb" : "ccc"
    }
}

而对于 json 中同键名有多个怎么断言呢?或者说 json 中存在数组的形式,数组中可能不同元素中有重名的键。代码如下

given()
    .contentType(ContentType.JSON)
    .body("某个 json 字符串")
    .put("xxx")
    .then()
    .body("aaa.bbb", Matchers.haItem("ccc", "ddd"))

json 如下

{
    "aaa" : [{
        "bbb" : "ccc"
    },{
        "bbb" : "ddd"
	}]
}

同时值得注意的是 body() 后可以接着 body() 连着写进而连着断言。REST assured 的 body() 方法中可以做非常丰富且灵活的断言,还需要自行探索!

你可能感兴趣的:(REST,Assured)