博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RestAssured接口自动化从入门到框架搭建-18-序列化和反序列化
阅读量:4302 次
发布时间:2019-05-27

本文共 2702 字,大约阅读时间需要 9 分钟。

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

 

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

可以看看这个文档

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

从上图中可以看到,序列化就是把对象转换为字节流的过程,反过来,反序列化就是把字节流转换成对象的过程。在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
inputJson = new HashMap
(); 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,会自动帮我们选择合适解析器来解析。

转载地址:http://snows.baihongyu.com/

你可能感兴趣的文章
MFC获得主窗口和父窗口指针
查看>>
MFC设置主界面背景图片、设置子窗体背景图片
查看>>
MFC——在视图窗口加载背景图片
查看>>
CreateMutex、WaitForSingleObject、ReleaseMutex——创建互斥对象
查看>>
关于Visual Studio "当前不会命中断点.还没有为该文档加载任何符号"的解决方法
查看>>
CImage与OpenCV兼容问题
查看>>
在vc或mfc中显示IplImage的方法
查看>>
VC6.0下opencv1.0的环境配置
查看>>
MFC程序提示 0xC0000005: 读取位置 0x00000020 时发生访问冲突。
查看>>
VS2010中如何实现自定义MFC控件
查看>>
MFC中的Document-View结构
查看>>
MFC的Serialize机制及其使用(转)
查看>>
在MFC里面实现线程的实例
查看>>
MFC中创建和使用线程的方法
查看>>
MFC子线程访问主线程对话框程序的控件对象
查看>>
MFC不能多线程操作控件的原因
查看>>
MFC之AfxbeginThread 线程 创建、挂起、释放、结束、退出
查看>>
MFC线程创建运行关闭的问题
查看>>
mfc 创建线程函数AfxBeginThread,线程中访问mfc控件
查看>>
C++中 *&(指针引用)与*(指针)的区别
查看>>