lyrebird-api-coverage


Namelyrebird-api-coverage JSON
Version 0.4.1 PyPI version JSON
download
home_pagehttps://github.com/meituan/lyrebird-api-coverage
Summary
upload_time2023-05-31 12:21:35
maintainer
docs_urlNone
authorHBQA
requires_python
license
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI
coveralls test coverage No coveralls.
            # Lyrebird Plugin API-Coverage

[![Build Status](https://travis-ci.org/meituan/lyrebird-api-coverage.svg?branch=master)](https://travis-ci.org/meituan/lyrebird-api-coverage)

## 简介
* API-Coverage是基于[Lyrebird](https://github.com/meituan/lyrebird)的插件,为客户端提供API维度测试覆盖评估方法。 
* 客户端的操作可以实时反应在前端页面上,主要有API覆盖率统计、不同优先级的覆盖率展示等。可以参考该数据,判断测试是否已覆盖目标功能。
* API覆盖率的计算公式:覆盖率 = 已访问API/基准API
    * 已访问API:被测应用已发出的请求(只记录当前业务内API)
    * 基准API:当前业务所有API


<img src="./images/main.png" style="width:800px">

## 环境要求

* macOS

* Python3.7及以上


## 安装

``` bash
pip3 install lyrebird-api-coverage
```


## 启动
```bash
lyrebird
```

## 界面说明

<img src="./images/introduce.png" style="width:800px">

如图所示,不同区域的介绍:

1. 工具栏
    1. Import Base - 导入需要统计的基准API列表(文件格式见附录[Base数据格式](#Base数据格式))
    2. Resume Test - 导入统计结果并继续统计
    3. Save Result - 导出统计结果到“~/.lyrebird/plugin/lyrebird_api_coverage/data/”
    4. Clear Test - 清空当前的统计结果
    5. Filtering Rules - 过滤规则设置(配置格式见附录[过滤配置数据格式](#过滤配置数据格式))
  
2. 覆盖率信息

    1. 展示覆盖率信息,总体覆盖率信息,分优先级覆盖率信息

3. 基准API信息
    1. 展示当前生效的基准API信息

4. 覆盖率详情模块

    1. Priority:API的优先级
    2. API: URL信息
    3. Description:API的描述信息
    4. Count:API的请求次数
    5. Status:API的状态,包括 已测试,未测试,不在base中的API
    6. Detail:查看请求详情,点击表格最后一列的详情中的Detail,就可以展示最近一次的请求的详情

## 使用流程

1. 准备Base数据,Base数据格式[见附录](#Base数据格式)
2. 点击工具栏中的“Import Base”按钮进行导入Base文件
3. 操作过程中观测页面的覆盖率等信息展示


## 开发者指南

```bash
# clone 代码
git clone https://github.com/meituan/lyrebird-api-coverage.git

# 进入工程目录
cd lyrebird-api-coverage

# 创建虚拟环境
python3 -m venv venv

# 安装依赖
source venv/bin/activate
pip3 install -r requirements.txt

# 使用IDE打开工程(推荐Pycharm或vscode)

# 在IDE中执行debug.py即可开始调试
```


## 附录
### Base数据格式

```json
{
  "business": "app_channel",
  "version_code": 1,
  "version_name": "1.0",
  "api_list": [
    {
      "desc": "A接口",
      "priority": 3,
      "url": "meituan.com/test/a"
    },
    {
      "desc": "B接口",
      "priority": 2,
      "url": "meituan.com/test/b?paramKey=val"
    },
    {
      "desc": "C接口",
      "priority": 2,
      "url": "meituan.com/test/c/{num}"
    },
    {
      "desc": "D接口",
      "priority": 1,
      "url": "meituan.com/test/d?sourceType=1"
    }
  ]
}
```
- 支持两种API,Path 和 Path + query,即不带参数的配置和带参数的配置
- 在配置API时,如果path中带有参数,如 a.b.com/v1/test/{num},需要用'{}'括起,在覆盖率计算中用来判断是同一API
- 配置参数的情况下,字段名的大小写敏感

### 过滤配置数据格式
- demo

```json
{
  "exclude": {
    "host": [
      "a.meituan.com",
      "b.baidu.com"
    ],
    "regular": [
      ".webp",
      ".gif",
      ".jpg",
      ".png"
    ]
  }
}
```
- 支持两种筛除规则,以host为维度,以包含字符串为维度
    - 如果不想关注某些host下的请求,可以按照上述筛选配置文件的数据格式配置 host字段下的规则
    - 如果不想关注某些包含指定字符串的请求(如:.webp),可以按照上述筛选配置文件的数据格式配置 regular字段下的规则
    
- 字段说明
    - exclude:不关注的配置项
        - host:不关注的host
        - regular:不关注的字符串(URL只要包含指定的字符串都会筛选掉)
            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/meituan/lyrebird-api-coverage",
    "name": "lyrebird-api-coverage",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "",
    "maintainer_email": "",
    "keywords": "",
    "author": "HBQA",
    "author_email": "",
    "download_url": "https://files.pythonhosted.org/packages/11/67/94135f5aea9733c7c257cbaf79eb56cca225809a9b559ebff95da6cfc0cf/lyrebird-api-coverage-0.4.1.tar.gz",
    "platform": null,
    "description": "# Lyrebird Plugin API-Coverage\n\n[![Build Status](https://travis-ci.org/meituan/lyrebird-api-coverage.svg?branch=master)](https://travis-ci.org/meituan/lyrebird-api-coverage)\n\n## \u7b80\u4ecb\n* API-Coverage\u662f\u57fa\u4e8e[Lyrebird](https://github.com/meituan/lyrebird)\u7684\u63d2\u4ef6\uff0c\u4e3a\u5ba2\u6237\u7aef\u63d0\u4f9bAPI\u7ef4\u5ea6\u6d4b\u8bd5\u8986\u76d6\u8bc4\u4f30\u65b9\u6cd5\u3002 \n* \u5ba2\u6237\u7aef\u7684\u64cd\u4f5c\u53ef\u4ee5\u5b9e\u65f6\u53cd\u5e94\u5728\u524d\u7aef\u9875\u9762\u4e0a\uff0c\u4e3b\u8981\u6709API\u8986\u76d6\u7387\u7edf\u8ba1\u3001\u4e0d\u540c\u4f18\u5148\u7ea7\u7684\u8986\u76d6\u7387\u5c55\u793a\u7b49\u3002\u53ef\u4ee5\u53c2\u8003\u8be5\u6570\u636e\uff0c\u5224\u65ad\u6d4b\u8bd5\u662f\u5426\u5df2\u8986\u76d6\u76ee\u6807\u529f\u80fd\u3002\n* API\u8986\u76d6\u7387\u7684\u8ba1\u7b97\u516c\u5f0f\uff1a\u8986\u76d6\u7387 = \u5df2\u8bbf\u95eeAPI/\u57fa\u51c6API\n    * \u5df2\u8bbf\u95eeAPI\uff1a\u88ab\u6d4b\u5e94\u7528\u5df2\u53d1\u51fa\u7684\u8bf7\u6c42\uff08\u53ea\u8bb0\u5f55\u5f53\u524d\u4e1a\u52a1\u5185API\uff09\n    * \u57fa\u51c6API\uff1a\u5f53\u524d\u4e1a\u52a1\u6240\u6709API\n\n\n<img src=\"./images/main.png\" style=\"width:800px\">\n\n## \u73af\u5883\u8981\u6c42\n\n* macOS\n\n* Python3.7\u53ca\u4ee5\u4e0a\n\n\n## \u5b89\u88c5\n\n``` bash\npip3 install lyrebird-api-coverage\n```\n\n\n## \u542f\u52a8\n```bash\nlyrebird\n```\n\n## \u754c\u9762\u8bf4\u660e\n\n<img src=\"./images/introduce.png\" style=\"width:800px\">\n\n\u5982\u56fe\u6240\u793a\uff0c\u4e0d\u540c\u533a\u57df\u7684\u4ecb\u7ecd\uff1a\n\n1. \u5de5\u5177\u680f\n    1. Import Base - \u5bfc\u5165\u9700\u8981\u7edf\u8ba1\u7684\u57fa\u51c6API\u5217\u8868\uff08\u6587\u4ef6\u683c\u5f0f\u89c1\u9644\u5f55[Base\u6570\u636e\u683c\u5f0f](#Base\u6570\u636e\u683c\u5f0f)\uff09\n    2. Resume Test - \u5bfc\u5165\u7edf\u8ba1\u7ed3\u679c\u5e76\u7ee7\u7eed\u7edf\u8ba1\n    3. Save Result - \u5bfc\u51fa\u7edf\u8ba1\u7ed3\u679c\u5230\u201c~/.lyrebird/plugin/lyrebird_api_coverage/data/\u201d\n    4. Clear Test - \u6e05\u7a7a\u5f53\u524d\u7684\u7edf\u8ba1\u7ed3\u679c\n    5. Filtering Rules - \u8fc7\u6ee4\u89c4\u5219\u8bbe\u7f6e\uff08\u914d\u7f6e\u683c\u5f0f\u89c1\u9644\u5f55[\u8fc7\u6ee4\u914d\u7f6e\u6570\u636e\u683c\u5f0f](#\u8fc7\u6ee4\u914d\u7f6e\u6570\u636e\u683c\u5f0f)\uff09\n  \n2. \u8986\u76d6\u7387\u4fe1\u606f\n\n    1. \u5c55\u793a\u8986\u76d6\u7387\u4fe1\u606f\uff0c\u603b\u4f53\u8986\u76d6\u7387\u4fe1\u606f\uff0c\u5206\u4f18\u5148\u7ea7\u8986\u76d6\u7387\u4fe1\u606f\n\n3. \u57fa\u51c6API\u4fe1\u606f\n    1. \u5c55\u793a\u5f53\u524d\u751f\u6548\u7684\u57fa\u51c6API\u4fe1\u606f\n\n4. \u8986\u76d6\u7387\u8be6\u60c5\u6a21\u5757\n\n    1. Priority\uff1aAPI\u7684\u4f18\u5148\u7ea7\n    2. API: URL\u4fe1\u606f\n    3. Description\uff1aAPI\u7684\u63cf\u8ff0\u4fe1\u606f\n    4. Count\uff1aAPI\u7684\u8bf7\u6c42\u6b21\u6570\n    5. Status\uff1aAPI\u7684\u72b6\u6001\uff0c\u5305\u62ec \u5df2\u6d4b\u8bd5\uff0c\u672a\u6d4b\u8bd5\uff0c\u4e0d\u5728base\u4e2d\u7684API\n    6. Detail\uff1a\u67e5\u770b\u8bf7\u6c42\u8be6\u60c5\uff0c\u70b9\u51fb\u8868\u683c\u6700\u540e\u4e00\u5217\u7684\u8be6\u60c5\u4e2d\u7684Detail\uff0c\u5c31\u53ef\u4ee5\u5c55\u793a\u6700\u8fd1\u4e00\u6b21\u7684\u8bf7\u6c42\u7684\u8be6\u60c5\n\n## \u4f7f\u7528\u6d41\u7a0b\n\n1. \u51c6\u5907Base\u6570\u636e\uff0cBase\u6570\u636e\u683c\u5f0f[\u89c1\u9644\u5f55](#Base\u6570\u636e\u683c\u5f0f)\n2. \u70b9\u51fb\u5de5\u5177\u680f\u4e2d\u7684\u201cImport Base\u201d\u6309\u94ae\u8fdb\u884c\u5bfc\u5165Base\u6587\u4ef6\n3. \u64cd\u4f5c\u8fc7\u7a0b\u4e2d\u89c2\u6d4b\u9875\u9762\u7684\u8986\u76d6\u7387\u7b49\u4fe1\u606f\u5c55\u793a\n\n\n## \u5f00\u53d1\u8005\u6307\u5357\n\n```bash\n# clone \u4ee3\u7801\ngit clone https://github.com/meituan/lyrebird-api-coverage.git\n\n# \u8fdb\u5165\u5de5\u7a0b\u76ee\u5f55\ncd lyrebird-api-coverage\n\n# \u521b\u5efa\u865a\u62df\u73af\u5883\npython3 -m venv venv\n\n# \u5b89\u88c5\u4f9d\u8d56\nsource venv/bin/activate\npip3 install -r requirements.txt\n\n# \u4f7f\u7528IDE\u6253\u5f00\u5de5\u7a0b\uff08\u63a8\u8350Pycharm\u6216vscode\uff09\n\n# \u5728IDE\u4e2d\u6267\u884cdebug.py\u5373\u53ef\u5f00\u59cb\u8c03\u8bd5\n```\n\n\n## \u9644\u5f55\n### Base\u6570\u636e\u683c\u5f0f\n\n```json\n{\n  \"business\": \"app_channel\",\n  \"version_code\": 1,\n  \"version_name\": \"1.0\",\n  \"api_list\": [\n    {\n      \"desc\": \"A\u63a5\u53e3\",\n      \"priority\": 3,\n      \"url\": \"meituan.com/test/a\"\n    },\n    {\n      \"desc\": \"B\u63a5\u53e3\",\n      \"priority\": 2,\n      \"url\": \"meituan.com/test/b?paramKey=val\"\n    },\n    {\n      \"desc\": \"C\u63a5\u53e3\",\n      \"priority\": 2,\n      \"url\": \"meituan.com/test/c/{num}\"\n    },\n    {\n      \"desc\": \"D\u63a5\u53e3\",\n      \"priority\": 1,\n      \"url\": \"meituan.com/test/d?sourceType=1\"\n    }\n  ]\n}\n```\n- \u652f\u6301\u4e24\u79cdAPI\uff0cPath \u548c Path + query\uff0c\u5373\u4e0d\u5e26\u53c2\u6570\u7684\u914d\u7f6e\u548c\u5e26\u53c2\u6570\u7684\u914d\u7f6e\n- \u5728\u914d\u7f6eAPI\u65f6\uff0c\u5982\u679cpath\u4e2d\u5e26\u6709\u53c2\u6570\uff0c\u5982 a.b.com/v1/test/{num}\uff0c\u9700\u8981\u7528'{}'\u62ec\u8d77\uff0c\u5728\u8986\u76d6\u7387\u8ba1\u7b97\u4e2d\u7528\u6765\u5224\u65ad\u662f\u540c\u4e00API\n- \u914d\u7f6e\u53c2\u6570\u7684\u60c5\u51b5\u4e0b\uff0c\u5b57\u6bb5\u540d\u7684\u5927\u5c0f\u5199\u654f\u611f\n\n### \u8fc7\u6ee4\u914d\u7f6e\u6570\u636e\u683c\u5f0f\n- demo\n\n```json\n{\n  \"exclude\": {\n    \"host\": [\n      \"a.meituan.com\",\n      \"b.baidu.com\"\n    ],\n    \"regular\": [\n      \".webp\",\n      \".gif\",\n      \".jpg\",\n      \".png\"\n    ]\n  }\n}\n```\n- \u652f\u6301\u4e24\u79cd\u7b5b\u9664\u89c4\u5219\uff0c\u4ee5host\u4e3a\u7ef4\u5ea6\uff0c\u4ee5\u5305\u542b\u5b57\u7b26\u4e32\u4e3a\u7ef4\u5ea6\n    - \u5982\u679c\u4e0d\u60f3\u5173\u6ce8\u67d0\u4e9bhost\u4e0b\u7684\u8bf7\u6c42\uff0c\u53ef\u4ee5\u6309\u7167\u4e0a\u8ff0\u7b5b\u9009\u914d\u7f6e\u6587\u4ef6\u7684\u6570\u636e\u683c\u5f0f\u914d\u7f6e host\u5b57\u6bb5\u4e0b\u7684\u89c4\u5219\n    - \u5982\u679c\u4e0d\u60f3\u5173\u6ce8\u67d0\u4e9b\u5305\u542b\u6307\u5b9a\u5b57\u7b26\u4e32\u7684\u8bf7\u6c42\uff08\u5982\uff1a.webp\uff09\uff0c\u53ef\u4ee5\u6309\u7167\u4e0a\u8ff0\u7b5b\u9009\u914d\u7f6e\u6587\u4ef6\u7684\u6570\u636e\u683c\u5f0f\u914d\u7f6e regular\u5b57\u6bb5\u4e0b\u7684\u89c4\u5219\n    \n- \u5b57\u6bb5\u8bf4\u660e\n    - exclude:\u4e0d\u5173\u6ce8\u7684\u914d\u7f6e\u9879\n        - host:\u4e0d\u5173\u6ce8\u7684host\n        - regular:\u4e0d\u5173\u6ce8\u7684\u5b57\u7b26\u4e32\uff08URL\u53ea\u8981\u5305\u542b\u6307\u5b9a\u7684\u5b57\u7b26\u4e32\u90fd\u4f1a\u7b5b\u9009\u6389\uff09",
    "bugtrack_url": null,
    "license": "",
    "summary": "",
    "version": "0.4.1",
    "project_urls": {
        "Homepage": "https://github.com/meituan/lyrebird-api-coverage"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "116794135f5aea9733c7c257cbaf79eb56cca225809a9b559ebff95da6cfc0cf",
                "md5": "ac5b515185178e10463f64b83ea3a3a3",
                "sha256": "570b7866f80b7981aaa2f2a4a9fc82d89bc154560e9ce90d1030c340a0adbaf7"
            },
            "downloads": -1,
            "filename": "lyrebird-api-coverage-0.4.1.tar.gz",
            "has_sig": false,
            "md5_digest": "ac5b515185178e10463f64b83ea3a3a3",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 1681895,
            "upload_time": "2023-05-31T12:21:35",
            "upload_time_iso_8601": "2023-05-31T12:21:35.369094Z",
            "url": "https://files.pythonhosted.org/packages/11/67/94135f5aea9733c7c257cbaf79eb56cca225809a9b559ebff95da6cfc0cf/lyrebird-api-coverage-0.4.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-05-31 12:21:35",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "meituan",
    "github_project": "lyrebird-api-coverage",
    "travis_ci": true,
    "coveralls": false,
    "github_actions": false,
    "requirements": [],
    "lcname": "lyrebird-api-coverage"
}
        
Elapsed time: 0.11561s