pip3 install lyrebird-tracking
请求数据分析的应用场景比较广泛,以其中一种典型应用场景如客户端 埋点 的分析校验来进行示例
[
{
"key1": "val1",
"property1" : [
{
"key2": "val2",
"action": "view",
"page": "detail_page"
}
]
}
]
{
"target": [
"abctest.com"
],
"cases": [{
"name": "test case 1st",
"selector": "$[?key1='val1'].property1[?key2='val2']",
"asserts": [{
"field": "action",
"schema": {
"type": "string",
"pattern": "view"
}
},
{
"field": "page",
"schema": {
"type": "string",
"pattern": "detail_page"
}
}
]
}]
}
若移动端发出符合预期的 Request Data,如下
[
{
"key1": "val1",
"property1" : [
{
"action": "view",
"key2": "val2",
"lab": {
"good_id": 10001,
"index": 5,
"page_name": "detail_page101"
},
"page": "detail_page"
}
]
}
]
Tracking 会自动分析和校验,如图所示

若移动端发出不符合预期的 Request Data,如其中 action 字段的值不符合预期 view,如下
[
{
"key1": "val1",
"property1" : [
{
"action": "click",
"key2": "val2",
"lab": {
"good_id": 10001,
"index": 5,
"page_name": "detail_page101"
},
"page": "detail_page"
}
]
}
]
Tracking 会自动分析和校验,并将错误信息高亮标红展示,如图所示


如上图所示:
# clone 代码
git clone https://github.com/meituan/lyrebird-tracking.git
# 进入工程目录
cd lyrebird-tracking
# 创建虚拟环境
python3 -m venv venv
# 安装依赖
source venv/bin/activate
pip3 install -r requirements.txt
# 使用IDE打开工程(推荐Pycharm或vscode)
# 在IDE中执行debug.py即可开始调试
{
"target": [
"abctest.com"
],
"cases": [{
"name": "test case 1st",
"selector": "$[?key1='val1'].property1[?key2='val2']",
"asserts": [{
"field": "action",
"schema": {
"type": "string",
"pattern": "view"
}
},
{
"field": "page",
"schema": {
"type": "string",
"pattern": "detail_page"
}
}
],
"groupname": "group1",
"groupid": 1
}, {
"name": "test case 2nd",
"selector": "$[*].property2[?key3='val3']",
"asserts": [{
"field": "action",
"schema": {
"type": "string",
"pattern": "click"
}
},
{
"field": "page",
"schema": {
"type": "string",
"pattern": "home_page"
}
}
],
"groupname": "group2",
"groupid": 2
}]
}
用于查询逻辑的 selector 配置基于 JSONPath 的语法。类似于 XPath 在 xml 文档中的定位,JSONPath 表达式通常是用来路径检索或设置 Json 的。目前仅支持一部分 JSONPath 语法,如下所述。
| JSONPath | 描述 |
| $ | 根对象。例如 $name |
| [num] | 数组访问,其中 num 是数字。例如 $[0].leader.departments[1].name |
| [*] | 数组访问,访问所有数组的元素。例如 $[*].leader.departments[2].name |
| [key='test'] | 字符串类型对象属性判断相等的过滤,例如 $departs[name = 'test'] |
| . | 属性访问,例如 $name.a.b |
[
{
"name":"king",
"property":123,
"house":120
},
{
"name":"wang",
"property":456,
"house":240
},
{
"name":"king",
"car":"audi",
"house":120
},
{
"name":"king",
"property":123,
"house":789
},
{
"name":"king",
"property":666,
"house":666
}
]
| JSONPath | 语义 |
| $ | 根对象 |
| $[1] | 第1个元素 |
| $[*] | 全部元素 |
| $[name='king'] | list 中 name 属性为 king 的元素 |
| $[name='king'].property | list 中 name 属性为 king 的元素并且取该元素的 property 属性的值 |
用于校验逻辑的 schema 配置基于 JSONSchema 的语法。JSON Schema 用以标注和验证 JSON 文档的元数据的文档,可以类比于 XML Schema。相对于 JSON Schema,一个 JSON 文档就是 JSON Schema 的一个 instance,可以校验数据结构、数据类型、和详细的判断等。

