前文:
rest-assured接口测试学习(一)
rest-assured接口测试学习(二)
补充知识
一、全局封装
1.全局RestAssured对象
-
RestAssured.XXX
全局变量 - BaseURI
2.spec方法通用的断言
每个请求都会共用的参数:比如URI 、cookies,或者每个接口都有的断言statusCode是200……可以使用specification
public class Baidu {
public static RequestSpecification requestSpecification;
public static ResponseSpecification responseSpecification;
@Before
public void gen(){
//通用请求
requestSpecification=new RequestSpecBuilder().build();
requestSpecification.port(80);
requestSpecification.cookie("s_id","leitianxiao");
requestSpecification.header("User-Agent","Andriod");
//通用断言
responseSpecification=new ResponseSpecBuilder().build();
responseSpecification.statusCode(200);
responseSpecification.body(hasItems("0","1"));
//其他用例里使用
@Test
public void testGetHtml(){
given().
//请求使用
spec(requestSpecification);
get("http://www.baidu.com").
then().
//断言使用
spec(responseSpecification);
}
}
3.filter方法进行加解密封装(利用filter机制实现自动解密)
- 修改request
可以修改请求内容(自动带上cookie)
通用的请求数据记录(记录所有的请求和响应)
二、对接口时间进行断言
when().
get("/lotto").
then().
time(lessThan(2000L));//响应时间不超过2000毫秒
除了进行功能测试,对响应时间有个基本的要求
三、schema自动校验
RestAssured有一套自己的schema自动校验机制
- schema的生成借助于在线服务
- 使用schema api断言
schema自动生成方法
- 每次运行的时候自动保存当前的schema
- 下次运行对比上次的schema如果发现变更就报错
- saveSchema+diffSchema
实践
官网:JSON Schema
作用:JSON Schema可以对JSON进行注释和校验,我们对一个接口的断言最多写10个左右,对其余大量的数据的response没有校验,JSON Schema就是对大量数据的Json进行一个数据格式的验证,包括字段的数据类型、范围、长度。
-
生成schema文件:Json Schema Tool
$schema
关键字指出此架构是根据标准的特定草稿编写的,"$schema": "http://json-schema.org/draft-07/schema#"
表示根据draft-07草案编写。
该$id
关键字定义模式的URI,并解析模式中其他URI引用的基URI。$title
和$description
注释关键字仅是描述性的。它们不会对要验证的数据添加约束。使用这两个关键字说明了模式的意图。type
验证关键字定义我们的JSON数据的第一个约束,在这种情况下,它必须是一个JSON对象。"type": "object"
验证类型是object,"type": "array"
验证类型是数组,"type": "boolean"
验证类型是布尔类型。$required
验证key字段的列表。properties
验证关键字。 -
手工编辑增强
例:String断言,对所有type为String的进行断言,长度在5-10之间
所以可以通过手动添加这个字段来约束JSON数据。 如何在RestAssured使用
- 导入依赖
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>json-schema-validator</artifactId>
<version>3.0.1</version>
</dependency>
-
一般Schema的文件比较大,使用时,通常存成一个的文件。
调用matchesJsonSchemaClasspath等系列方法
静态导入:import static io.restassured.module.jsv.JsonSchemaValidator.*;
常用断言方式一:assertThat().body(matchesJsonSchemaInClasspath("data/userInfo-schema.json"));
常用断言方式二:assertThat().body(matchesJsonSchema(new File("data/userInfo-schema.json")));
故意写错一个验证类型看看效果,把本应该是string类型的改为boolean。
warning可以先不管,找到error~可以看出说实例类型是string,而被允许的类型是boolean。
四、https请求
useRelaxedHTTPSValidation();
//信任https请求