RestAssured接口自动化从入门到框架搭建-18-序列化和反序列化

这篇来学习一下序列化和反序列化,先看看什么是序列化和反序列化。

 

1.什么是序列化和反序列化

可以看看这个文档https://data-flair.training/blogs/serialization-and-deserialization-in-java

也可以去百度百科,查一下什么是序列化和反序列化。

从上图中可以看到,序列化就是把对象转换为字节流的过程,反过来,反序列化就是把字节流转换成对象的过程。在Java中这个object就是我们的实体类,习惯叫Java Bean类。

 

2.HashMap对象序列化JSON对象代码练习

现在我们接口请求,例如Content-Type一般都是JSON格式传入,由于Content-Type是一个键值对,可能还存在多个值,我们很多时候是通过HashMap对象来存储这个值,那么Rest Assured就需要把HashMap对象装换成JSON对象。

package demo;

import java.util.HashMap;
import java.util.Map;
import static io.restassured.RestAssured.*;

import org.testng.annotations.Test;

public class SerializationDeSerializationTest {
	
	@Test
	public void testSerializationUsingHashMap() {
		Map<String, String> inputJson =  new HashMap<String, String>();
		inputJson.put("FirstName", "Anthony");
		inputJson.put("LastName", "Liu");
		inputJson.put("Age", "18");
		
		given().
			contentType("application/json").
			body(inputJson).
		when().
			post("http://www.thomas-bayer.com/restnames/countries.groovy").
		then().
			statusCode(200);
	}
}

这个用例是可以运行通过的。

 

3.Bean类序列化成JSON对象

有时候我们class对象很大,比几个HashMap键值对来说,数据有点大,这时候我们有很容易办法把class对象转换成JSON对象,一般这种class是有要求,我们习惯叫Java Bean类。下面来一个一个例子。

先创建一个Java Bean类

package demo;

public class User {
	
	private int age;
	private int weight;
	private String home;
	
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public int getWeight() {
		return weight;
	}
	public void setWeight(int weight) {
		this.weight = weight;
	}
	public String getHome() {
		return home;
	}
	public void setHome(String home) {
		this.home = home;
	}
	
}

然后在请求中把Bean对象装换成JSON,这里转换Rest Asserted帮我们完成了。

        @Test
	public void testSerializationUsingBeanClass() {
		User u = new User();
		u.setAge(18);
		u.setWeight(75);
		u.setHome("China");
		
		given().
			contentType("application/json").
			body(u).
		when().
			post("http://www.thomas-bayer.com/restnames/countries.groovy").
		then().
			statusCode(200).contentType("application/xml").log().all();
	}

这个用例也是可以运行通过,大家可以试一试。

这里提一下,在序列化这行代码boday()中是可以指定JSON 版本Lib去执行装换。

一般我们使用默认就好,其中JACKSON2要比JACKSON1要快一点。

 

4.把响应内容反序列化成class对象

来一个把响应内容反序列化成Java对象的练习,我们先写一个UserResponse.java,定义响应User信息的Bean类。

package demo;

public class UserResponse {
	int regId;
	String city;
	public int getRegId() {
		return regId;
	}
	public void setRegId(int regId) {
		this.regId = regId;
	}
	public String getCity() {
		return city;
	}
	public void setCity(String city) {
		this.city = city;
	}
	
}

定义好了这个类,在接口请求回来的响应地方,我们就可以处理一些断言。

        @Test
	public void testDeSerialization() {
		User u = new User();
		u.setAge(18);
		u.setWeight(75);
		u.setHome("China");
		
		UserResponse ur =
		given()
			.body(u).
		when()
			.post("http://www.thomas-bayer.com/restnames/countries.groovy").
			as(UserResponse.class);
		// 断言
		ur.setRegId(1101); // 随意设置一个响应数据
		Assert.assertTrue(ur.getRegId() > 0);
	}

在Rest Assured中,我们不用关系response的格式是xml还是json,会自动帮我们选择合适解析器来解析。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值