接口测试(八)—— 日志收集、全量字段校验、JSON Schema语法

2023-10-28

目录

一、日志收集

1、日志简介

2、日志的级别

3、日志代码实现分析

4、日志使用

二、全量字段校验

1、简介和安装

2、JSON Schema⼊⻔

2.1 入门案例

2.2 校验方式

3、JSON Schema语法

3.1 type关键字

3.2 properties关键字

3.3 required关键字

3.4 const关键字

3.5 pattern关键字

3.6 综合案例应用

三、IHRM实战

1、使用全量字段校验

2、日志的使用

3、构造员工id



一、日志收集

1、日志简介

  • 什么是日志
    • 日志也叫 log,通常对应的 xxx.log 的日志文件。文件的作用是记录系统运行过程中,产生的信息。
  • 搜集日志的作用
    • 查看系统运行是否正常。
    • 分析、定位 bug

2、日志的级别

  • logging.DEBUG:调试级别【高】
  • logging.INFO:信息级别【次高】
  • logging.WARNING:警告级别【中】
  • logging.ERROR:错误级别【低】
  • logging.CRITICAL:严重错误级别【极低】

 特性:

  • 日志级别设定后,只有比该级别低的日志会写入日志。
    • 如:设定日志级别为 info。 debug 级别的日志信息,不会写入。infowarning、error、critical 会写入

3、日志代码实现分析

日志代码,无需手写实现。会修改、调用即可!

代码分析

"""
步骤:
# 0. 导包
# 1. 创建日志器对象
# 2. 设置日志打印级别
    # logging.DEBUG 调试级别
    # logging.INFO 信息级别
    # logging.WARNING 警告级别
    # logging.ERROR 错误级别
    # logging.CRITICAL 严重错误级别
# 3. 创建处理器对象
    # 创建 输出到控制台 处理器对象
    # 创建 输出到日志文件 处理器对象
# 4. 创建日志信息格式
# 5. 将日志信息格式设置给处理器
    # 设置给 控制台处理器
    # 设置给 日志文件处理器
# 6. 给日志器添加处理器
    # 给日志对象 添加 控制台处理器
    # 给日志对象 添加 日志文件处理器
# 7. 打印日志
"""

import logging.handlers
import logging
import time

# 1. 创建日志器对象
logger = logging.getLogger()

# 2. 设置日志打印级别
logger.setLevel(logging.DEBUG)
# logging.DEBUG 调试级别
# logging.INFO 信息级别
# logging.WARNING 警告级别
# logging.ERROR 错误级别
# logging.CRITICAL 严重错误级别

# 3.1 创建 输出到控制台 处理器对象
st = logging.StreamHandler()
# 3.2 创建 输出到日志文件 处理器对象
fh = logging.handlers.TimedRotatingFileHandler('a.log', when='midnight', interval=1,
backupCount=3, encoding='utf-8')
# when 字符串,指定日志切分间隔时间的单位。midnight:凌晨:12点。
# interval 是间隔时间单位的个数,指等待多少个 when 后继续进行日志记录
# backupCount 是保留日志文件的个数

# 4. 创建日志信息格式
fmt = "%(asctime)s %(levelname)s [%(filename)s(%(funcName)s:%(lineno)d)] - %(message)s"
formatter = logging.Formatter(fmt)

# 5.1 日志信息格式 设置给 控制台处理器
st.setFormatter(formatter)
# 5.2 日志信息格式 设置给 日志文件处理器
fh.setFormatter(formatter)

# 6.1 给日志器对象 添加 控制台处理器
logger.addHandler(st)
# 6.2 给日志器对象 添加 日志文件处理器
logger.addHandler(fh)

# 7. 打印日志
while True:
    # logging.debug('我是一个调试级别的日志')
    # logging.info('我是一个信息级别的日志')
    logging.warning('test log sh-26')
    # logging.error('我是一个错误级别的日志')
    # logging.critical('我是一个严重错误级别的日志')
    time.sleep(1)

4、日志使用

可修改的位置

使用步骤:
1. 调用 init_log_config() 函数,初始化日志信息。
2. 指定 日志级别,打印 日志信息。         
 源码文件下载:https://download.csdn.net/download/u010217055/87313711

二、全量字段校验

1、简介和安装

  • 概念:校验接⼝返回响应结果的全部字段(更进一步的断言)
  • 校验内容:
    • 字段值
    • 字段名 或 字段类型
  • 校验流程:
    • 定义json语法校验格式
    • ⽐对接口实际响应数据是否符合json校验格式
  • 安装jsonschema:
pip install jsonschema -i https://pypi.douban.com/simple/
  • 查验:
    • pip 查验:pip list 或 pip show jsonschema
    • pycharm 中 查验:file --- settings --- 项目名中查看 python解释器列表。 

2、JSON Schema⼊⻔

2.1 入门案例

{
    "type": "object",
    "properties": {
    "success": {"type": "boolean"},
    "code": {"type": "integer"},
    "message": {"type": "string"}
    },
    "required": ["success", "code", "message"]
}

2.2 校验方式

在线工具校验

http://json-schema-validator.herokuapp.com
https://www.jsonschemavalidator.net 【推荐】

python代码校验

  • 实现步骤:
  1. 导包 import jsonschema
  2. 定义 jsonschema格式 数据校验规则
  3. 调⽤ jsonschema.validate(instance="json数据", schema="jsonshema规则")
  • 查验校验结果
    • 校验通过:返回 None
    • 校验失败
      • schema 规则错误,返回 SchemaError
      • json 数据错误,返回 ValidationError
  • 案例:
    # 1. 导包
    import jsonschema
    
    # 2. 创建 校验规则
    schema = {
        "type": "object",
        "properties": {
            "success": {
                "type": "boolean"
            },
            "code": {
                "type": "int"
            },
            "message": {
            "type": "string"
            }
        },
        "required": ["success", "code", "message"]
    } 
    
    # 准备待校验数据
    data = {
        "success": True,
        "code": 10000,
        "message": "操作成功"
    }
    
    # 3. 调用 validate 方法,实现校验
    result = jsonschema.validate(instance=data, schema=schema)
    print("result =", result)
    
    # None: 代表校验通过
    # ValidationError:数据 与 校验规则不符
    # SchemaError: 校验规则 语法有误

3、JSON Schema语法

3.1 type关键字

作用:约束数据类型

integer —— 整数
string —— 字符串
object —— 对象
array —— 数组 --> python:list 列表
number —— 整数/⼩数
null —— 空值 --> python:None
boolean —— 布尔值

语法:
{
    "type": "数据类型"
}

示例

import jsonschema

# 准备校验规则
schema = {
    "type": "object"     # 注意 type 和 后面的 类型,都要放到 ”“ 中!
} 

# 准备数据
data = {"a": 1, "b": 2}

# 调用函数
res = jsonschema.validate(instance=data, schema=schema)
print(res)

3.2 properties关键字

说明:是 type关键字的辅助。用于 type 的值为 object 的场景
作用:指定 对象中 每个字段的校验规则。 可以嵌套使用。

语法:
{
    "type": "object",
    "properties":{
        "字段名1":{规则},
        "字段名2":{规则},
        ......
    }
}

 案例1:

{
    "success": true,
    "code": 10000,
    "message": "操作成功",
    "money": 6.66,
    "address": null,
    "data": {
        "name": "tom"
    },
    "luckyNumber": [6, 8, 9]
}
import jsonschema

# 准备校验规则
schema = {
    "type": "object",
    "properties": {
        "success": {"type": "boolean"},
        "code": {"type:": "integer"},
        "message": {"type": "string"},
        "money": {"type": "number"},
        "address": {"type": "null"},
        "data": {"type": "object"},
        "luckyNumber": {"type": "array"}
    }
} 

# 准备测试数据
data = {
    "success": True,
    "code": 10000,
    "message": "操作成功",
    "money": 6.66,
    "address": None,
    "data": {
        "name": "tom"
    },
    "luckyNumber": [6, 8, 9]
} 

# 调用方法进行校验
res = jsonschema.validate(instance=data, schema=schema)
print(res)

案例2:要求定义JSON对象中包含的所有字段及数据类型

data = {
    "success": True,
    "code": 10000,
    "message": "操作成功",
    "money": 6.66,
    "address": None,
    "data": {
        "name": "tom",
        "age": 18,
        "height": 1.78
    },
    "luckyNumber": [6, 8, 9]
}
import jsonschema

# 准备校验规则
schema = {
    "type": "object",
    "properties": {
        "success": {"type": "boolean"},
        "code": {"type:": "integer"},
        "message": {"type": "string"},
        "money": {"type": "number"},
        "address": {"type": "null"},
        "data": {
            "type": "object",
            "properties": { # 对 data 的对象值,进一步进行校验
            "name": {"type": "string"},
            "age": {"type": "integer"},
            "height": {"type": "number"}
        }
    },
     "luckyNumber": {"type": "array"}
    }
} 

# 准备测试数据
data = {
    "success": True,
    "code": 10000,
    "message": "操作成功",
    "money": 6.66,
    "address": None,
    "data": {
        "name": "tom",
        "age": 18,
        "height": 1.78
    },
    "luckyNumber": [6, 8, 9]
}

# 调用方法进行校验
res = jsonschema.validate(instance=data, schema=schema)
print(res)

3.3 required关键字

作用:校验对象中必须存在的字段。字段名必须是字符串,且唯⼀

语法:
{
    "required": ["字段名1", "字段名2", ...]
}
import jsonschema

# 测试数据
data = {
    "success": True,
    "code": 10000,
    "message": "操作成功",
    "data": None,
} 

# 校验规则
schema = {
    "type": "object",
    "required": ["success", "code", "message", "data"]
} 

# 调用方法校验
res = jsonschema.validate(instance=data, schema=schema)
print(res)

3.4 const关键字

作用:校验字段值是⼀个固定值。

语法:
{
    "字段名":{"const": 具体值}
}
import jsonschema

# 测试数据
data = {
    "success": True,
    "code": 10000,
    "message": "操作成功",
    "data": None,
} 

#校验规则
schema = {
    "type": "object",
    "properties": {
        "success": {"const": True},
        "code": {"const": 10000},
        "message": {"const": "操作成功"},
        "data": {"const": None}
    },
    "required": ["success", "code", "message", "data"]
} 

# 调用方法校验
res = jsonschema.validate(instance=data, schema=schema)
print(res)

3.5 pattern关键字

作用:指定正则表达式,对字符串进行模糊匹配

基础正则举例:
1 包含字符串:hello
2 以字符串开头 ^: ^hello 如:hello,world
3 以字符串结尾 $: hello$ 如:中国,hello
4 匹配[]内任意1个字符[]: [0-9]匹配任意⼀个数字 [a-z]匹任意一个小写字母 [cjfew9823]匹配任意一个
5 匹配指定次数{}: [0-9]{11}匹配11位数字。

匹配 手机号:^[0-9]{11}$

语法:
{
    "字段名":{"pattern": "正则表达式"}
}
import jsonschema

# 测试数据
data = {
    "message": "!jeklff37294操作成功43289hke",
    "mobile": "15900000002"
} 

# 校验规则
schema = {
    "type": "object",
    "properties": {
        "message": {"pattern": "操作成功"},
        "mobile": {"pattern": "^[0-9]{11}$"}
    }
} 

# 调用方法校验
res = jsonschema.validate(instance=data, schema=schema)
print(res)

3.6 综合案例应用

# 测试数据
import jsonschema

data = {
    "success": False,
    "code": 10000,
    "message": "xxx登录成功",
    "data": {
        "age": 20,
        "name": "lily"
    }
} 

# 校验规则
schema = {
    "type": "object",
    "properties": {
        "success": {"type": "boolean"},
        "code": {"type": "integer"},
        "message": {"pattern": "登录成功$"},
        "data": {
            "type": "object",
            "properties": {
                "name": {"const": "lily"},
                "age": {"const": 20}
            },
            "required": ["name", "age"]
        }
    },
    "required": ["success", "code", "message", "data"]
} 

# 调用测试方法
res = jsonschema.validate(instance=data, schema=schema)
print(res)

三、IHRM实战

1、使用全量字段校验

import unittest
import jsonschema
from api.ihrm_login_api import IhrmLoginApi

class TestIhrmLogin(unittest.TestCase):
    # 登录成功
    def test01_login_success(self):
        # 组织请求数据
        json_data = {"mobile": "13800000002", "password": "123456"}
        # 调用自己封装的接口
        resp = IhrmLoginApi.login(json_data)
        print("登录成功:", resp.json())

        # 断言
        # assert_util(self, resp, 200, True, 10000, "操作成功")
        # 断言 校验响应状态码
        self.assertEqual(200, resp.status_code)

        # 使用全量字段校验,替换 断言
        # 校验规则
        schema = {
            "type": "object",
            "properties": {
                "success": {"const": True},
                "code": {"const": 10000},
                "message": {"pattern": "操作成功"},
                "data": {"type": "string"}
            },
            "required":["success", "code", "message", "data"]
        } 
        # 调用jsonschema校验函数
        jsonschema.validate(instance=resp.json(), schema=schema)

2、日志的使用

1. 将 包含 init_log_config() 函数的 日志文件,存放到 项目目录 common/ 下。
2. 在 项目入口文件中, 调用 init_log_config() 函数,指定 日志文件名,及 其他参数。
3. 在 所有 需要打印输出的 ,将 logging.级别() 替换 调用 print 输出!
4. 去 生成的日志文件中,查看日志信息。

3、构造员工id

1. 测试 查询员工接口前(setUp),保证 使用的 员工id 已存在!使用 insert SQL语句 插入一个 员工id
2. 使用这个 员工id,进行查询员工接口测试
3. 测试查询员工接口结束(tearDown)时,删除这个 员工id

import logging
import unittest
from api.ihrm_emp_curd import IhrmEmpCURD
from common.db_util import DBUtil
from common.get_header import get_header

class TestEmpQuery(unittest.TestCase):

    header = None

    @classmethod
    def setUpClass(cls) -> None:
        cls.header = get_header()

    def setUp(self) -> None:
        insert_sql = "insert into bs_user(id, mobile, username) values('11232738248634','13974837801', '随便打打');"        
        DBUtil.uid_db(insert_sql)

    def tearDown(self) -> None:
        delete_sql = "delete from bs_user where id = '11232738248634';"
        DBUtil.uid_db(delete_sql)

    # 测试 查询员工
    def test01_query_emp(self):
        # 使用 数据库 切实存在的 emp_id 传入
        resp = IhrmEmpCURD.query_emp("11232738248634", self.header)
        print("查询员工:", resp.json())
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

接口测试(八)—— 日志收集、全量字段校验、JSON Schema语法 的相关文章

  • JTree 节点不会被直观地选择

    不知何故 我无法为我的 JTree 节点启用 选择突出显示 我正在我的项目中使用自定义单元格渲染器 这很可能导致此问题 这是完整的渲染器类代码 protected class ProfessionTreeCellRenderer exten
  • 如何在 join 语句中进行计数

    我有桌子post int post id varchar title text content和表comment int comment id int post id varchar content其中 post id 是外键引用表帖子 如
  • 数据表 - 服务器端处理 - 数据库列合并

    我目前正在使用 DataTables 1 10 5 服务器端处理功能 http www datatables net examples data sources server side html http www datatables ne
  • Google Inbox 类似 RecyclerView 项目打开动画

    目前 我正在尝试实现 Google Inbox 例如RecyclerView行为 我对电子邮件打开动画很好奇 我的问题是 该怎么做 我的意思是 他们使用了哪种方法 他们用过吗ItemAnimator dispatchChangeStarti
  • Clojure MySQL 语法错误异常(“[...] 靠近 '???????????????' [...]”)

    除了建立连接之外 我在使用 clojure contrib sql 做任何事情时都遇到困难 我有一个 mysqld 在 localhost 3306 上运行 数据库名为clj db 用户 clj user localhost 和密码 clj
  • JavaFX - setVisible 隐藏元素但不重新排列相邻节点

    在 JavaFX 中 如果我有一个场景有 2VBox元素和每个VBox有多个Label in it 如果我设置顶部VBox to 无形的 为什么底部VBox 不向上移动顶部的场景VBox was The VBox is 无形的但我希望其他物
  • Java 变量的作用域

    我不明白为什么这段代码的输出是10 package uno public class A int x 10 A int x 12 new B public static void main String args int x 11 new
  • 如何将 XMP XML 块序列化为现有的 JPEG 图像?

    我有许多 JPEG 图像 其中包含损坏的 XMP XML 块 我可以轻松修复这些块 但我不确定如何将 固定 数据写回图像文件 我目前正在使用 JAVA 但我愿意接受任何能让这项任务变得容易的事情 这是目标关于 XMP XML 的另一个问题
  • 使用 java 按电子邮件发送日历邀请

    我正在尝试使用 java 发送每封电子邮件的日历邀请 收件人收到电子邮件 但不会显示接受或拒绝的邀请 而是将该事件自动添加到他的日历中 我正在使用 ical4j jar 构建活动 邀请 private Calendar getInvite
  • 具有多种值类型的 Java 枚举

    基本上我所做的是为国家编写一个枚举 我希望不仅能够像国家一样访问它们 而且还能够访问它们的缩写以及它们是否是原始殖民地 public enum States MASSACHUSETTS Massachusetts MA true MICHI
  • tomcat 过滤所有 web 应用程序

    问题 我想对所有网络应用程序进行过滤 我创建了一个过滤器来监视对 apache tomcat 服务器的请求 举例来说 它称为 MyFilter 我在 netbeans 中创建了它 它创建了 2 个独立的目录 webpages contain
  • 从 Java 日历迁移到 Joda 日期时间

    以前 当我第一次设计股票应用相关软件时 我决定使用java util Date表示股票的日期 时间信息 后来我体会到了大部分方法java util Date已弃用 因此 很快 我重构了所有代码以利用java util Calendar 然而
  • 从 Stax XMLStreamReader 读取以解组部分

    我正在使用 Stax 游标 API 从大型 xml 文件中提取数据 当前 我转到特殊标签的开头并使用 JAXB 解组该标签 这对于格式良好的 xml 文件效果很好 但不久前我有一个文档 其中数十万个标签中有一个未关闭 JAXB 使用 XML
  • 如何在keycloak中动态编辑standalone.xml文件

    我正在尝试通过 docker 编辑standalone xml 并尝试添加 但 keycloak 正在使用它standalone xml 但我可以看到standalone xml 文件中的更改 我需要在standalone xml 文件中添
  • 使用 Java 从 S3 上的文件在 S3 上创建 zip 文件

    我在 S3 上有很多文件 需要对其进行压缩 然后通过 S3 提供压缩文件 目前 我将它们从流压缩到本地文件 然后再次上传该文件 这会占用大量磁盘空间 因为每个文件大约有 3 10MB 而且我必须压缩多达 100 000 个文件 所以一个 z
  • 阻止 OSX 变音符号为所有用户禁用 Java 中的 KeyBindings?

    注 我知道这个问题 https stackoverflow com questions 40335285 java keybinds stop working after holding down a key用户必须输入终端命令才能解决此问
  • 如何使用 PHP 从 MySQL 检索特定值?

    好吧 我已经厌倦了 过去一周我花了大部分空闲时间试图解决这个问题 我知道 SQL 中的查询已更改 但我无法弄清楚 我能找到的所有其他帖子似乎都已经过时了 如果有人能帮助我 我将非常感激 我想做的就是使用手动输入数据库的唯一 密码 来检索行的
  • 重写Object类的finalize()方法有什么用?

    据我所知 在java中如果我们想手动调用垃圾收集器 我们可以执行System gc 1 我们在重写的finalize 方法中做了哪些操作 2 如果我们想手动调用JVM垃圾收集器 是否需要重写finalize 方法 我们在重写的 Finali
  • 如何使用 PHP 获取列中的所有值?

    我一直在到处寻找这个问题 但仍然找不到解决方案 如何从 mySQL 列中获取所有值并将它们存储在数组中 例如 表名称 客户 列名称 ID 名称 行数 5 我想获取此表中所有 5 个名称的数组 我该如何去做呢 我正在使用 PHP 我试图 SE
  • 让 Prometheus 发送 SQL 查询

    我正在尝试使用普罗米修斯 https prometheus io 监视我的 MySQL 数据库 但似乎找不到添加 SQL 查询的区域 例如 我想运行一个返回值的 SQL 查询 然后将该值添加到图表中 发送警报 有没有办法让 Promethe

随机推荐

  • 同一个界面多个子控制器切换视图

    先看示例 EssenceViewController为父控制器 AllViewController 全部 VideoViewController 视频 VoiceViewController 声音 PictureViewController
  • react点击事件控制div盒子的显示隐藏

    index jsx import React Component from react class show extends Component constructor props super props this state cls pa
  • 智慧教室系统--低碳节能管控系统

    随着全球气候变化的日益严重 环保 节能 低碳已经成为各行各业追求的目标 教育行业也不例外 建设低碳 环保的智慧教室已经成为学校和政府的共同关注点 智慧教室系统的解决方案正是基于此 旨在通过AIOT数字化平台 智慧教室和智能管控等技术手段 实
  • list(链表)——STL

    文章目录 list list构造函数 3 list 赋值和交换 list 大小操作 list 插入和删除 list 数据存取 list反转和排序 list 将数据进行链式存储 链表 list 是一种物理存储单元上非连续的存储结构 数据元素的
  • vue 项目动态引入css(sass)文件(判断后加载对应的 sass 文件)

    vue 项目动态引入css文件 preface 问题 解决方案 preface 最新在写后台 管理 应 业务需求 众多菜单业务中 有个菜单需要独立出来给领导使用 改领导有独特喜欢的颜色格调 快速开发 只是做了菜单的权限控制 然后和样式 控制
  • merge sort 一些变种、应用

    1 逆序对数目 分治公式 总的逆序对个数 前半部分逆序对个数 后半部分逆序对个数 merge时候每取一次后半部分的数 累加一次前半部分剩余的数的个数 int countInvertion vector
  • Android系统_SystemUI_android10_添加控制底部导航栏广播

    一 问题背景 在对于我们一些特殊场景 我们可能不想用户能够操作返回 回到主页 因此就需要我们能够灵活控制底部导航栏的状态 二 添加思路 底部导航栏术语叫做NavigationBar 属于SystemUI 跟顶部状态栏StatusBar属于同
  • idea使用debug如何退出循环

    工作中调试难免会遇到循环 特别是循环读取文本内容的时候 10条还可以 万一文本行数有1万多行 难不成还要挨个的进行debug 这里我们可以直接使用idea的debug选项跳出循环 例如下图 如何直接跳出这个while循环 答案是将光标定位到
  • 华清学习阶段总结

    从七月份入学以来 我已经在华清远见学习了3个周左右了 先后遇见了两个讲师 两个讲师以及班主任老师都很负责 不论是在学习上还是在生活上都有他们和同学们相应的及时的帮助与提醒 班上的学习氛围也很好 很多问题在他们的帮助下都能解决 在c基础的上完
  • DEBUG:Ubuntu中无法打开Appimage文件

    DEBUG Ubuntu中无法打开Appimage文件 问题 解决 问题 无法安装此类型的文件 解决 右击文件属性 更改权限
  • 关于Decision in process状态时间变化的解释

    最近自己的文章出现了decision in process时间变化的现象 便上网查了下 觉得以下这个解释是靠谱的 这是编辑部自动发给编辑的提醒邮件引起的状态变化 编辑部一般要求编辑应在decision in process后5个工作日内给作
  • 大语言模型之六- LLM之企业私有化部署架构

    2023年上半年 广泛使用API 如OpenAI 来创建基于大型语言模型 LLM 的基础设施 极大地塑造了软件领域 LangChain 和LlamaIndex在这一趋势中发挥了重要的作用 2023年下半年LLMOps的运维工作流程中微调 或
  • CNStack 虚拟化服务:实现虚拟机和容器资源的共池管理

    背景 容器无疑已经成为新的云计算基础设施 企业私有云平台的建设重心 正在从虚拟化的计算 存储 网络的建设 转向构建以容器 微服务等为核心的云原生平台 不过值得注意的是 企业 IT 系统在进行容器化改造的过程中 由于历史遗留系统 技术债务 内
  • python如何实现excel中vlookup函数的功能

    可以使用 Python 的 pandas 库来实现 Excel 中的 VLOOKUP 函数的功能 首先 需要使用 pandas read excel 函数读取 Excel 文件 然后使用 pandas DataFrame merge 函数将
  • xcode SRCROOT inherited executable_path

    xcode search paths中总是能看到这些宏定义 他们定义了一些常用的路径信息 具体的信息参考官网 https developer apple com library archive documentation Developer
  • LFU算法

    LFU简介 LFU Least Frequently Used 也是一种常见的缓存算法 LFU算法的思想是 如果一个数据在最近一段时间很少被访问到 那么可以认为在将来它被访问的可能性也很小 因此 当空间满时 最小频率访问的数据最先被淘汰 L
  • Flume EmbeddedAgent

    flume flume 二次开发 对EmbeddedAgent的简易改造 动态控制agent 实现启动 关闭等功能 模块结构如下所示 flume parent github地址 1 用途 1 1 本地调试 对flume不是特别熟悉的开发者
  • Ubuntu没网,重启网络服务

    sudo service network manager stop sudo rm var lib NetworkManager NetworkManager state sudo service network manager start
  • ImportError: libcudnn.so.7: cannot open shared object file: No such file or directory解决

    在跑GPU的时候 出现错误 ImportError libcudnn so 7 cannot open shared object file No such file or directory 原因 默认软链的cudnn中没有相应的 lib
  • 接口测试(八)—— 日志收集、全量字段校验、JSON Schema语法

    目录 一 日志收集 1 日志简介 2 日志的级别 3 日志代码实现分析 4 日志使用 二 全量字段校验 1 简介和安装 2 JSON Schema 2 1 入门案例 2 2 校验方式 3 JSON Schema语法 3 1 type关键字