快捷搜索:  汽车  科技

json接口测试入门(自动化测试中Json的处理)

json接口测试入门(自动化测试中Json的处理)从pom里添加这里只讲用fastjson的使用层级可能遇到单层,多层嵌套key用双引号包裹值字符串用双引号包裹,数值直接显示。

自动化测试中Json的处理

现在多数的前后端交互使用的json数据,在做接口测试时,需要对json进行处理,更改或读取,需要先了解他的组成结构,才能更好的操作

  1. Json的结构组成

以如下json为例:

//第一种 最外层 对象结构,也是多层嵌套结构 { "id":1 "className":"二班" "grade":3 "students":[ { "id":2 "name":"李雷" } { "id":5 "name":"韩梅梅" } ] } //第二种 最外层列表结果 [ } "id":2 "name":"李雷" } { "id":5 //数值 "name":"韩梅梅" //字符 } ]

这是两个简单且典型的json。

它包括:

  1. 基础数据字段(字符,数字)
  2. 列表(以方括号 [] 包裹数据)
  3. 对象 (以花括号{}包裹数据)

层级可能遇到单层,多层嵌套

key用双引号包裹

值字符串用双引号包裹,数值直接显示。

java如何操作json

这里只讲用fastjson的使用

从pom里添加

<dependency> <groupId>com.alibaba</groupId> <artifactId>fastJSON</artifactId> <version>1.2.80</version> </dependency>

json选用上面的数据,直接看代码:

里面用的java类在后面 public class JsonExampleTest { private final String stringData = "{\n" " \"id\":1 \n" " \"className\":\"二班\" \n" " \"grade\":3 \n" " \"students\":[\n" " {\n" " \"id\":2 \n" " \"name\":\"李雷\"\n" " } \n" " {\n" " \"id\":5 \n" " \"name\":\"韩梅梅\"\n" " }\n" " ]\n" "}"; @Test public void JsonToJava() { /** * 这里用到的json 工具为fastjson * 类似的工具还有gson,jackson,这里只讲 fastjson */ /** * 字符串的 Json 转 java 对象 从而可以使用对象的 get 方法取值 * parseObject 第一个参数为 String 类型的Json数据,第二个参数是要转换成的对象类型 */ StudentClass studentClass = JSONObject.parseObject(stringData StudentClass.class); System.out.printf("类型=%s 数据=%s%n" studentClass.getClass().getName() studentClass); /** * 字符串转换成 JSONObject 对象 * JSONObject 是fastjson的对象类型,在操作数据时有它自己的方法,方便操作 * parseObject 参数直接传要转换的对象, java对象同样适用,适用于大多数数据对象 */ JSONObject jsonObject = JSONObject.parseObject(stringData); System.out.printf("类型=%s 数据=%s%n" jsonObject.getClass().getName() jsonObject); /** * java 对象转成字符串的 Json。 这个方法同样适用于 fastjson 的 JSONObject 对象。 * 这里的对象数据直接使用上一步的对象 studentClass * toJSONString 的参数就是需要转的对象 * 这个方法同样适用于 fastjson 的JSONObject 对象。 */ String jsonString = JSONObject.toJSONString(studentClass); System.out.printf("类型=%s 数据=%s%n" jsonString.getClass().getName() jsonString); } @Test public void operateJson() { JSONObject jsonObject = JSONObject.parseObject(stringData); /** * 这里讲 如何适用fastjson取值 */ /** * 取json的String类型字段的值 getString 参数对应 json 的 key 用String 类型接收数据 * 其他取值方法有很多,例如 getInteger ,getFloat 等,可以参考工具的使用方法 */ String className = jsonObject.getString("className"); System.out.println("取 String 类型字段的值"); System.out.printf("类型=%s 数据=%s%n" className.getClass().getName() className); System.out.println(jsonObject); System.out.println("取 Integer 类型字段的值"); Integer grade = jsonObject.getInteger("grade"); System.out.printf("类型=%s 数据=%s%n" grade.getClass().getName() grade); /** * 取json的 数组/列表 类型字段的值 getJSONArray 参数对应 json中列表 的 key 用 JSONArray 类型接收数据 */ JSONArray StudentClass = jsonObject.getJSONArray("students"); System.out.println("取 列表/数组 类型字段的值"); System.out.printf("类型=%s 数据=%s%n" StudentClass.getClass().getName() StudentClass); /** * 取json的 对象 类型字段的值 getJSONObject 参数对应 json中列表 的 key 用 JSONObject 类型接收数据 * 取得对象后可以 用getString,getInteger 和其他基础数据类型取值 */ JSONObject student = jsonObject.getJSONArray("students").getJSONObject(1); // 这里因为是多层嵌套结构,需要先取列表,再用getJSONObject 取对象 System.out.println("取 java对象 类型字段的值"); System.out.printf("类型=%s 数据=%s%n" student.getClass().getName() student); } } //用到的java类 import java.util.List; public class StudentClass{ private Integer id; private String className; private Integer grade; private List<Student> students; public StudentClass(Integer id String className Integer grade List<Student> students) { this.id = id; this.className = className; this.grade = grade; this.students = students; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getClassName() { return className; } public void setClassName(String className) { this.className = className; } public Integer getGrade() { return grade; } public void setGrade(Integer grade) { this.grade = grade; } public List<Student> getStudents() { return students; } public void setStudents(List<Student> students) { this.students = students; } @Override public String toString() { return "StudentClass{" "id=" id " className='" className '\'' " grade=" grade " students=" students '}'; } } public class Student { private Integer id; private String name; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Student(Integer id String name) { this.id = id; this.name = name; } @Override public String toString() { return "Student{" "id=" id " name='" name '\'' '}'; } }

调试运行:

json接口测试入门(自动化测试中Json的处理)(1)

如何更改json中的数据?
  1. 把json转成对象,更改java对象数据,后转json(建议)
  2. 直接使用fasjson的相应方法操作数据(不建议)

建议:对于菲整形的数字,在断言取值时使用String类型取值,原因是小数点在不同类型下精度可能丢失从而造成脚本错误,使用string能避免这一点

python操作json

python操作json 就很简单了

通过 import json 引用工具包

  1. json.dumps(xxx) 转成json
  2. 使用json.load( )转成对象后,通过方括号[]操作取值

需要更改数据时,可以把json转成对象,操作对象后,再次转成json

猜您喜欢: