json接口测试入门(自动化测试中Json的处理)
json接口测试入门(自动化测试中Json的处理)从pom里添加这里只讲用fastjson的使用层级可能遇到单层,多层嵌套key用双引号包裹值字符串用双引号包裹,数值直接显示。
自动化测试中Json的处理现在多数的前后端交互使用的json数据,在做接口测试时,需要对json进行处理,更改或读取,需要先了解他的组成结构,才能更好的操作
- Json的结构组成
以如下json为例:
//第一种 最外层 对象结构,也是多层嵌套结构
{
"id":1
"className":"二班"
"grade":3
"students":[
{
"id":2
"name":"李雷"
}
{
"id":5
"name":"韩梅梅"
}
]
}
//第二种 最外层列表结果
[
}
"id":2
"name":"李雷"
}
{
"id":5 //数值
"name":"韩梅梅" //字符
}
]
这是两个简单且典型的json。
它包括:
- 基础数据字段(字符,数字)
- 列表(以方括号 [] 包裹数据)
- 对象 (以花括号{}包裹数据)
层级可能遇到单层,多层嵌套
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转成对象,更改java对象数据,后转json(建议)
- 直接使用fasjson的相应方法操作数据(不建议)
建议:对于菲整形的数字,在断言取值时使用String类型取值,原因是小数点在不同类型下精度可能丢失从而造成脚本错误,使用string能避免这一点
python操作jsonpython操作json 就很简单了
通过 import json 引用工具包
- json.dumps(xxx) 转成json
- 使用json.load( )转成对象后,通过方括号[]操作取值
需要更改数据时,可以把json转成对象,操作对象后,再次转成json