本文共 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() { MapinputJson = 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/