zoukankan      html  css  js  c++  java
  • 自动化测试报告中,该如何呈现JSON数据

    一. JSON介绍

    1. JSON(JavaScript Object Notation)是接口测试中常见的数据格式,它是一种基于轻量级文本的数据交换格式。

    2. JSON数据的规则定义

    1)JSON字符串必须用双引号编写

    2)JSON中并列数据之间用逗号隔开

    3)JSON中映射用冒号表示

    3. JSON数据有6种数据类型(4简单2复杂)

    string类型:字符串类型, e.g: {"name": "chinablue"}
    number类型:数字类型, e.g: {"age": 18, "price", 20.19, "coefficient": "-1.1"}
    boolean类型:布尔类型, e.g: {"is_open": true, "is_return", false}
    null类型:null类型, e.g: {"is_json": null}
    array类型:数组类型, e.g: {"data": [1, 2, 3]}
    object类型:对象类型, e.g: {"data": {"name": "chinablue", "age": 18}}

    二. 将Python中的dict类型数据转为json字符串

    思路:使用Python3内置的json库来进行json序列化操作

    2.1 json.dumps()的基本使用

    示例代码:

    # -*- coding: utf-8 -*-
    # @Time    : 2021/3/7 14:16
    # @Author  : chinablue
    # @File    : tmp0307.py
    
    import json
    
    data_dict = {
        "name": "chinablue",
        "age": 18,
        "is_single": True,
        "hobby": ["basketball", "football"],
        "score": {
            "English": (99.8, 100),
            "math": None,
            "语文": (100, 150),
        }
    }
    
    # 转换前
    print(f"【data_dict】数据类型:{type(data_dict)},数据内容:{data_dict}")
    # 转换后
    data_json = json.dumps(data_dict)
    print(f"【data_json】数据类型:{type(data_json)}, 数据内容:{data_json}")

    执行结果:

    【data_dict】数据类型:<class 'dict'>,数据内容:{'name': 'chinablue', 'age': 18, 'is_single': True, 'hobby': ['basketball', 'football'], 'score': {'English': (99.8, 100), 'math': None, '语文': (100, 150)}}
    【data_json】数据类型:<class 'str'>, 数据内容:{"name": "chinablue", "age": 18, "is_single": true, "hobby": ["basketball", "football"], "score": {"English": [99.8, 100], "math": null, "u8bedu6587": [100, 150]}}

    分析说明:

    1) 序列化后,python数据类型和json数据类型的映射关系如下:

    Python数据类型 JSON数据类型 Python数据类型 JSON数据类型
    str string True,False true,false
    int,float number list,tuple array
    None null dict object

    2) 序列化后,json数据中字符串会默认使用双引号,这也是json数据的明确规则

    3) 序列化后,中文会默认转换为对应的ASCII编码

    2.2 让json.dumps()支持自定义对象的序列化操作

    示例代码:

    # -*- coding: utf-8 -*-
    # @Time    : 2021/3/7 14:16
    # @Author  : chinablue
    # @File    : tmp0307.py
    
    import json
    
    
    class Info():
        """这是一个业务信息类"""
    
    
    data_dict = {
        "name": "chinablue",
        "age": 18,
        "info": Info(),
    }
    
    data_json = json.dumps(data_dict)
    print(data_json)

    执行结果:

    TypeError: Object of type 'Info' is not JSON serializable

    分析说明:

    json.dumps()方法默认情况下不支持自定义类对象的序列化操作,所以会报错

    解决思路:

    通过实现一个json.JSONEncoder的子类,并重写其default()方法。让json模块来支持更多对象的序列化操作

    代码改进:

    # -*- coding: utf-8 -*-
    # @Time    : 2021/3/7 14:16
    # @Author  : chinablue
    # @File    : tmp0307.py
    
    import json
    
    
    class Info():
        """这是一个业务信息类"""
    
        def __str__(self):
            return rf"这是一个业务信息类"
    
    
    class MyEncoder(json.JSONEncoder):
        """通过实现一个json.JSONEncoder的子类,并重写其default()方法。让json模块来支持更多对象的序列化操作"""
    
        def default(self, obj):
    
            # 如果是字节数据,直接将其转为字符串数据
            if isinstance(obj, bytes):
                return obj.__str__()
    
            # 如果是自定义类Info的对象,将其转为字符串数据
            elif isinstance(obj, Info):
                return obj.__str__()
    
            return json.JSONEncoder.default(self, obj)
    
    
    data_dict = {
        "name": "chinablue",
        "age": 18,
        "info": Info(),
    }
    
    data_json = json.dumps(data_dict, cls=MyEncoder, ensure_ascii=False)
    print(data_json)

    执行结果:

    {"name": "chinablue", "age": 18, "info": "这是一个业务信息类"}

    三. 自动化测试报告中呈现JSON数据

    3.1 需求分析

    1. 期望报告中显示的json数据是格式化缩进形式的

    data_json = json.dumps(data_dict, indent=4)

    2. 期望报告中显示的json数据是按key进行排序的

    data_json = json.dumps(data_dict, sort_keys=True)

    3. 期望报告中显示的json数据是支持显示中文的 

    data_json = json.dumps(data_dict, ensure_ascii=False)

    3.2 呈现效果展示

  • 相关阅读:
    PAT:1075. PAT Judge (25) AC
    PAT:1010. 一元多项式求导 (25) AC
    PAT:1076. Forwards on Weibo (30) AC
    PAT:1086. Tree Traversals Again (25) AC
    PAT:1020. Tree Traversals (25) AC
    PAT:1051. Pop Sequence (25) AC
    PAT:1063. Set Similarity (25) AC
    PAT:1017. A除以B (20) AC
    C语言指针
    iOS block
  • 原文地址:https://www.cnblogs.com/reconova-56/p/14495012.html
Copyright © 2011-2022 走看看