{"id":13625863,"url":"https://github.com/Meituan-Dianping/lyrebird","last_synced_at":"2025-04-16T10:33:38.751Z","repository":{"id":32703918,"uuid":"140687246","full_name":"Meituan-Dianping/lyrebird","owner":"Meituan-Dianping","description":"移动应用插件化测试工作台","archived":false,"fork":false,"pushed_at":"2024-10-29T09:29:36.000Z","size":89675,"stargazers_count":1167,"open_issues_count":81,"forks_count":246,"subscribers_count":40,"default_branch":"master","last_synced_at":"2024-10-29T10:57:34.456Z","etag":null,"topics":["android-testing","ios-testing","lyrebird","mobile-testing","mock","proxy","python","testing-tools"],"latest_commit_sha":null,"homepage":"https://meituan-dianping.github.io/lyrebird/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":"Unmaintained","scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Meituan-Dianping.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-07-12T08:50:59.000Z","updated_at":"2024-10-29T02:55:50.000Z","dependencies_parsed_at":"2023-11-15T11:39:20.467Z","dependency_job_id":"19e3326c-90f1-4110-9519-361a135144b1","html_url":"https://github.com/Meituan-Dianping/lyrebird","commit_stats":null,"previous_names":[],"tags_count":245,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Meituan-Dianping%2Flyrebird","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Meituan-Dianping%2Flyrebird/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Meituan-Dianping%2Flyrebird/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Meituan-Dianping%2Flyrebird/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Meituan-Dianping","download_url":"https://codeload.github.com/Meituan-Dianping/lyrebird/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223708400,"owners_count":17189772,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android-testing","ios-testing","lyrebird","mobile-testing","mock","proxy","python","testing-tools"],"created_at":"2024-08-01T21:02:04.043Z","updated_at":"2024-11-08T15:30:39.424Z","avatar_url":"https://github.com/Meituan-Dianping.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\u003ca herf=\"https://meituan-dianping.github.io/lyrebird/\"\u003e\u003cimg src=\"./image/lyrebird.png\" width=\"220\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch1 align=\"center\"\u003eLyrebird\u003c/h1\u003e\n\n![Tests](https://github.com/Meituan-Dianping/lyrebird/workflows/Tests/badge.svg)\n![Publish](https://github.com/Meituan-Dianping/lyrebird/workflows/Publish/badge.svg)\n![CodeQL](https://github.com/Meituan-Dianping/lyrebird/workflows/CodeQL/badge.svg)\n\n# [PYPI](https://pypi.org/project/lyrebird/)\n\n[![PyPI](https://img.shields.io/pypi/v/lyrebird.svg)](https://pypi.python.org/pypi/lyrebird)\n![PyPI](https://img.shields.io/pypi/pyversions/lyrebird.svg)\n![PyPI - Downloads](https://img.shields.io/pypi/dm/lyrebird.svg)\n\n```\npip install lyrebird\n```\n\n# [DockerHub](https://hub.docker.com/r/overbridge/lyrebird)\n\n![Docker Image Version (latest semver)](https://img.shields.io/docker/v/overbridge/lyrebird?sort=semver)\n![Docker Image Size (latest by date)](https://img.shields.io/docker/image-size/overbridge/lyrebird?sort=date)\n\n```\ndocker pull overbridge/lyrebird\n```\n\n# [Docs](https://meituan-dianping.github.io/lyrebird)\n\n[![Doc](https://img.shields.io/badge/docs-github_page-green.svg)](https://meituan-dianping.github.io/lyrebird/)\n[![Backers on Open Collective](https://opencollective.com/lyrebird/backers/badge.svg)](#backers)\n[![Sponsors on Open Collective](https://opencollective.com/lyrebird/sponsors/badge.svg)](#sponsors)\n![GitHub](https://img.shields.io/github/license/meituan/lyrebird.svg)\n\n---\n\n- [简介](#简介)\n- [快速开始](#快速开始)\n  - [环境要求](#环境要求)\n  - [安装](#安装)\n  - [启动](#启动)\n  - [连接移动设备](#连接移动设备)\n  - [查看及录制数据](#查看及录制数据)\n  - [使用 Mock 数据](#使用Mock数据)\n  - [Mock 数据管理](#Mock数据管理)\n- [基本命令](#基本命令)\n- [感谢](#感谢)\n\n# 简介\n\n**Lyrebird** 是一个基于拦截以及模拟 HTTP/HTTPS 网络请求的面向移动应用的插件式测试平台。\n\n**Lyrebird** 不只提供 UI 操作，也可以通过 API 控制所有功能。\n\n**Lyrebird** 也可作为服务端接口测试 mock 工具使用。\n\n**Lyrebird** 可以通过**插件**扩展能力，实现埋点自动测试、API 覆盖率统计、移动设备及 App 控制和信息记录、自定义检查脚本等一系列功能。\n\n\u003e Lyrebird (琴鸟) 不但美丽壮观，且能歌善舞。它不但能模仿各种鸟类的鸣叫声，还能学人间的各种声音。如汽车喇叭声、火车喷气声、斧头伐木声、修路碎石机声及领号人的喊叫声等。歌声婉转动听，舞姿轻盈合拍，是澳洲鸟类中最受人喜爱的珍禽之一。\n\n---\n\n# 快速开始\n\n## 环境要求\n\n- macOS/Windows\n\n* Python \u003e= 3.7\n\n```bash\n# macOS系统中推荐使用Homebrew(https://brew.sh/#install)安装Python3\nbrew install python3\n```\n\nWindows 需要的额外步骤：\n\n- 下载并安装[编译版 OpenSSL](https://slproweb.com/products/Win32OpenSSL.html)\n- 设置系统环境变量（根据实际路径调整）\n  - LIB = C:\\Program Files\\OpenSSL-Win64\\lib\n  - INCLUDE = C:\\Program Files\\OpenSSL-Win64\\include\n\n## 安装\n\n```bash\n# 安装lyrebird\npip3 install lyrebird\n```\n\n## 启动\n\n```bash\nlyrebird\n```\n\n## 连接移动设备\n\n- 启动 Lyrebird 后，移动设备需要通过代理的方式将请求数据接入。\n\n- 将移动设备的代理地址设为当前电脑地址，默认端口为 4272（IP 地址可查看 Lyrebird 启动时输出的日志）\n\n  _(注意 ⚠️：4272 端口上使用的 mitmproxy 服务为外置依赖，需要用户自行安装 mitmproxy。如果没有安装 lyrebird 会尝试自动安装该应用)_\n\n- 被测设备上用浏览器打开 http://mitm.it, 选择对应操作系统安装证书\n\n\u003e Lyrebird 接入有两种方式:\n\na. 设置代理\n\n\u003cimg src=\"./image/connect-by-proxy.png\" width=\"800\"\u003e\n\nb. 直连\n\n\u003cimg src=\"./image/direct-connect.png\" width=\"800\"\u003e\n\n## 查看及录制数据\n\n\u003e 现在，可以开始操作移动设备了。Lyrebird 将显示捕获到的 HTTP/HTTPS 请求。\n\u003e\n\u003e 选中请求后，可以将它保存到已激活的 mock 数据组中。\n\n\u003cimg src=\"./image/inspector.gif\" width=\"800\"\u003e\n\n## 使用 Mock 数据\n\n\u003e 激活 mock 数据选择器，选择 mock 数据后。经过 Lyrebird 的请求会被 mock，如果 mock 数据中没有匹配的数据，则会代理该请求。\n\u003e\n\u003e 可以在 DataManager 界面管理 mock 数据。\n\n\u003cimg src=\"./image/inspector_mock.gif\" width=\"800\"\u003e\n\n## Mock 数据管理\n\n\u003e mock 数据可由左边导航栏切换到 DataManager 界面进行编辑管理\n\n\u003cimg src=\"./image/data_manager.gif\" width=\"800\"\u003e\n\n---\n\n## 插件\n\n\u003e 文档在建中\n\n---\n\n# 基本命令\n\n- **lyrebird**\n\n  以缺省参数启动 lyrebird\n\n- **lyrebird -v**\n\n  以输出详细日志模式启动 lyrebird\n\n- **lyrebird -b**\n\n  启动 lyrebird 不默认打开浏览器\n\n- **lyrebird --mock 9090 --proxy 4272 --data . --config your/config/file**\n\n  指定参数启动 lyrebird\n\n  参数：\n\n        --mock 默认9090 ， mock服务及前端端口\n\n        --proxy 默认4272， 代理服务端口\n\n        --data 默认./data, mock数据根目录\n\n        --config 默认~/.lyrebird/conf.json, lyrebird启动配置\n\n---\n\n# 感谢\n\n本工具中的代理功能使用[mitmproxy](https://github.com/mitmproxy/mitmproxy)实现。\n\n## Contributors\n\n\u003ca href=\"https://github.com/Meituan-Dianping/lyrebird/graphs/contributors\"\u003e\n  \u003cimg src=\"https://contrib.rocks/image?repo=Meituan-Dianping/lyrebird\" /\u003e\n\u003c/a\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMeituan-Dianping%2Flyrebird","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FMeituan-Dianping%2Flyrebird","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMeituan-Dianping%2Flyrebird/lists"}