接口测试 Rest-Assured 使用指南

REST Assured 是一个轻量化接口测试框架,它支持发起POST,GET,PUT,DELETE,OPTIONS,PATCH和HEAD请求,并且可以用来验证和校对这些请求的响应信息。

1.配置Java环境,新建maven工程,导入jar包

<!-- rest assured-->

<dependency>

<groupId>io.rest-assured</groupId>

<artifactId>rest-assured</artifactId>

<version>4.3.1</version>

<scope>test</scope>

</dependency>

<dependency>

<groupId>io.rest-assured</groupId>

<artifactId>json-path</artifactId>

<version>4.3.1</version>

<scope>test</scope>

</dependency>
接口测试 Rest-Assured 使用指南

2.导入RestAssured(静态导入方法,以提高使用rest-assured的效率)

import io.restassured.RestAssured.*; import io.restassured.matcher.RestAssuredMatchers.*; import org.hamcrest.Matchers.*;

 

3.开始编写脚本,下边是一个有参数的post请求

@Test

void restGet(){

given()

.get("https://www.baidu.com/")

.then()

.statusCode(200)

.log().all();

}
接口测试 Rest-Assured 使用指南

 

实列一,验证以下接口返回的数据是否包含某个值

返回数据:

{

"description":"返回json接口",

"request":{

"uri":"/litty",

"method":"get"

},

"response":{

"json":{

"lotto":{

"lottoId":5,

"winning-numbers":[2,45,34,23,7,5,3],

"winners":[{

"winnerId":23,

"numbers":[2,45,34,23,3,5]

},{

"winnerId":54,

"numbers":[52,3,12,11,18,22]

}]

}

}

}

}
接口测试 Rest-Assured 使用指南

 

接口测试 Rest-Assured 使用指南接口测试 Rest-Assured 使用指南

使用mococo模拟,进入到路径执行以下命令、

接口测试 Rest-Assured 使用指南接口测试 Rest-Assured 使用指南

 

执行成功:

接口测试 Rest-Assured 使用指南接口测试 Rest-Assured 使用指南

 

验证返回参数 int类型

equalTo()方法和 hasItems()方法是属于 Hamcrest matchers 的方法,所有我们需要静态导入 org.hamcrest.Matchers 

@Test

void assertJson(){

given()

.get("http://127.0.0.1:8888/litty")

.then()

// import static org.hamcrest.Matchers.*;

.body("litty.littyId",equalTo(5));

}

接口测试 Rest-Assured 使用指南
@Test

void assertJsonFind(){

given()

.when()

.log().all().get("http://127.0.0.1:8888/litty")

.then()

.log().all()

// 我们可以在findAll方法中写筛选条件,例如我们想取winnerId的值在大于或等于30小于60之间的结果进行断言,具体写法如下:

.body("litty.winners.find{ winners -> winners.winnerId >= 30 && winners.winnerId < 60}.winnerId",equalTo(54));

}
接口测试 Rest-Assured 使用指南



@Test

void assertJsonA(){ // 验证数据是否包含 hasItem

given()

.get("http://127.0.0.1:8888/litty")

.then()

// import static org.hamcrest.Matchers.*;

.body("litty.littyId",hasItems(5,2));

}

接口测试 Rest-Assured 使用指南

验证返回参数 double类型

@Test

void assertJsonDouble(){

given()

.get("http://127.0.0.1:8888/price")

.then()

// import static org.hamcrest.Matchers.*;

.body("price",is(12.12f));

}
接口测试 Rest-Assured 使用指南

 

使用BigDecimal验证返回参数 double类型

使用rest-assured的JsonConfig来配置返回的所有的json数值都为BigDecimal类型:

(BigDecimal,用来对超过16位有效位的数进行精确的运算)、

[ {

"description":"以BigDecimal返回float和double类型",

"request":{

"uri":"/price",

"method":"get"

},

"response":{

"json":{

"price":12.12

}

}

}]
接口测试 Rest-Assured 使用指南

接口测试 Rest-Assured 使用指南接口测试 Rest-Assured 使用指南

 

 

//Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算)

@Test

void assertJsonBigDecimal(){

given() .config(RestAssured.config().jsonConfig(jsonConfig().numberReturnType(io.restassured.path.json.config.JsonPathConfig.NumberReturnType.BIG_DECIMAL)))

.when()

.get("http://127.0.0.1:8889/price")

.then()

// import static org.hamcrest.Matchers.*;

.body("price", is(12.12f));

}
接口测试 Rest-Assured 使用指南

 

实列2.匿名JSON根节点验证

  一个json文本并不一定有一个命名好的根节点属性,验证这种类型的json,这里有一个例子:

[1, 2, 3]

使用 $ 或者是 空字符串 来验证

 

实列3 JSON Schema validation

(Json Schema定义了一套词汇和规则,这套词汇和规则用来定义Json元数据,且元数据也是通过Json数据形式表达的。Json元数据定义了Json数据需要满足的规范,规范包括成员、结构、类型、约束等。)

自从 2.1.0 版本rest-assured开始支持Json Schema validation. 举个例子,在classpath中放置以下的schema文件(译者注:idea的话可以放在resources目录下),products-schema.json:

接口测试 Rest-Assured 使用指南接口测试 Rest-Assured 使用指南

//schema验证(/products)这个请求是否符合规范:

@Test

void restSchemaDemo(){

given()

.get("http://localhost:8889/litty")

.then().assertThat()

.body(matchesJsonSchemaInClasspath("products-schema.json"));

}
接口测试 Rest-Assured 使用指南

 

JSON Schema Validation 设置项

@Test

void testSchemaSet(){

// 使用Francis Galiegue的json-schema-validator (fge) 库来进行验证。 如果您想配置使用基础fge库

JsonSchemaFactory jsonSchemaFactory = JsonSchemaFactory.newBuilder()

.setValidationConfiguration(ValidationConfiguration.newBuilder().setDefaultVersion(DRAFTV4).freeze()).freeze();

// When

get("http://localhost:8889/litty")

.then().assertThat()

.body(matchesJsonSchemaInClasspath("products-schema.json").using(jsonSchemaFactory));

}
接口测试 Rest-Assured 使用指南

 

 

实例4 xml解析

 

//todo xml解析

@Test

void testXml(){

with().formParams("firstName", "jack", "lastName", "lovey")

.when()

.post("http://localhost:8889/getxml")

.then()

.body("greeting.firstName", equalTo("jack"), "greeting.lastName", equalTo("lovey"));

//在请求中返还了一个基于firstname和lastname请求参数的greeting节点。您可以通过rest-assured轻易地展现和解析这个例子

}
接口测试 Rest-Assured 使用指南

 

//TODO xml XPATH校验

@Test

void testXmlXpath(){

proxy(8888); // charles 代理端口

with().formParams("firstName", "jack", "lastName", "lovey")

.when()

.post("http://localhost:8889/getxml")

.then()

// 第一种写法 .body(hasXPath("/greeting/firstName[text()='jack']"));

//第二种写法

.body(hasXPath("/greeting/firstName",containsString("ja")));

}}

接口测试 Rest-Assured 使用指南

Schema和DTD

XML响应体也可以验证为一个XML Schema (XSD)或DTD.

校验XSD是指:接口中返回xml响应体,针对xml生成xml schema,就是xsd后缀的文件,校验xsd文件和返回的xml响应体是否一致。

校验DTD是指:接口中返回的xml响应体中定义了DTD的文档规范,DTD文档是以dtd后缀的文件,校验dtd文件和返回的xml响应体的文档规范是否一致。

DTD文档是指在xml头中定义的DOCTYPE规范

moco文件:

接口测试 Rest-Assured 使用指南接口测试 Rest-Assured 使用指南

 

xsd是xml schema definition,xml文档的结构定义。

moco的接口返回xml文档,对xml文档生成对应的xsd文档

 

 

接口测试 Rest-Assured 使用指南接口测试 Rest-Assured 使用指南

 

    //xsd 文档校验
    @Test
    void testXsd(){
        File file = new File("H:\\ideawork\\seleniumCoding\\mockProject\\src\\main\\resources\\XSD\\assertxml.xml");
        given()
                .proxy(8888)
                .when()
                //assertxmlJSON
                .get("http://localhost:8889/getresponsewithfile")
                .then()
                .assertThat() // 断言
                .body(matchesXsd(file));////接口返回内容是xml,需要把xml转换成xml schema,然后生成一个文件,把文件传过来作为参数

    }
接口测试 Rest-Assured 使用指南

 

上一篇:接口测试 rest-assured 使用指南


下一篇:日志排查问题困难?分布式日志链路跟踪来帮你