[日志收集]
日志简介
- 用于记录系统运行时的信息,对一个事情的记录(脚本运行中某个重要变量的值,方法输入参数和返回结果,参数,错误,异常信息),也称为log.
搜集日志的作用
- 分析代码,定位bug
- 调试代码
- 了解项目系统运行的状况
- 分析用户的行为,做数据统计
日志的级别(记高中低级别次序)
- logging.DEBUG:调试级别[高]
- logging.INFO:信息级别[较高]
- logging.WARNING:警告级别[中]
- logging.ERROR:错误级别[低]
- logging.CRITICAL:严重错误级别[极低]
特性
- 日志级别设定后,比自己设定级别低的日志才会打印
- 设定日志级别为info,debug级别的日志信息不会打印,warning,error,critial会打印
日志代码实现分析
- 控制台 : 打印在屏幕上看
- 日志文件对象 : 写在日志文件里
- 参数含义
- filename:日志文件名
- when:产生日志文件的时间单位(几点产生)
- interval:单位的个数(几次)
- backupCount : 系统中保留日志文件的个数(比如说backupCount数值为3,那只保留3天的日志,第四天的日志加入时会删除第一天的)
使用步骤 :
- 将loggin_user.py文件部署到项目中
- 在项目下创建一个log的目录,用于存放log日志文件
- 在项目中使用日志之前,初始化日志信息,指定日志文件名,单位,单位间隔和保留的文件个数
- 在需要打印输出的位置使用logging级别(“想要输出的信息”)
[全量字段校验]
- 本质:更进⼀步的断⾔(校验接口实际与预期是否一致,校验全部字段)
- 与传统断⾔的区别:
- 传统断⾔:只能校验特定字段的值(如状态码是否为200,success是否为true等)
- 全量字段校验:可校验字段值、字段名、字段类型(如校验data字段是否存在且
为字符串类型)
- 校验流程:
- 定义校验规则
- 必填字段是否存在(如success/code/message)
- 字段数据类型是否正确(如code是否为整数,code是否为整数)
- 字段值是否符合预期(如message是否为"操作成功")
- 对比响应数据是否符合校验规则
- 定义校验规则
- json数据
{"success":true,"code":10000,"massage":"操作成功"}
- 对应校验规则
{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"integer"},"message":{"type":"string"}
},"required":["success","code","message"]
}
-
规则结构:包含type、properties和required三个关键部分
- 字段类型校验:
- “type”:"object"表示整个JSON是对象类型
- "properties"中定义各字段类型要求,如布尔型、整型、字符串型
- "required"列出必须存在的字段名
- 字段类型校验:
-
校验:
python代码校验
- 实现步骤:
- 导包:import jsonschema
- 创建校验规则:定义schema格式的数据校验规则
- 调⽤⽅法:jsonschema.validate(instance=“json数据”,schema=“jsonschema规则”)
- 校验结果:
- 校验通过:返回None
- 校验失败:返回错误信息
- schema规则错误:返回SchemaError
- json数据错误:返回ValidationError
案例
# 入门案例:
# 1.导包
import jsonschema
# 2.创建 校验规则
schema={"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"integer"},"message":{"type":"string"}},"required":["success","code","massage"]
}
# 3.调用方法,进行校验(用python语言表示json数据)
json_data={"success":True,"code":10000,"massage":"操作成功"
}
# 4.调用方法进行校验
res=jsonschema.validate(instance=json_data,schema=schema)
# 5.查看校验结果
print("校验结果:",res)
知识点 | 核心内容 | 补充 |
---|---|---|
JSON Schema校验流程 | 三步流程:1.导包 2.准备校验规则 3.调⽤validate⽅法 | 校验规则语法转换JSON语法需适配编程语⾔规范 |
validate⽅法 | 参数结构:validate(instance=实际数据,schema=校验规则) | 参数对应关系:instance对应实际JSON数据,schema对应校验规则 |
校验结果处理 | 成功:返回None;失败:返回错误对象 | 两种错误类型区分:SchemaError(规则错误) ValidationError(数据错误) |
[关键字]
- JSON Schema语法
- 基本语法:“type”:“数据类型”,必须⽤双引号包裹类型名称
- 校验流程:通过jsonschema.validate(instance=json_data,schema=schema)⽅法执⾏校验
integer -- 整数
string -- 字符串
object -- 对象
array -- 数组,对应python列表
number -- 整数/小数
null -- 空值,对应python中的None
boolean -- 布尔值,对应true和false
语法:
{"type":"数据类型"
}
# 实现步骤
1> 导包:import jsonschema
2> 定义校验规则schema
3> 准备待校验数据json_data
4> 调⽤validate⽅法
5> 打印校验结果
import jsonschema
# 2.定义规则
schema={"type":"number"
}
schema1={"type":"object"
}
# 3.定义数据
json_data=100
json_data2=100.2
json_data3={"a":1,"b":2}
# 4.调用规则进行验证
res=jsonschema.validate(instance=json_data,schema=schema)
res2=jsonschema.validate(instance=json_data2,schema=schema)
res3=jsonschema.validate(instance=json_data3,schema=schema1)# 5.查看结果
print("校验结果res:",res)
print("校验结果res2:",res2)
print("校验结果res3:",res3)
- 总结
知识点 | 核心内容 | 补充 |
---|---|---|
JSONSchema校验规则 | 通过type关键字约束数据类型(integer/string/object/array/number/null/boolean) | integer与number的区别(整数vs⼩数) |
properties关键字 | 当type为object时,⽤properties定义对象内键值对的数据类型限制 | 嵌套对象校验的语法结构 |
const关键字 | 直接断⾔字段值必须等于指定值(如code:100.3) | 与普通断⾔的区别(静态校验vs动态测试) |
pattern关键字 | 通过正则表达式实现模糊匹配(如姓名模糊查询) | 正则语法与数据库LIKE的对⽐ |
数据类型语法细节 | 所有关键字和类型值需⽤双引号包裹(如"type":“string”) | null的JSON语法(⾮Python的 |
None) |
[properties关键字]
- 说明 : 是type关键字的辅助,当type的值为object时使用,
- 作用 : 指定对象中每个字段的校验规则
- 语法:
- “type”: “object”: ⾸先声明类型为对象。
- “properties”: { “字段1”:{规则} }: 在properties下,使⽤键值对的⽅式描述每个字段及其校验规则。
# 导包
import jsonschema
# 创建校验规则定义⼀个schema变量,包含type和properties,其中properties下详细描述每个字段的类型规则。
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"}}
}
# 测试数据
json_data={"success":True,"code":10000,"message":"操作成功","money":6.66,"address":None,"data":{"name":"tom"},"luckNumber":[6,8,9]
}# 调用方法校验
res1=jsonschema.validate(instance=json_data,schema=schema)
# 查看校验结果
print("校验结果:",res1)
嵌套
"data":{"type":"object","properties":{ # data类型为object,所以可加内层properties实现嵌套"name":{"type":"string"},"age":{"type":"integer"},"height":{"type":"number"}}},
------------------------------------------"data":{"name":"tom","age":18,"height":1.81},
[required关键字]
- 作⽤:校验对象中必须存在的字段。字段名必须是字符串,且唯⼀。
- 语法:{“required”:[“字段名1”,“字段名2”,…]}
- 注意事项:
- 字段名必须⽤双引号包裹形成字符串形式
- JSON数据中的键必须是字符串类型,⽽python字典中的键可以是任意不可变类型
- 字段名必须唯⼀,不能重复
- required关键字必须与type、properties在同⼀级别,不能写在properties内部
- 字段名可以少,但不能多
# 导包
import jsonschema
# 测试数据
json_data={"success":True,"code":10000,"message":"操作成功","money":6.66,"address":None,"data":{"name":"tom"},"luckyNumber":[6,8,9]
}
# 创建校验规则
schema={"type":"object",#这里!!注意级别与type和properties同级别"required":["success","code","message","money","address","data","luckyNumber"],"properties":{"success":{"type":"boolean"},"code":{"type":"integer"},"message":{"type":"string"},"money":{"type":"number"},"address":{"type":"null"},"data":{"type":"object"},"luckyNumber":{"type":"array"}}
}# 调用方法校验
res1=jsonschema.validate(instance=json_data,schema=schema)
# 查看校验结果
print("校验结果:",res1)
- 嵌套对象校验:
- 对于嵌套的object类型字段,可以在其properties内部再使⽤required
- 示例中data字段是object,要求必须包含name、age和height字段
- required的位置必须在对应object的properties内部
"data":{"type":"object","required":["name","age","height"]},
----------------properties写不写都行----------------
"data":{"name":"tom","age":18,"height":1.81
},
知识点 | 内容 | 补充注意 |
---|---|---|
JSON Schema校验 | 全量字段校验可验证数据字段类型和字段名 | 注意字段类型校验与字段名校验的区别 |
type关键字 | ⽤于校验数据值的类型(如boolean/string/number等) | 校验的是数据值类型 |
properties关键字 | 描述对象中每个字段的数据类型要求 | 与type关键字需配合使⽤ |
required关键字 | 校验对象中必须存在的字段 | 书写位置(与properties同级而非嵌套) |
JSON键名规则 | 键名必须为字符串且唯⼀ | Python字典与JSON键名规则差异(Python允许⾮字符串键) |
嵌套校验 | 对嵌套对象内的字段进⾏required校验 | 嵌套required的书写层级需与对应properties同级 |
语法格式 | required字段需⽤数组形式列出必须字段 | 字段名必须⽤双引号包裹 |
[const关键字]
- 等价断⾔:const关键字的作⽤等价于断⾔中的等于判断,⽤于校验字段值是否为固定值
- 全量校验:在全量字段校验中,const可以实现类似断⾔中等值判断的功能
- 语法 : {“字段名”:{“const”:具体值}}
import jsonschema# 待测数据
data = {"success": True,"name": "李四","height": 1.92,"addr":None
}
# 校验规则
schema={"type":"object", # 可以省略"properties":{"success":{"const":True},"name":{"const":"李四"},"height":{"const":1.92},"addr":{"const":None}}
}
[pattern关键字]---------用到正则表达式
- 定义与作⽤:使⽤不常⽤符号(如$、^、[]、{}等)组合成特定语法,从⼤量字符串数据中按条件筛选数据
- 应⽤场景:企业项⽬中75%以上数据为字符串,常⽤于字符串模糊匹配(如筛选姓名含特定字的学⽣)
# 举例:
基本规则:
o 包含匹配:直接写⽬标字符串(如"hello"),等效于断⾔中的in
o 开头匹配:⽤^符号(如^hello匹配"hello,world")
o 结尾匹配:⽤$符号(如hello$匹配"中国,hello")
o 单字符匹配:⽤[]包含可选字符(如[0-9]匹配任意数字,[a-z]匹配任意一个⼩写字⺟)
o 次数匹配:⽤{}指定次数(如[0-9]{11}匹配11位数字,就是长度为11,内容为0-9间,12345678901)
# 语法
{"字段名":{"pattern":"正则表达式"}
}
# 导包
import jsonschema
# 测试数据
data={"message":"操作成功!","mobile":"13800000002"
}
# 校验规则
schema={"type":"object","properties":{"message":{"pattern":"^操作成功"},"mobile":{"pattern":"^[0-9]{11}$"}}
}
res=jsonschema.validate(instance=data,schema=schema)
# 5.查看结果
print("校验结果res:",res)
[综合案例]
# 需求
校验需求:
o 整个JSON数据是⼀个对象
o 必须包含success、code、message、data字段,且字段必须存在
o success字段为布尔类型
o code为整数类型
o message为以"登录成功"结尾的字符串
o data为对象,必须包含name、age字段
o data中的name字段必须等于"lily"
o data中的age必须是20
data = {"success": false,"code": 10000,"message": "xxx登录成功","data": {"age": 20,"name": "lily"}}
# 示例
# 导包
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)
# 5.查看结果
print("校验结果res:",res)